我想在freqency域中执行openCV的filter2d()
。
我已经阅读了几篇帖子但是我还没有弄清楚,我怎样才能在频域中获得过滤效果。我发现很少有帖子告诉将图像转换为频域(我的意思是计算它的DFT)。
我认为我需要执行以下步骤:
制作过滤内核
Mat kernel = (Mat_<double>(3,3) << 1.36, 0.062, -0.921,
-0.644198, 1.10, -0.17,
-0.072951, -1.81485, 2.806);
我找到了posts,它讲述了计算灰度图像的DFT。
问题:我不知道如何在GPU上执行步骤3和步骤4的乘法,因为文档说明两个矩阵的大小应该相同。
答案 0 :(得分:2)
您对滤镜和图像的DFT响应进行逐元素乘法。在计算FFT之前,必须用零填充内核,使其与图像的尺寸相同。这就是为什么如果滤波器的尺寸太大或者至少与图像的尺寸相当,则FFT选项仅在计算上有效。
要沿最终矩阵的边界进行合理估计,您可能还必须将图像填充滤波器的一半尺寸。