2

私はちょうどこの質問に出くわし、実際にテストしてその効果を知ろうとしています.

(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. 線形畳み込みに相当するのは乗算です。循環畳み込みに相当するものは何ですか?

さらに、上記のコードは私に次のエラーを与えています:

タイプ 'double' および属性 'full 3d real' の入力引数の未定義の関数またはメソッド 'conv2'

conv2 の入力では、両方が double でなければならないことは明らかです。問題を実際に実装するのを手伝ってもらえますか?

4

1 に答える 1

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を参照してください。

于 2013-09-18T15:02:57.280 に答える