天天看點

conv2、filter2、imfilter的差別

今天見到了壇主math以及論壇其他牛人的真容,聽完報告感慨良多,一句話加油吧。

-------------------------------------conv2函數----------------------------------------

1、用法

  1. C=conv2(A,B,shape);        %卷積濾波

複制代碼

A:輸入圖像,B:卷積核

       假設輸入圖像A大小為ma x na,卷積核B大小為mb x nb,則

       當shape=full時,傳回全部二維卷積結果,即傳回C的大小為(ma+mb-1)x(na+nb-1)

      shape=same時,傳回與A同樣大小的卷積中心部分

       shape=valid時,不考慮邊界補零,即隻要有邊界補出的零參與運算的都舍去,傳回C的大小為(ma-mb+1)x(na-nb+1)

2、實作步驟

    假設輸入圖像A大小為ma x na,卷積核大小為mb x nb,則MATLAB的conv2函數實作流程如下:

        a、對輸入圖像補零,第一行之前和最後一行之後都補mb-1行,第一列之前和最後一列之後都補nb-1列(注意conv2不支援其他的邊界補充選項,函數内部對輸入總是補零)。

        b、關于卷積核的中心,旋轉卷積核180度。

        c、滑動卷積核,将卷積核的中心位于圖像矩陣的每一個元素。

        d、将旋轉後的卷積核乘以對應的矩陣元素再求和。

3、實作過程展示

     假設有圖像A=[4 3 1 2;0 1 1 3;5 2 0 0],卷積核B=[1 2 3;0 -1 2;1 1 0]

         a、首先是按照上面的步驟進行補零,如下圖外圈紅色的為補出的零

         <ignore_js_op>

conv2、filter2、imfilter的差別

         b、将卷積核旋轉180度

                      <ignore_js_op>

conv2、filter2、imfilter的差別

         c、将旋轉後的核在A上進行滑動,然後對應位置相乘,最後相加,下面分别是shape=full,same,valid時取輸出圖像大小的情況,位置1表示輸出圖像的值從目前核的計算值開始(對應輸出圖像左上角),位置2表示到該位置結束(對應輸出圖像右下) 

<ignore_js_op>

conv2、filter2、imfilter的差別

           <ignore_js_op>

conv2、filter2、imfilter的差別

                <ignore_js_op>

conv2、filter2、imfilter的差別

-------------------------------------filter2函數----------------------------------------

1、用法

  1. B = filter2(h,A,shape) ;        %相關(correlation)濾波

複制代碼

A:輸入圖像,h:相關核

       假設輸入圖像A大小為ma x na,相關核h大小為mb x nb,則

       當shape=full時,傳回全部二維卷積結果,即傳回B的大小為(ma+mb-1)x(na+nb-1)

      shape=same時,傳回與A同樣大小的卷積中心部分

       shape=valid時,不考慮邊界補零,即隻要有邊界補出的零參與運算的都舍去,傳回B的大小為(ma-mb+1)x(na-nb+1)

2、實作步驟

        假設輸入圖像A大小為ma x na,相關核h大小為mb x nb,MATLAB的filter2的實作流程如下:

           a、對輸入圖像補零,第一行之前和最後一行之後都補mb-1行,第一列之前和最後一列之後都補nb-1列(注意filter2不支援其他的邊界補充選項,函數内部對輸入總是補零)。

           b、滑動相關核,将相關核的中心位于圖像矩陣的每一個元素。

           c、将相關核乘以對應的矩陣元素再求和

                   注意filter2不對核進行180°旋轉,直接對應相乘再相加,這一點與filter2不同,下面有兩者計算結果對比可看出這一點。

3、conv2(卷積濾波)和filter2(相關濾波)的結果比較

        A=[4   3   1   2;0   1   1   3;5   2   0   0],卷積核B=[1    2    3;0   -1   2;1    1   0]

                   <ignore_js_op>

conv2、filter2、imfilter的差別

                             <ignore_js_op>

conv2、filter2、imfilter的差別

                                conv2,shape=full                                                                filter2,shape=full

-------------------------------------imfilter----------------------------------------

1、用法

  1. B=imfilter(A,H,option1,option2,option3);

複制代碼

A:輸入圖像,H:濾波核

       option1:邊界選項,可選的有:補充固定的值X(預設都補零),symmetric,replicate,circular

       option2:輸出圖像大小選項,可選的有same(預設),full

       option3:決定采用與filter2相同的相關濾波還是與conv2相同的卷積濾波

-------------------------------------最後總結----------------------------------------

1、  filter2、conv2将輸入轉換為double類型,輸出也是double的,輸入總是補零(zero padded), 不支援其他的邊界補充選項。

2、  imfilter:不将輸入轉換為double,輸出隻與輸入同類型,有靈活的邊界補充選項