2013-06-28 19 views
5

this questionthis oneに基づいて、私は "imfilter"と "conv2"が同じ結果を持つべきだと考えました。しかし、このコードを試してみてください。何が問題ですか?imfilterとconv2を使用して異なる結果

I = imread('tire.tif'); 
fil=[1 2 3;4 5 6;7 8 9]; 
out1=conv2(double(I),fil,'same'); 
out2=uint8(out1); 
out3=imfilter(I,fil,'same'); 

答えて

10

imfilter(I,fil,'same','conv')を使用する場合、それらは同じです。

違いは、imfilterはデフォルトで画像をフィルタリングするために相関を使用していますが、若干の違いがあります。基本的に画像の一方の側から畳み込みが始まり、他方の画像から相関が始まります。出力。最初に画像を反転すると、同じ出力が得られます。

out4=fliplr(flipud(imfilter(fliplr(flipud(I)),fil,'same'))); 

これはout2とまったく同じです。

+0

ありがとう@Hugh Nolan。私はあなたが '保存'を '同じ'に置き換えるべきだと思います。 1つの質問が上がった。あなたは[この質問]で参照してください(http://stackoverflow.com/questions/10672184/implementing-imfilter-in-matlab)[petrichor](http://stackoverflow.com/users/198428/petrichor)使用していない'conv'しかし彼の答えは質問者によって受け入れられました!!! – sepideh

+0

あなたが画像処理に精通しているなら、空間線形フィルタは畳み込みマスクであることが分かります。しかし、線形空間フィルタを適用する関数のmatlabのデフォルトは相関関係です。私は今ドキュメンテーションでそれを学んだ!!!!!!!!!!!!! – sepideh

+1

ありがとう、typoが修正されました。投稿したリンクでは、使用されるフィルタは対称的なので、出力は同じになります。その答えに記載されているように、画像の代わりにフィルタを反転することもできます。 –

3

あなたの答えは、imfilterの4番目の入力引数の説明にあります。

  • 相関と畳み込み
'corr'  imfilter performs multidimensional filtering using 
       correlation, which is the same way that FILTER2 
       performs filtering. When no correlation or 
       convolution option is specified, imfilter uses 
       correlation. 

    'conv'  imfilter performs multidimensional filtering using 
       convolution. 

out3=imfilter(I,fil,'same','conv');を試してみてはconv2と同じ結果が得られます。

関連する問題