Matlab 圖像處理中卷積的幾種實現


代碼

clear;close all;clc

img1 = rand(5,5); % 輸入圖像
img2 = rand(5,5); % 核

% 卷積的幾種實現方式
a = conv2(img1,img2,'same');
b = imfilter(img1,rot90(img2,2));
c = imfilter(img1,img2,'conv');
d = filter2(rot90(img2,2),img1);

% 對比
cmp = [a(:),b(:),c(:),d(:)];

總結

觀察 cmp 矩陣后發現三者數值一樣,但通過計算誤差發現,仍然存在極小的誤差,這與函數的實現原理有關,因此可以近似地認為以上三種方法能夠獲得一樣的卷積效果。

  • 使用 conv2(A,B) 實現卷積,A 為圖像,B 為核。
  • 使用 imfilter(A,rot90(B)) 實現卷積,A 為圖像,B 為核。因為該函數主要功能是實現濾波的,即直接對應位置元素加權求和,但卷積需要翻轉 180 度,故使用 rot90(),逆時針翻轉 2 個 90 度,再濾波即為卷積。或者直接指定其濾波類型為卷積,即 imfilter(A,B,'conv'), A 為圖像,B 為核。
  • 使用 filter2(rot90(B),A) 實現卷積,A 為圖像,B 為核。filter2 是 imfilter2 的單通道形式,即只能處理單通道濾波,故同樣先翻轉 180 度再做濾波,這里核的位置在前面,需要尤其注意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM