Как реализовать быстрые фильтры изображений на платформе iOS

Я работаю над приложением для iOS, где пользователь может применять определенный набор фотофильтров. Каждый фильтр представляет собой набор экшенов Photoshop с определенными параметрами. Это следующие действия:

  • Регулировка уровней
  • Яркость / Контраст
  • Цветовой тон / Насыщенность
  • Одно и несколько наложений

Я повторил все эти действия в своем коде, используя арифметические выражения, циклически проходящие по всем пикселям в изображение. Но когда я запускаю свое приложение на iPhone 4, для применения каждого фильтра требуется около 3-4 секунд, что для пользователя довольно много времени. Размер изображения составляет 640 x 640 пикселей, что в 2 раза больше моего размера просмотра, потому что оно отображается на дисплее Retina. Я обнаружил, что моя основная проблема - это модификации уровней, которые вызывают функцию pow () C каждый раз, когда мне нужно настроить гамму. Я, конечно, использую числа с плавающей запятой, а не двойные, потому что ARMv6 и ARMv7 медленны с двойными числами. Пытался включить и отключить Thumb, результат тот же.

Пример простейшего фильтра в моем приложении, который работает довольно быстро (2 секунды). Другие фильтры включают в себя больше выражений и вызовов pow (), что делает их медленными.

https://gist.github.com/1156760

Я видел некоторые решения, которые используют преобразования матрицы Accelerate Framework vDSP для быстрого изображения модификации. Я также видел решения OpenGL ES. Я не уверен, что они способны удовлетворить мои потребности. Но, вероятно, дело просто в том, чтобы преобразовать мой набор изменений в какую-нибудь хорошую матрицу свертки?

Любой совет будет полезен.

Спасибо,
Андрей.

10
задан Andrey Chernih 19 August 2011 в 13:23
поделиться