opencv 2.4.9, как мы можем получить одинаковые результаты с gpu :: convolve и cv :: filter2D?

Я пытаюсь использовать модуль 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)
используя CPU filter2D

GPU (ядро 13×13)
с использованием GPU filter2D

И для случая cv :: gpu :: convolve:

CPU (ядро 25×25)
используя CPU filter2D

GPU (ядро 25×25)
с использованием GPU filter2D

1

Решение

Задача ещё не решена.

Другие решения