Свертка изображения с помощью OpenGL ES на iPhone: возможно? - PullRequest
5 голосов
/ 24 ноября 2010

Я гуглил несколько раз, но я не получил прямого ответа. У меня есть матрица, которую я хотел бы свернуть с дискретным фильтром (например, оператор Собеля для обнаружения краев). Можно ли сделать это ускоренным способом с помощью OpenGL ES на iPhone?

Если это так, то как? Если это не так, есть ли другие высокопроизводительные приемы, которые я могу использовать для ускорения операции? Wizardly ARM сборка операций, которые могут сделать это быстро? В конечном счете, я хочу максимально быстро выполнить свертку на ARM-процессоре iPhone.

1 Ответ

14 голосов
/ 25 ноября 2010

Вы должны быть в состоянии сделать это, используя программируемые шейдеры под OpenGL ES 2.0. Более подробно я описываю шейдеры OpenGL ES 2.0 в видео для моего класса на iTunes U .

Хотя я сам не делал свертку изображений, я описываю некоторую обработку изображений с ускорением на GPU для Mac и iOS здесь . Я представляю пример приложения , в котором используются шейдеры GLSL (на основе фильтров Core Image, разработанных Apple), которое выполняет отслеживание цвета в реальном времени с камеры iPhone.

С тех пор, как я написал это, я создал фреймворк с открытым исходным кодом , основанный на приведенном выше примере, который имеет встроенные фильтры свертки изображений, от обнаружения краев Собеля до пользовательских ядер свертки 3x3. Они могут работать в 100 раз быстрее, чем реализации с привязкой к процессору.

Однако, если вы сделаете это на процессоре, вы можете использовать Accelerate framework для запуска некоторых операций на устройстве NEON SIMD iPhone. В частности, операции FFT (которые обычно являются ключевым компонентом в фильтрах свертки изображений или, как я слышал) могут ускориться в ~ 4-5 раз при использовании процедур, которые Apple предоставляет здесь.

...