CV預備(一): conv2, filter2, imfilter的差異

目錄

  • 前言
  • filter2
  • 實操
  • conv2
  • imfilter
  • 最後

前言

最近開始準備深刻學習一下計算機視覺(CV)方面的內容, 這裏會更新幾期基礎知識, 主要是Matlab和Python方面的. 此次的就是三個Matlab的函數filter2, conv2, imfilter.bash


filter2

filter2相關濾波函數, 假設輸入圖像I大小爲M1 X N1,相關核f大小爲M2 X N2.函數

J = filter2 (f, I, shape)
複製代碼
  • f: 相關核, 即濾波掩模
  • I: 輸入圖像
  • J: 輸出圖像
  • shape: 可選, 其參數以下:
參數 描述
same(默認值) 返回與I一樣尺寸濾波後的圖像, M1 X N1
full 返回所有二維濾波結果, (M1 + M2 - 1) X (N1 + N2 - 1)
valid 不考慮邊界補零, 即只要有邊界補出的零參與運算的都捨去, (M1 - M2 + 1) X (N1 - N2 + 1)

實操

這裏實操一下, 首先是same學習

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 1 1];

J = filter2(f, I, 'same')
複製代碼

輸出是:spa

>> iFilter

J =

    40    60    60    40
    60    90    90    60
    40    60    60    40
複製代碼

對輸入圖像補零, 第一行以前和最後一行以後都補M2 -1行,第一列以前和最後一列以後都補N2 - 1列, (注意filter2和conv2不支持其餘的邊界補充選項, 函數內部對輸入老是補零.3d

也就是補成以下:code

0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 10 10 10 10 0 0
0 0 0  0  0  0  0 0 
0 0 0  0  0  0  0 0 
複製代碼

相關

因此第一個40就是相關核與紅框內部分對應相乘而後結果求和所得, 也就是(0*1 + 0*1 + 0*1 + 0*1 + 10 *1 + 10 *1 + 0*1 + 10 *1 + 10 *1), 以後的就滑動相關核, 將相關核的中心位於圖像矩陣的每個元素.cdn

full的話, 就是將邊緣補全零的計算結果也一併輸出, 因此尺寸是(M1 + M2 - 1) X (N1 + N2 - 1)blog

J =

    10    20    30    30    20    10
    20    40    60    60    40    20
    30    60    90    90    60    30
    20    40    60    60    40    20
    10    20    30    30    20    10
複製代碼

卷積

最後valid, 就是邊界補出的零參與運算的都捨去.ci

J =

    90    90
複製代碼

conv2

和filter2最大的不一樣就是計算以前, 把卷積核旋轉180°. 因此, 若是卷積核旋轉180°和原來同樣, 那麼conv2和filter2的計算結果都是同樣的. 因此我這裏就修改一下算子. 能夠很明顯看到filter2的結果旋轉180°就是conv2的結果.string

I = [10 10 10 10;
     10 10 10 10;
     10 10 10 10];

f = [1 1 1;
     1 1 1;
     1 2 1];

J = filter2(f, I, 'same')
J = conv2(I, f, 'same')
複製代碼
J =

    50    70    70    50
    70   100   100    70
    40    60    60    40


J =

    40    60    60    40
    70   100   100    70
    50    70    70    50
複製代碼

imfilter

J = imfilter(I, f, filtering_mode, boundary_options, size_options)
複製代碼
參數列表 選項 描述
filtering_mode ‘corr’ 相關(默認)
‘conv’ 卷積
boundary_options X 輸入圖像的邊界經過用值X值來填充擴展其默認值爲0
‘replicate’ 複製外邊界值
‘symmetric’ 鏡像反射
‘circular’ 圖像大小經過將圖像當作是一個二維周期函數的一個週期來擴展
size_options ‘full’ 輸出圖像的大小與被擴展圖像的大小相同
‘same’ 輸出圖像的大小與輸入原始輸入圖像同樣(默認)

這樣的話, J = imfilter(I, f, 'corr', 0, 'same')J = filter2(f, I, 'same')是等效的.


最後

喜歡記得點贊或者關注哦, 有意見或者建議評論區見~

相關文章
相關標籤/搜索