在频域中过滤图像

时间:2015-06-24 13:49:13

标签: c++ opencv computer-vision gpu

我想在freqency域中执行openCV的filter2d()

我已经阅读了几篇帖子但是我还没有弄清楚,我怎样才能在频域中获得过滤效果。我发现很少有帖子告诉将图像转换为频域(我的意思是计算它的DFT)。

我认为我需要执行以下步骤:

  1. 拍摄图片
  2. 制作过滤内核

    Mat kernel = (Mat_<double>(3,3) <<  1.36, 0.062,  -0.921,
                -0.644198,  1.10, -0.17,
                -0.072951, -1.81485,  2.806);
    
  3. 计算给定图像的DFT
  4. 计算滤镜内核的DFT
  5. 用dft(滤镜内核)乘以dft(给定图像)
  6. 计算上述乘法的逆dft。
  7. 我找到了posts,它讲述了计算灰度图像的DFT。

    问题:我不知道如何在GPU上执行步骤3和步骤4的乘法,因为文档说明两个矩阵的大小应该相同。

1 个答案:

答案 0 :(得分:2)

您对滤镜和图像的DFT响应进行逐元素乘法。在计算FFT之前,必须用零填充内核,使其与图像的尺寸相同。这就是为什么如果滤波器的尺寸太大或者至少与图像的尺寸相当,则FFT选项仅在计算上有效。

要沿最终矩阵的边界进行合理估计,您可能还必须将图像填充滤波器的一半尺寸。