2つの画像を撮影し、関数に頼らずに2DFFTを使用してMatlabでそれらを畳み込みたいと思いconv2
ます。ただし、畳み込みのために行列を適切にパディングして準備する方法についてはわかりません。
数学演算は次のとおりです。
A * B = C
上記では、*は畳み込み演算子です(Wikipediaリンク)。
次のMatlabプログラムは、行列をパディングする場合とパディングしない場合の違いを示しています。行列をパディングしないと巡回畳み込みが発生するのではないかと思いますが、エイリアシングなしで線形畳み込みを実行したいと思います。
2つの行列をパディングする場合、 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')
プログラムの出力は次のとおりです。