我正在尝试使用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)
CPU(13x13内核)
GPU(13x13内核)
对于cv :: gpu :: convolve案例:
CPU(25x25内核)
GPU(25x25内核)