本文主要包括如下內容 算法
中值濾波本質上是一種統計排序濾波器. 對於原圖像中某點(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). 顯然, 中值濾波並不是線性濾披器. markdown
中值濾波對於某些類型的隨機噪聲具備很是理想的降噪能力, 對於線性平滑濾波而言,
在處理像縈鄰壤以內的噪聲點時, 噪聲的存在總會或多或少影響該點的像素值的計算(高斯
平滑影響的程度與噪聲點到中心點的距離成正比〉,但在中值濾被中噪聲點則經常直接忽略掉的:並且與線性平滑濾波器相比, 中值濾波在降噪同時引發的模糊效應較低。中值濾波的一種典型應用是清除椒鹽噪聲.函數
下面首先簡單介紹一下常見的噪聲模型,接着給出中值濾波的Matlab實現:
學習
Matlab提供了medfilt2函數實現中值濾波, 原型爲:
I2 = medfilt2(I1,[m,n]) ui
參數說明
• I1是緣由矩陣.
• m和n是中值濾波處理的模板大小,默認3x3. atom
輸出結果
輸出I2是中值濾波後的圖像矩陣. spa
下面的程序分別給出了一幅受椒鹽噪聲污染的圖像通過平均平滑、高斯平滑和中值撼潑
的處理效果. 3d
I = imread('lena_salt.bmp');
J = imnoise(I,'salt & pepper');
w = [1,2,1;2,4,2;1,2,1]/16;
J1 = imfilter(J,w,'corr','replicate');
w = [1,1,1;1,1,1;1,1,1]/9;
J2 = imfilter(J,w,'corr','replicate');
J3 = medfilt2(J,[3,3]);
figure;
subplot(2,3,1);
imshow(I),title('原圖像');
subplot(2,3,2);
imshow(J),title('椒鹽噪聲');
subplot(2,3,4);
imshow(J1),title('高斯平滑');
subplot(2,3,5);
imshow(J2),title('平均平滑');
subplot(2,3,6);
imshow(J3),title('中值平滑');
如圖從中可見線性平滑濾波在降噪的同時不可避免地形成了模糊,而中值濾波在有效抑制椒鹽噪聲的同時模糊效應明顯低得多,於是對於椒鹽噪聲污染的圖像,中值濾波要遠遠優於線性平滑濾波. code
一種改進的中值濾波策略
中值濾波效果依賴於濾波窗口的大小, 太大會使邊緣模糊, 過小了則去噪效果不佳。 由於噪聲點和邊緣點一樣是灰度變化較爲劇烈的像素, 普通中值濾波在改變噪聲點灰度值時,會必定程度地改變邊緣像素灰度值。可是噪聲點幾乎都是鄰域像素的極值,而邊緣每每不是,所以能夠利用這個特性來限制中值濾波。 orm
具體的改進方法以下: 逐行掃描圖像, 當處理每個像素時, 判斷該像素是不是濾披窗口覆蓋下鄰域像素的極大或者極小值。 若是是, 則採用正常的中值濾波處理該像素:若是不是, 則不予處理。 在實踐中這種方法可以很是有效地去除突發噪聲點, 尤爲是椒鹽噪聲, 且幾乎不影響邊緣。
因爲算法能夠根據局部鄰域的具體狀況而自行選擇執行不一樣的操做, 所以改進的中值濾波也稱爲自適應中值濾波.
自適應中值濾波對邊緣進行了更好的保留。
中值濾波的工做原理
與線性平滑濾波考慮鄰域中每一個像素的做用不一樣,中值濾波在每一個n×n鄰域內都會忽略那些相對於鄰域內大部分像素更亮或更睛,而且所佔區域小於像素總數一半
注意:做爲一種非線性濾波,中值濾波有可能會改變圖像的性質,於是通常不適用於像軍事圖像處理、醫學圖像處理等領域.
圖像銳化的目的是使模糊的圖像變得更加清晰. 其應用普遍, 包括從醫學成像到工業檢
測和軍事系統的制導等。
圖像銳化主要用於加強圖像的灰度跳變部分,這一點與圖像平滑對灰度跳變的抑制正好 相反,事實上從平滑與銳化的兩種運算算子上也能說明這一點,線性平滑都是基於對圖像鄰域的加權求和或積分運算,而銳化則經過其逆運算導數(梯度〉或有限差分來實現。
在討論平滑的時候曾提到噪聲和邊緣都會使圖像產生灰度跳變,爲了在平滑時可以將噪聲和邊緣區別對待,5.3.5節中給出了一種自適應濾波的解決方案。一樣,在銳化處理中如何區分噪聲和邊緣仍然是咱們面臨的一個課題,即在平滑處理中平滑的對象是噪聲而不涉及邊緣,在銳化中銳化的對象是邊緣而不涉及噪聲。
回憶一下高等數學中梯度的定義,對於連續2 維函數.f(x, y),其在點(x,y)處的梯度
是下面的二維列向量:
其中,
基於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 模板更加經常使用:
下面的Matlab 程序計算了一幅圖像的豎直和水平梯度, 它們的和能夠做爲完整的Sobel梯度。
I = imread('bacteria.BMP');
w1 = fspecial('sobel');
w2 = w1';
G1 = imfilter(I,w1);
G2 = imfilter(I,w2);
G = abs(G1)+abs(G2);
figure;
subplot(2,2,1);
imshow(I),title('原圖像');
subplot(2,2,2);
imshow(G1,[]),title('水平sobel');
subplot(2,2,3);
imshow(G2,[]),title('豎直sobel');
subplot(2,2,4);
imshow(G,[]),title('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中的拉曾拉斯銳化圖像中出現一些零星的高響應的緣由, 固然二階微分的這一性質
是咱們所不但願的.
細線經常對應於圖像中的細節, 二階微分對細線的較強響應說明了二階微分對於細節增
強的優越性.
最後, 1、二階微分對灰度階梯有着相同的響應, 只是在二階微分中有一個從正到負的
過攘, 這一性質將在第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相比, 噪聲獲得了有效的抑制,且σ越小細節加強效果更好, σ 越大則平滑效果越好.