如何将GPUImageConvolution3x3用于大于3x3的内核?

时间:2016-03-23 20:29:14

标签: ios gpuimage

Brad Larson,

首先,非常感谢您使用GPUImage进行的大量工作,开始使用它看起来非常可靠和有用。

我的问题是,如何将GPUImage卷积3x3用于更大的内核。我的印象是,任何卷积都可以通过内核3x3来表达但是如何实现呢?我特指的是gabor kernel。打算用卷积来尝试,而不是创建新的过滤器类。

感谢。

1 个答案:

答案 0 :(得分:2)

对于更大的卷积(5x5等),您需要创建一个执行该卷积的新滤镜类型。基本的3x3卷积在框架中提供,因为它快速且易于指定。在大多数iOS设备上,你几乎可以免费获得9个纹理读取。

当你开始超越它时,事情变得更加昂贵。 5x5卷积需要25个纹理读取,依此类推。这可能导致处理速度非常慢。

因此,通过使用可分离的内核在框架中完成高斯模糊等操作。首先,图像水平模糊,然后模糊的水平结果垂直模糊。这大大减少了纹理读取和计算的次数。

我相信Gabor过滤器可以用可分离的内核(或一系列可分离的内核)来表示,就像尝试here一样。您可以将其中的工作转换为具有给定半径的片段着色器,以比仅大面积卷积更有效的方式实现Gabor滤波器。