在iPhone上使用OpenGL ES卷积图像:可能吗?

时间:2010-11-24 19:30:58

标签: iphone performance opengl-es computer-vision

我已经搜索过几次,但我还没有得到一个正确的答案。我有一个矩阵,我想用离散滤波器(例如用于边缘检测的Sobel算子)进行卷积。是否有可能在iPhone上使用OpenGL ES加速实现这一目标?

如果是,怎么样?如果不是,是否还有其他高性能技巧可以用来加速操作?精灵ARM装配操作可以快速完成吗?最终,我希望在iPhone的ARM处理器上尽可能快地进行卷积。

1 个答案:

答案 0 :(得分:14)

您应该能够使用OpenGL ES 2.0下的可编程着色器执行此操作。我在iTunes U的课堂视频中更详细地描述了OpenGL ES 2.0着色器。

虽然我自己没有完成图像卷积,但我描述了Mac和iOS here的一些GPU加速图像处理。我提出了一个sample application使用GLSL着色器(基于Apple开发的核心图像滤镜),可以从iPhone的相机进行实时颜色跟踪。

自从我写这篇文章以来,我基于上面的例子创建了一个open source framework,它具有内置的图像卷积滤波器,范围从Sobel边缘检测到自定义3x3卷积内核。这些可以比CPU绑定的实现快100倍。

但是,如果您要在CPU上执行此操作,则可以使用Accelerate framework在iPhone的NEON SIMD设备上运行某些操作。特别是,FFT操作(通常是图像卷积滤波器中的关键组件,或者我听说过)通过使用Apple提供的例程可以获得~4-5倍的加速。