1. 程式人生 > >conv2函式、imfilter與filter2三者的區別

conv2函式、imfilter與filter2三者的區別

conv2函式

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、將旋轉後的卷積核乘以對應的矩陣元素再求和。

filter2函式

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°旋轉**,直接對應相乘再相加,這一點與conv2不同。

imfilter

1、用法 B=imfilter(A,H,option1,option2,option3);

A:輸入影象,H:濾波核  * option1:邊界選項,可選的有:補充固定的值X(預設都補零),symmetric,replicate,circular  * option2:輸出影象大小選項,可選的有same(預設),full  * option3:決定採用與filter2相同的相關濾波還是與conv2相同的卷積濾波

預設使用下相關corr,也可以選擇conv引數進行卷積完成。

最後總結

  1. filter2、conv2將輸入轉換為double型別,輸出也是double的,輸入總是補零(zero padded), 不支援其他的邊界補充選項。
  2. imfilter:不將輸入轉換為double,輸出只與輸入同類型,有靈活的邊界補充選項