我想拍摄两张图像并在 Matlab 中使用 2D FFT 将它们卷积在一起而不求助于该conv2
函数。但是,我不确定应该如何正确填充矩阵并为卷积做准备。
数学运算如下:
A * B = C
在上面,* 是卷积算子(维基百科链接)。
下面的 Matlab 程序显示了填充和不填充矩阵之间的区别。我怀疑不填充矩阵会导致循环卷积,但我想执行没有混叠的线性卷积。
如果我确实填充了这两个矩阵,那么如何截断卷积的输出以使C与A和B的大小相同?
A = rgb2gray(im2double(imread('1.png'))); % input A
B = rgb2gray(im2double(imread('2.png'))); % kernel B
figure;
imagesc(A); colormap gray;
title ('A')
figure;
imagesc(B); colormap gray;
title ('B')
[m,n] = size(A);
mm = 2*m - 1;
nn = 2*n - 1;
C = (ifft2(fft2(A,mm,nn).* fft2(B,mm,nn)));
figure;
imagesc(C); colormap gray;
title ('C with padding')
C0 = (ifft2(fft2(A).* fft2(B)));
figure;
imagesc(C0); colormap gray;
title ('C without padding')
这是程序的输出: