频域matlab中的卷积

时间:2013-09-18 14:10:25

标签: matlab gaussian convolution

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

  

考虑一个(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. 线性卷积的等价物是乘法。循环卷积的等价物是什么?

  3. 此外,上面的代码给出了以下错误:

      

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

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

1 个答案:

答案 0 :(得分:2)

我似乎在 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