【问题标题】:Convolution in frequency domain matlab频域中的卷积matlab
【发布时间】:2013-09-18 14:10:25
【问题描述】:

我只是偶然发现了这个问题,并试图通过实际测试来了解它的影响。

考虑一个 (nxn) 高斯核。选择合适的方差 相同。在频率上进行线性和循环卷积 在图像上具有此内核的域。你能说点关于 结果?

我尝试在 Matlab 中实现上述内容,代码如下。

     clc;
     close all;
     clear all;

     I = imread('my_face.jpg');
     Irez = imresize(I,[512 512]); %resize image
     figure(1);
     imshow(Irez);
     Irez = rgb2gray(Irez);

     M = 2*size(I,1)+1;
     N = 2*size(I,2)+1;

     Ifreq = fft2(I,M,N);
     gaus = fspecial('gaussian',5,0.7);

     Igaus = conv2(gaus,abs(Ifreq));
     Iface = real(ifft2(Igaus));
     Iout = Iface(1:size(I,1),1:size(I,2));
     figure(2)
     imshow(Iout);

我的问题是:

  1. 我在正确的轨道上吗?我在做问题所期望的事情吗?或者我应该采用或考虑高斯内核的 fft 还是在频域中有类似的高斯内核?请告诉我你们是否找到了实现这一目标的正确方法。

  2. 线性卷积的等价物是乘法。循环卷积相当于什么?

此外,上面的代码给了我以下错误:

类型输入参数的未定义函数或方法“conv2” 'double' 和属性'full 3d real'

很明显,对于conv2的输入,两者都必须是双倍的。你能帮我实际解决这个问题吗?

【问题讨论】:

  • 你弄糊涂了。看来您正在对图像进行 DFT,在“频域”中对其应用卷积,然后进行逆 DFT。问题的重点是表明“空间域”中的卷积可以在“频域”中进行,但操作不同。要在“频域”中进行循环卷积,您需要对图像和内核进行 DFT,将它们的傅立叶系数逐元素相乘,然后对结果进行逆 DFT。这是一种(有时)更快的过滤方式。
  • 至少这是我对这个问题的解释......但它似乎有点不清楚......
  • @jucestain 你是对的。我必须考虑高斯和图像的 dft 并尝试频域中的卷积。你能详细告诉我我该怎么做吗?真的很抱歉再次询问。

标签: matlab gaussian convolution


【解决方案1】:

我似乎在 fspecial 函数中提供了正确的参数。您必须在此函数中指定列数和行数。我从 matlab 帮助中复制了以下几行:

h = fspecial('average', hsize) 返回大小为 hsize 的平均滤波器 h。参数 hsize 可以是指定 h 中的行数和列数的向量,也可以是标量,在这种情况下 h 是方阵。 hsize 的默认值为 [3 3]。

gaus = fspecial('gaussian', [M N],5,0.7);

您可以在这里找到更多信息:http://www.mathworks.se/help/images/ref/fspecial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2016-10-13
    • 2015-01-27
    • 2017-02-21
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多