我只是偶然发现了这个问题,并试图通过实际测试来了解它的影响。
考虑一个 (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);
我的问题是:
我在正确的轨道上吗?我在做问题所期望的事情吗?或者我应该采用或考虑高斯内核的 fft 还是在频域中有类似的高斯内核?请告诉我你们是否找到了实现这一目标的正确方法。
线性卷积的等价物是乘法。循环卷积的等价物是什么?
此外,上面的代码给了我以下错误:
未定义函数或方法“conv2”,用于“double”类型的输入参数和“full 3d real”属性
很明显,对于 conv2 的输入,两者都必须是双倍的。你能帮我实际解决这个问题吗?