2011-10-26 43 views
4

私はこの両方の関数を使ってスケール上のエッジを見つけます。あなたは入力画像を持っており、入力画像にマスク(例えばprewitt)を適用し、その結果の画像を取得します。'imfilter'と 'conv2'の違い[MATLAB]

mypic = imread('examplepic.jpg') 
hy = fspecial('prewitt') 
yimfilter = imfilter(mypic,hy) % Using imfilter 
yconv2 = conv2(mypic,hy) % Using conv2 

これらの2つの理論的な違いはどちらですか?私は異なる出力を持っていることを知っていますが、違いは何ですか?

おかげ

答えて

9

CONV2はyconv2がmypicより大きくなることを意味し、全体の2次元コンボリューションを出力します。一方、imfilterは、デフォルトでは、yimfilterがmypicと同じサイズになるように、コンボリューションのエッジをトリミングします。 conv2のように、imfilterに畳み込み全体を残すことができますが、これはデフォルトの動作ではありません。

imfilterの "複製"オプション、imfilterは任意の数の次元(2だけではない)で畳み込みを行うことができますが、それについて尋ねていないと思います。

0

まあ、imfilterはデフォルトで相関を使用しており、畳み込みは使用しません。あなたは

yimfilter = imfilter(mypic,hy,'conv') 

を呼び出した場合、その後yconv2yimfilterは同じになります。相関と畳み込みの違いについては、1D畳み込み/相関マスクを使用するとかなり簡単に見ることができます。出力は同じになります(マスクの方向に応じて)行/列のシフトだけです。ところで

filter2も相関を使用していますので、あなたは、あなたが yimfilteryfilter2が同じであることがわかります

yimfilter = imfilter(mypic,hy) 
yfilter2 = filter2(hy,mypic) 

を呼び出す場合。