Я пытаюсь использовать модуль OpenCV GPU для фильтрации изображения с ядрами Габора. Чтобы проверить, все ли правильно, я сравниваю результат ускоренной фильтрации CUDA с обычной фильтрацией ЦП. Код, который я использую, доступен здесь: https://github.com/juancamilog/gpu_convolve_test.git
Поскольку funtcion cv :: gpu :: filter2D ограничен ядрами размером менее 16×16, я использую cv :: gpu :: convolve для больших ядер. В этом случае я использую cv :: gpu :: copyMakeBorder для получения ответа фильтра, который имеет тот же размер, что и исходное изображение. gpu :: convolve использует cuFFT для вычисления свертки.
Проблема, с которой я сталкиваюсь, заключается в том, что результат функции cv :: gpu :: convolve отличается от результата cv :: filter2D. В чем причина этой разницы? Как получить ответ на фильтрацию с помощью графического процессора, который совпадает с ответом на фильтрацию процессора?
Некоторые примеры результатов для случая cv :: gpu :: filter2D (без разницы):
Исходное изображение (640х480)
CPU (ядро 13×13)
GPU (ядро 13×13)
И для случая cv :: gpu :: convolve:
CPU (ядро 25×25)
GPU (ядро 25×25)
Задача ещё не решена.