2013-10-27 36 views
0

该问题类似于在M×N图像上应用滑动2D窗口最大过滤器。然而,与正常情况相反,滑动窗口不是简单地滑过1个像素,而是通过k像素跳跃。因此,例如,如果k = 2,则滑动窗口将水平地应用于(0,0),(2,0),(4,0),...以及类似地垂直的像素。高效图像2d滑动窗口最大算法与跳跃> 1

对于1跳的情况,CUDA NPP(性能原语)库中已经存在一个实现。更具体地说,这些功能被称为nppiFilterMax*。但是,我一直无法找到k-hop滑动的更广泛的版本。作为解决方法,我可以简单地使用NPP函数来执行最大1跳滤波器,并简单地在相应的位置处选择结果,虽然这看起来很浪费且效率低下。这个问题是否有任何现有的实施或白皮书?

回答

2

那些图像卷积函数通常设计为hop == 1。当> 1时,较少的数据在不同的偏移量之间共享,因此性能可能会下降。

对于hop > 1,您可能需要编写自己的内核以获得更好的性能。您可以看到这个CUDA样本“可分离卷积”以获取更多信息。

http://docs.nvidia.com/cuda/cuda-samples/index.html#cuda-separable-convolution

它配备了一个白皮书讨论细节。幸运的是,最大卷积也是可分离的。你会得到关于如何编写内核这项任务它

http://docs.nvidia.com/cuda/samples/3_Imaging/convolutionSeparable/doc/convolutionSeparable.pdf

+0

感谢您的建议的一些想法。我之前实际阅读过这篇论文,并正准备实施我自己的版本。但是,现在只需运行1跳卷积并对结果进行下采样即可。 – user1715925