MATLAB中conv2的詳細用法 (以及【matlab知識補充】conv2、filter2、imfilter函數原理)


轉載:

1.https://blog.csdn.net/jinv5/article/details/52874880

2.https://blog.csdn.net/majinlei121/article/details/50256049

3.https://blog.csdn.net/zb1165048017/article/details/51783879

 

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、首先是按照上面的步驟進行補零,如下圖外圈紅色的為補出的零

 


 

  b、將卷積核旋轉180度

 


 

 

 

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


 

matlab中conv2 函數在計算二維卷積應用實例如下:

格式:C=conv2(A,B)
      C=conv2(Hcol,Hrow,A)
      C=conv2(...,'shape')
說明:對於 C=conv2(A,B),conv2 計算矩陣A和B的卷積,若[Ma,Na]=size(A),[Mb,Nb]=size(B),

則 size(C)=[Ma+Mb-1,Na+Nb-1];

      對於C=conv2(Hcol,Hrow,A),矩陣A分別與Hcol向量在列方向和Hrow向量在行方向上進行卷積;

      對於C=conv2(...,'shape') 用來指定 conv2返回二維卷積結果部分,參數shape可取值如下:

        1、full 為缺省值,返回二維卷積的全部結果;
        2、same 返回二維卷積結果中與 A 大小相同的中間部分;
        3、valid 返回在卷積過程中,未使用邊緣補0部分進行計算的卷積結果部分,當 size(A)>size(B) 時,    size(C)=[Ma-Mb+1,Na-Nb+1]

對於C=conv2(...,'shape')可以用下面的圖表示:


  •            

 

-------------------------------------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=[  3   1   2;0   1   1   3;5   2   0   0],卷積核B=[   2    3;  -1   2;1    1   0]

 

         

 

-------------------------------------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,輸出只與輸入同類型,有靈活的邊界補充選項

 


免責聲明!

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



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