概述
我們知道,圖像在Matlab 中是用矩陣表示的,雖然RGB等彩色圖像和灰度圖像的矩陣表示方式不同,終歸也是矩陣。
而在Matlab中所涉及的線性空間濾波,從本質(zhì)上來說是兩個(gè)矩陣的卷積或者相關(guān)運(yùn)算:通過相應(yīng)濾波器(或者稱之為掩膜,實(shí)際也為一個(gè)二維矩陣)與圖像矩陣進(jìn)行卷積或者相關(guān)運(yùn)算實(shí)現(xiàn)。卷積運(yùn)算和相關(guān)運(yùn)算的區(qū)別在于:濾波矩陣(掩膜)經(jīng)過了翻轉(zhuǎn),后文中將對此進(jìn)行介紹。
(線性空間濾波,是規(guī)定了掩膜大小,對鄰域像素進(jìn)行的線性運(yùn)算,輸出的響應(yīng)為掩膜內(nèi)的像素進(jìn)行線性運(yùn)算后的得數(shù)值。與以后要介紹的的非線性空間濾波的區(qū)別之處在于對于鄰域像素的處理的方式。)
矩陣卷積
寫在前面:(按照信號卷積的理論,N維向量與M維向量卷積后,所得向量的長度為:N+M。與我們后面要討論情形的有所不同,請注意區(qū)分。)
一維:
為了便于理解,我們先引入一維函數(shù)濾波的概念,再引入二維圖像的濾波。
基本原理:濾波器w與函數(shù)f起始位置對齊后,逐位移動,并且每次移動都進(jìn)行按位相乘結(jié)果累加得到某位的結(jié)輸出。
設(shè),一維函數(shù) f 為: 0 0 0 0 1 0 0 0 0 ; 濾波器 w:1 2 3 4 5
相關(guān)運(yùn)算的過程:
1、對齊:將 w 的開始位置 5 與 f 的開始位置 0對齊。對齊位置作為運(yùn)算起點(diǎn)。
2、填充:為了使得 w 每一次運(yùn)算中各位都有值相乘,對 f 起始位置和結(jié)尾無對應(yīng)位的位置進(jìn)行“0填充”。
(注意下填充的概念,在圖像濾波中,填充的值對圖像濾波的影響比較大。)。
3、 計(jì)算:將上下對應(yīng)的位相乘后全部相加得到結(jié)果的第一位,輸出位置總是在。
向右移動濾波器w “N”位,并進(jìn)行相同的運(yùn)算得到相應(yīng)第N位的計(jì)算結(jié)果。
4、 輸出大?。?Matlab中我們使用imfilter函數(shù)來進(jìn)行卷積或者相關(guān)運(yùn)算;(后文中,將具體介紹imfilter函數(shù)。)
得到的結(jié)果的大小分為“full”和“same”兩類,full包含填充項(xiàng),same為原f大小。
卷積運(yùn)算與相關(guān)運(yùn)算類似,只是將濾波器矩陣旋轉(zhuǎn)了180°后進(jìn)行與之一樣的運(yùn)算。
二維:
一維和二維的情況很相像,需要注意填充擴(kuò)展對圖像的影響,我們將在后面的實(shí)驗(yàn)中討論。
總的來說:從開始位置平移掩膜到第一行運(yùn)行結(jié)束位置,在每個(gè)位置上執(zhí)行掩膜覆蓋的亮度值與對應(yīng)的掩膜系數(shù)相乘結(jié)果累加得到對應(yīng)點(diǎn)的像素值。
然后跳到第二行的起始位置繼續(xù)平移和運(yùn)算,如此反復(fù)直到掩膜移動到 整個(gè)運(yùn)算的結(jié)束位置。
(不過根據(jù)設(shè)定輸出圖像大小為same還是full,掩膜移動的范圍有所不同。后文將講具體描述。)
關(guān)于掩膜的大?。和ǔJ褂闷鏀?shù)維的方陣作為掩膜/濾波器,因?yàn)槠鏀?shù)維的方正有唯一的一個(gè)中心點(diǎn),比較直觀。
相關(guān)運(yùn)算:
1、對齊:得到same大小的輸出結(jié)果,只需要保證掩膜中心能夠覆蓋全圖每個(gè)像素點(diǎn)即可。
此時(shí)只需將掩膜中心與圖像矩陣第一行第一個(gè)元素對齊即可。
full 的情況如下圖,得到的有值的區(qū)域可能會有所拓寬,不過不影響原圖大小尺寸的濾波結(jié)果的得出。
2、填充:同一維中的理由,在二維中我們需要對圖像進(jìn)行填充。
Matlab中的填充方式有4種:
a/ 通過值P來進(jìn)行擴(kuò)展。(P為常量值,如本例中使用的為“0”)
b/ 過復(fù)制圖像邊界進(jìn)行擴(kuò)展填充。
c/ 過鏡像反射圖像邊界來擴(kuò)展填充。
d/ 圖像看成二維周期函數(shù)來擴(kuò)展。
在函數(shù)imfilter中會有具體的參數(shù)來設(shè)置這幾種方式。后面函數(shù)介紹部分會具體描述。
3、運(yùn)算:將掩膜覆蓋的亮度值與對應(yīng)的掩膜系數(shù)相乘后結(jié)果累加得到對應(yīng)點(diǎn)的輸出像素值。然后進(jìn)行平移繼續(xù)運(yùn)算,如此反復(fù),直到平移結(jié)束位置。
4、輸出大小:分為full 類型和same類型。其意義與一維中一致。
卷積運(yùn)算的情況與相關(guān)類似,不過對掩膜進(jìn)行了180°的旋轉(zhuǎn)。
imfilter函數(shù)介紹
函數(shù)描述:
B = imfilter(A, H)
使用多維矩陣H來對矩陣向量A進(jìn)行濾波。矩陣A可以是任意種類和維度的邏輯或者非稀疏數(shù)值矩陣。結(jié)果B與A擁有相同的大小和類型。
輸出B中的每一個(gè)元素都使用雙精度浮點(diǎn)型來進(jìn)行計(jì)算。如果A為整型或者邏輯矩陣,那么超出整型范圍的元素將會被截短,而小數(shù)值則進(jìn)行取整。
B = imfilter(A, H, option1, option2,...)
根據(jù)特定的選項(xiàng)進(jìn)行多維濾波。選項(xiàng)可以有如下值:
|