綜述
對於圖像的處理有兩種思路,一種是對圖像本身的直接處理,即空間域處理;另一種是在頻率域進行處理。關於空域和頻域,可以參考《傅里葉變換——另一種世界觀》。在空間域的處理相對簡單,因此首先介紹的是空域處理法。空域中有兩種重要處理方法:灰度變換(或亮度變換)和空間濾波(或鄰域處理、空間卷積)。
空間域處理:灰度變換和空間濾波
g(x,y)=T[ f(x,y) ]
空域處理的思路可以由上式表達。f 即是原圖,T 是在點(x,y)指定鄰域上的圖像處理算子,g 是輸出圖像。當鄰域為1*1大小時,T 為灰度變換算子;鄰域大於1*1時,T 為空間濾波算子。
灰度變換可以考慮每一個像素的灰度(點處理),也可以考慮整體灰度后再處理一個個像素(直方圖處理)。空間濾波是每次考慮一塊像素,進行卷積操作。
進行灰度變換可以使用MATLAB工具箱函數,也可以自己編寫函數。首先介紹的是直接進行點處理的函數,這些函數來自MATLAB圖像處理工具箱。之后會介紹直方圖處理、空間濾波。
灰度變換函數(來自MATLAB工具箱)
- 灰度映射: g = imadjust( f, [low_in high_in], [low_out high_out], gamma )
- 動態范圍操作:對數變換和對比度拉伸變換。
- 任意灰度的灰度變換:給定灰度變換的列向量,使用interp1查找並替換。
直方圖處理
直方圖反映了圖像像素灰度的分布情況。
- 繪制直方圖:imhist(f, b)(f為圖像,b是灰度刻度), bar, stem, plot。
- 直方圖均衡化:將輸入圖像的灰度級均勻分布於較寬范圍內,采用均衡化,使用histeq(f)函數實現。原理可以參考《直方圖均衡化》。
- 直方圖匹配(規定化):很多時候均衡化並不能實現預期效果,因為均衡化不會對每一個輸入圖像區別對待,只是例行算法,將灰度級均勻分布而已。為了實現預期效果,采用直方圖規定化方法,將灰度級做指定。使用histeq(f, h)實現,h為規定的灰度級比例。
- 對比度受限的自適應直方圖均衡(Contrast-Limited Adaptive Histogram Equalization):通過adapthisteq()函數實現。
空間濾波
空間濾波是在空域進行的濾波操作,有線性空間濾波和非線性空間濾波。線性空間濾波是對目標像素點的領域進行整體考慮,對窗口內的每一個元素乘以系數后求和,並作為目標像素點的響應。非線性空間濾波的思路與線性不同,其操作是非線性的,比如中值濾波、排序濾波等。
線性空間濾波常用imfilter和fspecial函數實現,非線性空間濾波常用nlfilter和colfilt函數實現。
平滑與銳化
空間濾波有很多應用場景,平滑和銳化是兩個典型的應用場景。平滑可以使用平滑模板對圖像進行線性空間濾波,也可以使用中值濾波對圖像進行非線性空間濾波。銳化可以使用銳化模板對圖像進行線性空間濾波。
平滑模板示例:
[ 0.1 0.1 0.1
0.1 0.2 0.1
0.1 0.1 0.1 ]
銳化模板示例:
[ 0 1 0
1 -4 1
0 1 0 ]