私はちょうどこの質問に出くわし、実際にテストしてその効果を知ろうとしています.
(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 を使用または検討するか、周波数領域で同様のガウス カーネルを使用する必要がありますか? 皆さんがこれを達成する正しい方法を見つけたかどうか教えてください。
線形畳み込みに相当するのは乗算です。循環畳み込みに相当するものは何ですか?
さらに、上記のコードは私に次のエラーを与えています:
タイプ 'double' および属性 'full 3d real' の入力引数の未定義の関数またはメソッド 'conv2'
conv2 の入力では、両方が double でなければならないことは明らかです。問題を実際に実装するのを手伝ってもらえますか?