opencv 2.4.9,我们如何用gpu :: convolve和cv :: filter2D获得相同的结果?

时间:2014-06-02 23:37:13

标签: c++ opencv convolution dft

我正在尝试使用opencv gpu模块使用Gabor内核过滤图像。为了检查一切是否正确,我将CUDA加速过滤的结果与常规CPU过滤进行比较。我正在使用的代码可在此处找到:https://github.com/juancamilog/gpu_convolve_test.git

由于funtcion cv :: gpu :: filter2D仅限于大小小于16x16的内核,我使用cv :: gpu :: convolve来处理更大的内核。在这种情况下,我使用cv :: gpu :: copyMakeBorder来生成与原始图像大小相同的过滤器响应。 gpu :: convolve使用cuFFT来计算卷积。

我面临的问题是cv :: gpu :: convolve函数的结果与cv :: filter2D的结果不同。造成这种差异的原因是什么?我们如何获得与CPU过滤响应相同的GPU过滤响应?

cv :: gpu :: filter2D案例的一些示例结果(无差异):

原始图像(640x480) original

CPU(13x13内核) using CPU filter2D

GPU(13x13内核) using GPU filter2D

对于cv :: gpu :: convolve案例:

CPU(25x25内核) using CPU filter2D

GPU(25x25内核) using GPU filter2D

0 个答案:

没有答案