中值滤波与图像锐化
本文主要包括以下內容
- 中值濾波及其改進算法
- 圖像銳化, 包括梯度算子、拉普拉斯算子、高提升濾波和高斯-拉普拉斯變換
- 本章的典型囊例分析
- 對椒鹽噪聲的平滑效果比較
- Laplacian與LoG算子的銳化效果比較
中值濾波
中值濾波本質上是一種統計排序濾波器. 對于原圖像中某點(i,j), 中值濾波以該點為中
心的鄰域內的所有像素的統計排序中值作為(i, j) 點的響應.
中值不同于均值, 是指排序隊列中位于中間位置的元素的值,例如=采用3x3 中值濾披
器, 某點。(i,j) 的8 個鄰域的一系列像素值為: 12, 18, 18, 11, 23, 22, 13, 25, 118,
統計排序結果為: 1l, 12, 13, 18, 18, 22, 23, 25, 118. 排在中間位置〈第5 位〉的18
即作為(i, j)點中值濾波的響應g(i, j). 顯然, 中值濾波并非線性濾披器.
中值濾波對于某些類型的隨機噪聲具有非常理想的降噪能力, 對于線性平滑濾波而言,
在處理像縈鄰壤之內的噪聲點時, 噪聲的存在總會或多或少影響該點的像素值的計算(高斯
平滑影響的程度與噪聲點到中心點的距離成正比〉,但在中值濾被中噪聲點則常常直接忽略掉的:而且與線性平滑濾波器相比, 中值濾波在降噪同時引起的模糊效應較低。中值濾波的一種典型應用是清除椒鹽噪聲.
下面首先簡單介紹一下常見的噪聲模型,接著給出中值濾波的Matlab實現:
Matlab提供了medfilt2函數實現中值濾波, 原型為:
I2 = medfilt2(I1,[m,n])
參數說明
? I1是原因矩陣.
? m和n是中值濾波處理的模板大小,默認3x3.
輸出結果
輸出I2是中值濾波后的圖像矩陣.
下面的程序分別給出了一幅受椒鹽噪聲污染的圖像經過平均平滑、高斯平滑和中值撼潑
的處理效果.
如圖從中可見線性平滑濾波在降噪的同時不可避免地造成了模糊,而中值濾波在有效抑制椒鹽噪聲的同時模糊效應明顯低得多,因而對于椒鹽噪聲污染的圖像,中值濾波要遠遠優于線性平滑濾波.
一種改進的中值濾波策略
中值濾波效果依賴于濾波窗口的大小, 太大會使邊緣模糊, 太小了則去噪效果不佳。 因為噪聲點和邊緣點同樣是灰度變化較為劇烈的像素, 普通中值濾波在改變噪聲點灰度值時,會一定程度地改變邊緣像素灰度值。但是噪聲點幾乎都是鄰域像素的極值,而邊緣往往不是,因此可以利用這個特性來限制中值濾波。
具體的改進方法如下: 逐行掃描圖像, 當處理每一個像素時, 判斷該像素是否是濾披窗口覆蓋下鄰域像素的極大或者極小值。 如果是, 則采用正常的中值濾波處理該像素:如果不是, 則不予處理。 在實踐中這種方法能夠非常有效地去除突發噪聲點, 尤其是椒鹽噪聲, 且幾乎不影響邊緣。
由于算法可以根據局部鄰域的具體情況而自行選擇執行不同的操作, 因此改進的中值濾波也稱為自適應中值濾波.
自適應中值濾波對邊緣進行了更好的保留。
中值濾波的工作原理
與線性平滑濾波考慮鄰域中每個像素的作用不同,中值濾波在每個n×n鄰域內都會忽略那些相對于鄰域內大部分像素更亮或更睛,并且所占區域小于像素總數一半(n2/2)的那些像素的影響,而實際上滿足這樣條件被忽略掉的像素往往就是噪聲。
注意:作為一種非線性濾波,中值濾波有可能會改變圖像的性質,因而一般不適用于像軍事圖像處理、醫學圖像處理等領域.
圖像銳化
圖像銳化的目的是使模糊的圖像變得更加清晰. 其應用廣泛, 包括從醫學成像到工業檢
測和軍事系統的制導等。
圖像銳化主要用于增強圖像的灰度跳變部分,這一點與圖像平滑對灰度跳變的抑制正好 相反,事實上從平滑與銳化的兩種運算算子上也能說明這一點,線性平滑都是基于對圖像鄰域的加權求和或積分運算,而銳化則通過其逆運算導數(梯度〉或有限差分來實現。
在討論平滑的時候曾提到噪聲和邊緣都會使圖像產生灰度跳變,為了在平滑時能夠將噪聲和邊緣區別對待,5.3.5節中給出了一種自適應濾波的解決方案。同樣,在銳化處理中如何區分噪聲和邊緣仍然是我們面臨的一個課題,即在平滑處理中平滑的對象是噪聲而不涉及邊緣,在銳化中銳化的對象是邊緣而不涉及噪聲。
基于一階導數的圖像增強一一梯度算子
回憶一下高等數學中梯度的定義,對于連續2 維函數.f(x, y),其在點(x,y)處的梯度
是下面的二維列向量:
其中,w1對接近正45 度邊緣有較強響應: w2 對接近負45 度邊緣有較強響應.
基于Robert交叉梯度的圖像銳化
通過前面學習的濾波知識可知,只要分別以w1和w2為模板,對原圖像進行濾波就可得到GI和G2.而根據公式5-9,最終的Robert交叉梯度圖像(b)為:G = |G1| + |G2|.
在進行銳化濾波之前,我們要將圖像類型從uint8轉換為double.因為銳化模板計算時常常使輸出產生負值, 如果采用無符號的 uint8 型, 則負位會被截斷.
在調用函數 imfilter 時,還要注意不要使用默認的填充方式. 因為 Matlab 默認會在濾波時進行 “0” 填充,這會導致圖像在邊界處產生一個人為的灰度跳變,從而在梯度圖像中產生高響應, 而這些人為高響應值的存在將導致圖像中真正的邊緣和其他我們關心的細節的響應在輸出梯度圖像中被壓縮在一個很窄的灰度范圍, 同時也影響顯示的效果. 我們這里采用了 ’replicate’的重復填充方式, 也可采用’symmetric’的對稱填充方式.
程序實現如下:
I = imread('bacteria.BMP'); temp = I; I = double(I); w1 = [-1 0; 0 1]; w2 = [0 -1;1 0];G1 = imfilter(I,w1,'corr','replicate'); G2 = imfilter(I,w2,'corr','replicate'); G = abs(G1)+abs(G2); figure; subplot(2,2,1); imshow(temp),title('原圖像'); subplot(2,2,2); imshow(abs(G1),[]),title('w1濾波'); subplot(2,2,3); imshow(abs(G2),[]),title('w2濾波'); subplot(2,2,4); imshow(G,[]),title('Robert梯度');如圖可知,w1模板對正45度左右顯示較好,w2模板對-45度左右顯示較好。
注意,為便于觀察效果,做了顯示時的重新標定, 即將圖像的灰度范圍線性變換到 0-255 之內, 并使圖像的最小灰度值為 0,最大灰度值為255.
imshow(K,[])顯示K,并將K的最大值和最小值分別作為純白(255)和純黑(0),中間的K值映射為0到255之間的標準灰度值。
Sobel梯度
由于濾波時我們總是喜歡奇數尺寸的模板, 因而一種計算Sobel 梯度的Sobel 模板更加常用:
下面的Matlab 程序計算了一幅圖像的豎直和水平梯度, 它們的和可以作為完整的Sobel梯度。
基于二階微分的圖像增強拉普拉斯算子
下面介紹一種對于圖像銳化而言應用更為廣泛的基于二階微分的拉普拉斯(Laplacian)算子.
分析拉普拉斯模板的結構,可知這種模板對于90度的旋轉是各向同性的。所謂對于某角
度各向同性是指把原圖像旋轉該角度后再進行濾波與先對原圖像濾波再旋轉該角度的結果相
同。這說明拉普拉斯算子對于接近水平和接近堅直方向的邊緣都有很好的增強,從而也就避
免我們在使用梯度算子時要進行兩次濾波的麻煩。更進一步,我們還可以得到如下對于45°
旋轉各向同性的濾波器:
分別使用上述3種拉普拉斯濾波的Matlab濾波程序如下
I = imread('bacteria.BMP'); temp = I; I = double(I); w1 = [0 -1 0;-1 4 -1;0 -1 0]; L1 = imfilter(I,w1,'corr','replicate'); w2 = [-1 -1 -1;-1 8 -1 ;-1 -1 -1]; L2 = imfilter(I,w2,'corr','replicate'); w3 = [1 4 1;4 -20 4;1 4 1]; L3 = imfilter(I,w3,'corr','replicate'); figure; subplot(2,2,1); imshow(temp),title('原圖像'); subplot(2,2,2); imshow(abs(L1),[]); subplot(2,2,3); imshow(abs(L2),[]); subplot(2,2,4); imshow(abs(L3),[]);上述程序運行結果如圖5.9 所示.對于細菌圖像,拉普拉斯銳化效果與之前Robert 與
Sobel梯度銳化明顯不同的一點是輸出圖像中的雙邊緣。此外,我們還注意到拉普拉斯銳化似乎
對一些離散點有較強的響應,當然由于噪聲也是離散點,因此這個性質有時是我們所不希望的.
基于一階與二階導數的銳化算子的比較
設圖5.10最上面部分的灰度剖面圖對應于圖像中的一條具有代表性的水平像素線,其中
包括了灰度較緩變化的斜坡〈軟邊緣〉、孤立點〈很可能為噪聲〉、細線〈細節〉, 以及灰度跳
變的階梯(硬邊緣〉。簡單起見, 只考慮圖像中8個灰度級的情況. 圖5.10 中給出了這條像
素線中各個像素的灰度值, 由此計算出的一階微分和二階微分在圖中的第三行和第四行中給
出. 由于這里的像素線在圖像中是水平分布的, 因此式5-9和式5-10可簡化為一維的形式,
即一維情況下的一階微分:
通過分析這個典型的灰度變化模型, 我們就可以很好地比較噪聲點、細節以及邊緣的一
階和二階微分結果.
首先注意到沿著整個斜坡(軟邊緣), 一階微分都具有非0響應, 并且當這種斜坡的灰
度過渡近似線時, 對應于變化率的一階微分的響應為恒定值〈這里為-1):而二階微分的非0
響應則只出現在斜坡的起始和終點處, 在灰度變化率恒定的斜面上二階微分值為0, 這就是
圖5.9中的拉普拉斯銳化圖像細菌周圍出現雙邊緣的原因. 由此得出結論, 對于圖像中的軟
邊緣, 一階微分通常產生較粗的邊緣, 而二階微分則細得多.
再來看孤立噪聲點, 我們注意到二階微分對噪聲點的響應較一階微分要強很多, 這也就
是圖5.9中的拉曾拉斯銳化圖像中出現一些零星的高響應的原因, 當然二階微分的這一性質
是我們所不希望的.
細線常常對應于圖像中的細節, 二階微分對細線的較強響應說明了二階微分對于細節增
強的優越性.
最后, 一、二階微分對灰度階梯有著相同的響應, 只是在二階微分中有一個從正到負的
過攘, 這一性質將在第9.1在 “ 邊緣檢測與圖像分割” 中用于邊緣檢測.
我們將這些比較的結論總結如下:
- 一階導數通常會產生較寬的邊緣.
- 二階導數對于階躍性邊緣中心產生零交叉,而對于屋頂狀邊緣(細線),二階導數取極值.
- 二階導數對細節有較強的響應, 如細線和孤立噪聲點
對圖像增強而言,基于二階導數的算子應用更廣泛,因為它對細節響應更強,增強效果也就更明顯。而在本書第9章討論邊緣檢測的時候,基于一階導數的算子則會發揮更多的作用。盡管如此,一階算子在圖像增強中依然不可或缺,它們常常同二階算子結合在一起古以達到更好的銳化增強效果。
5.5節的最后我們提到了平滑濾波器又可以稱為低通濾波器,相應的,上面介紹的幾種銳化濾波器也可以稱為高通濾波器,得名的具體原因將在下一章“頻域濾波”中說明.
高提升濾波及其實現
無論是基于一階微分的Robert、Sobel模板還是基于二階微分的拉普拉斯模板,其中各系數和均為0。這說明算子在灰度恒定區域的響應為0, 即在銳化處理后的圖像中,原圖像的平滑區域近乎于黑色,而原圖中所有的邊緣、細節和灰度跳變點都作為黑背景中的高灰度部分突出顯示.
在基于銳化的圖像增強中,我們常常希望在增強邊緣和細節的同時仍然保留原圖像中的信息,而不是將平滑區域的灰度信息丟失。因此可以把原圖像加上銳化后的圖像以得到比較理想的結果。
形如式5-14這樣的濾波處理就稱為高提升濾波.
一般來說,權重系數A應為一個大于等于1的實數,A越大原圖像所占比重越大,銳化效果越不明顯。相對于A=1的情況,當A分別
為1.8和3時,圖中細節得到了有效增強,對比度也有了一定的改善。
實現
高提升譴披可由以下3個步驟完成:
(1)圖像銳化。
(2)原圖像與銳化圖像的按比例混合.
(3)混合后的灰度調整〈歸一化至[0,255]。
在實現中應注意, 高提升施加才銳化圖像的響應是正還是負非常敏感。以拉普拉斯模板為例,當模板中心系數為正時,對于鄰域中的相對高灰度值像素,其濾波響應為正值,疊加 到原圖像中將使輸出比原來更亮:而對于鄰壤中的相對暗點,其濾波響應顯然為負值,疊加到原圖像中則使該點在輸出圖像中更暗。當模板中心系數為負時,由于原圖像與濾波響應圖 像之間變成了相減的關系,高提升的效果與正中心系數的模板完全相同.這樣就達到了亮者愈亮,暗者愈暗的增強效果。
高斯·拉普拉斯交換
銳化在增強邊緣和細節的同時往往也增強了噪聲, 因此如何區分開噪聲和邊緣是銳化過程中要解決的一個核心問題。
基于二階微分的拉普拉斯算子對于細節〈細線和孤立點〉能產生更強的相應, 并且各
向同性, 因此在圖像增強中較一階的梯度算子更受到我們的青睞。然而, 它對于噪聲點的
響應也更強, 我們看到圖像baby_noise.bmp經拉普拉斯銳化后噪聲更明顯。
為了在取得更好銳化效果的同時把噪聲干擾降到最低, 可以先對帶有噪聲的原始圖像進圖像進行平滑濾波, 再進行銳化增強邊緣和細節. 本著“強強聯合” 的原則, 將在平滑領域工作得更好的高斯平滑算子同鏡化界表現突出的拉普拉斯銳化結合起來, 得到高斯一拉普拉斯算子(Marr和Hildh也提出)。
Laplacian與LoG算子的銳化效果比較
I = imread('baby.bmp'); Id = double(I); h_lap = [ -1 -1 -1;-1 8 -1;-1 -1 -1]; I_lap = imfilter(Id,h_lap,'corr','replicate');h_log = fspecial('log',5,0.5); I_log = imfilter(Id,h_log,'corr','replicate'); h_log2 = fspecial('log',5,2); I_log2 = imfilter(Id,h_log2,'corr','replicate');figure; subplot(2,2,1); imshow(I),title('原圖'); subplot(2,2,2); imshow(uint8(abs(I_lap)),[]),title('laplacian');subplot(2,2,3); imshow(uint8(abs(I_log)),[]),title('LoG'); subplot(2,2,4); imshow(uint8(abs(I_log2)),[]),title('LoG2');上述程序的運行結果如圖所示,分別給出了對于圖像baby.bmp,當σ=0.5和σ=2時的LoG增強效果。與laplacian相比, 噪聲得到了有效的抑制,且σ越小細節增強效果更好, σ 越大則平滑效果越好.
總結
- 上一篇: 好的PPT——准备工作
- 下一篇: 给你的Linux把把脉(内存、磁盘、CP