基於this question和this 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');
基於this question和this 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');
如果您使用imfilter(I,fil,'same','conv')
那麼它們是相同的。
不同之處在於imfilter默認使用相關性過濾圖像,它有一些小的差異 - 基本上,卷積從圖像的一側開始,而相關從另一側開始,因此在過濾器中存在一些細微差異輸出。如果首先翻轉圖像,則會得到相同的輸出:
out4=fliplr(flipud(imfilter(fliplr(flipud(I)),fil,'same')));
這完全等於out2。
你的答案在於對imfilter的第四個輸入參數的解釋。
'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
。
Thanks @Hugh Nolan。我認爲你應該用'相同'替換'保存'。有一個問題出現了。你在[這個問題]中看到(http://stackoverflow.com/questions/10672184/implementing-imfilter-in-matlab)[petrichor](http://stackoverflow.com/users/198428/petrichor)尚未使用'conv',但他的回答已被提問者接受了! – sepideh
如果你對圖像處理很熟悉,事實上你會知道空間線性濾波器是卷積蒙版。但是matlab對應用線性空間濾波器的函數的默認值是相關性。我現在在文檔中研究它!!!!!!!!!!!!! – sepideh
謝謝,修正了錯字。在您發佈的鏈接中,所使用的過濾器是對稱的,因此輸出將是相同的。您也可以翻轉過濾器而不是圖像,如答案中所述。 –