來源
:https://blog.csdn.net/u013066730/article/details/56665308(比較詳細)
https://blog.csdn.net/yuanhuiling/article/details/79128116
mfilter實現的是線性空間濾波;
conv2是計算兩個矩陣的二維卷積
1、MATLAB中提供了卷積運算的函數命令conv2,其語法格式為:
C = conv2(A,B)
C = conv2(A,B)返回矩陣A和B的二維卷積C。若A為ma×na的矩陣,B為mb×nb的矩陣,則C的大小為(ma+mb+1)×(na+nb+1)。
2、MATLAB圖像處理工具箱提供了基於卷積的圖象濾波函數filter2,filter2的語法格式為:
Y = filter2(h,X)
其中Y = filter2(h,X)返回圖像X經算子h濾波后的結果,默認返回圖像Y與輸入圖像X大小相同。例如:
其實filter2和conv2是等價的。MATLAB在計算filter2時先將卷積核旋轉180度,再調用conv2函數進行計算。
Fspecial函數用於創建預定義的濾波算子,其語法格式為:
h = fspecial(type)
h = fspecial(type,parameters)
參數type制定算子類型,parameters指定相應的參數,具體格式為:
type='average',為均值濾波,參數為n,代表模版尺寸,用向量表示,默認值為[3,3]。
type= 'gaussian',為高斯低通濾波器,參數有兩個,n表示模版尺寸,默認值為[3,3],sigma表示濾波器的標准差,單位為像素,默認值為0.5
NOTE:
那什么時候用到imfilter和filter2,什么時候用conv2呢?
三個函數實際的用法基本結果是一樣的。 但imfilter可進行多維圖像(RGB等)進行空間濾波,filter2 只能對二維圖像(灰度圖)進行空間濾波,conv2可以對圖像矩陣實現自己想實現的卷積操作,最簡單最常用的是二維。所以conv2和filter2類似,多維圖像(RGB等)要用imfilter
conv2是計算兩個矩陣的二維卷積
1、MATLAB中提供了卷積運算的函數命令conv2,其語法格式為:
C = conv2(A,B)
C = conv2(A,B)返回矩陣A和B的二維卷積C。若A為ma×na的矩陣,B為mb×nb的矩陣,則C的大小為(ma+mb+1)×(na+nb+1)。
2、MATLAB圖像處理工具箱提供了基於卷積的圖象濾波函數filter2,filter2的語法格式為:
Y = filter2(h,X)
其中Y = filter2(h,X)返回圖像X經算子h濾波后的結果,默認返回圖像Y與輸入圖像X大小相同。例如:
其實filter2和conv2是等價的。MATLAB在計算filter2時先將卷積核旋轉180度,再調用conv2函數進行計算。
Fspecial函數用於創建預定義的濾波算子,其語法格式為:
h = fspecial(type)
h = fspecial(type,parameters)
參數type制定算子類型,parameters指定相應的參數,具體格式為:
type='average',為均值濾波,參數為n,代表模版尺寸,用向量表示,默認值為[3,3]。
type= 'gaussian',為高斯低通濾波器,參數有兩個,n表示模版尺寸,默認值為[3,3],sigma表示濾波器的標准差,單位為像素,默認值為0.5
NOTE:
那什么時候用到imfilter和filter2,什么時候用conv2呢?
三個函數實際的用法基本結果是一樣的。 但imfilter可進行多維圖像(RGB等)進行空間濾波,filter2 只能對二維圖像(灰度圖)進行空間濾波,conv2可以對圖像矩陣實現自己想實現的卷積操作,最簡單最常用的是二維。所以conv2和filter2類似,多維圖像(RGB等)要用imfilter
1、用法
- C=conv2(A,B,shape); %卷積濾波
假設輸入圖像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、首先是按照上面的步驟進行補零,如下圖外圈紅色的為補出的零

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



-------------------------------------filter2函數----------------------------------------
1、用法
- B = filter2(h,A,shape) ; %相關(correlation)濾波
假設輸入圖像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]


conv2,shape=full filter2,shape=full
-------------------------------------imfilter----------------------------------------
1、用法
- B=imfilter(A,H,option1,option2,option3);
option1:邊界選項,可選的有:補充固定的值X(默認都補零),symmetric,replicate,circular
option2:輸出圖像大小選項,可選的有same(默認),full
option3:決定采用與filter2相同的相關濾波還是與conv2相同的卷積濾波
-------------------------------------最后總結----------------------------------------
1、 filter2、conv2將輸入轉換為double類型,輸出也是double的,輸入總是補零(zero padded), 不支持其他的邊界補充選項。
2、 imfilter:不將輸入轉換為double,輸出只與輸入同類型,有靈活的邊界補充選項