双通道直接卷积在当今的实时图形中是最常用的高斯滤波方法,但是当在大内核上运行时,它会变得很耗时,因为每个像素的成本随内核大小的线性增加而增加。许多应用程序在过滤前对输入图像进行采样,以降低性能。为了解决这一问题,在过去,我们提出了几种过滤宽度独立算法,其中大部分涉及频域转换1、递归计算4或重复集成5,直到最近引入的GPU通用计算才能够方便地在传统的GPU流水线上实现。在这三种技术中,重复集成通常被认为是直观和有效的。
在这个代码示例中,我们演示了如何通过使用计算着色器进行重复集成来执行高斯过滤。该算法基于以下简单事实:在输入数据上反复应用一个框式过滤器(平均过滤器),将快速近似高斯滤波的结果,而盒滤波可以通过扫描操作进行处理,从而使每个像素的成本独立于内核大小。作为传统的双通道卷积方法,我们还采用了一个垂直和水平的传递,在每一段中,每一列或一排像素首先被取到共享内存中,然后反复使用一个方框过滤器,最后将其写入到全局内存中。
在本文的其余部分中,我们将解释算法的细节,然后使用计算着色器和组共享内存来描述实现。
1