圖像加強之空間域銳化

1、圖像銳化理論html

圖像銳化的目的是使圖像變得清晰起來,銳化主要用於加強圖像的灰度跳變部分,這一點與圖像平滑對灰度跳變的抑制正好相反。銳化提升圖像的高頻份量,增長灰度反差加強圖像的邊緣和輪廓,以便後期圖像識別。算法

在圖像加強過程當中,經常使用平滑算法來消除噪聲,平滑屬於低通濾波,圖像的能量主要集中在低頻部分,噪聲所在頻段主要在高頻部分,同時圖像的邊緣也集中在高頻部分,這意味着圖像平滑後,高頻被衰減輪廓會出現模糊。圖像銳化就是爲了減小這種現象,經過高通濾波使圖像邊緣和輪廓變得清晰。函數

2、一階微分圖像加強--梯度算子spa

其中:.net

梯度的方向就是函數f(x,y)最大變化率的方向。梯度的幅值做爲最大變化率大小的度量,值爲:  3d

離散的二維函數f(i,j),能夠用有限差分做爲梯度的一個近似值。code

爲了簡化計算,能夠用絕對值來近似。orm

|f(i,j)|= |f(i+1,j)-f(i,j)| +|f(i,j+1)-f(i,j)|htm

2.1 Robert算子blog

   |f(i,j)|= |f(i+1,j+1)-f(i,j)| +|f(i,j+1)-f(i+1,j)|

上面算式採用對角相差的差分法來代替微分,寫爲濾波模板形式爲:

其中w1對接近45°的邊緣有較強響應,w2對接近-45°的邊緣有較強響應。

imgPath = 'E:\opencv_pic\src_pic\pic6.bmp'; img = imread(imgPath); img=rgb2gray(img); w1 =[-1,0; 0,1]; w2 =[0,-1; 1, 0]; G1=imfilter(img, w1, 'corr', 'replicate'); G2=imfilter(img, w2, 'corr', 'replicate'); G=abs(G1)+abs(G2); subplot(2,2,1),imshow(img), 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°的邊緣被突出。Robert交叉濾波後所有邊緣突出顯示。

2.2 Sobel算子

濾波時通常更多使用奇數尺寸的模板,下面是Sobel算子。

imgPath = 'E:\opencv_pic\src_pic\pic6.bmp'; img = imread(imgPath); img=rgb2gray(img); w1 =[-1,-2,-1; 0,0,0;  1,2, 1]; w2 =[ -1,0,1;  -2,0,2; -1,0,1]; G1=imfilter(img, w1); G2=imfilter(img, w2); G=abs(G1)+abs(G2); subplot(2,2,1),imshow(img), 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('Sobel交叉梯度圖像');

Robert算子,w1濾波後45°的邊緣被突出,w2濾波後-45°的邊緣被突出。Sobel交叉濾波後所有邊緣突出顯示。

3、二階微分濾波--拉普拉斯算子

二維函數f(x,y)在二階微分(拉普拉斯算子)的定義爲:

 

將上式相加後就獲得拉普拉斯算子:

對應的濾波模板以下:

考慮到求絕對值計算梯度,正負係數圖形的響應同樣,上面的模板也能夠表示爲:

上面的模板具備對稱性,因此求一次濾波就能夠,不須要像一階微分那樣計算2次。

imgPath = 'E:\opencv_pic\src_pic\pic6.bmp'; img = imread(imgPath); img=rgb2gray(img); w1 =[0,1,0;  1,-4,1;   0,1,0]; w2 =[0,-1,0; -1,4,-1;  0,-1,0]; w3 =[1,4,1; 4,-20,4;  1,4,1]; G1=imfilter(img, w1, 'corr', 'replicate'); G2=imfilter(img, w2, 'corr', 'replicate'); G3=imfilter(img, w3, 'corr', 'replicate'); subplot(2,2,1),imshow(img,[]), title('原始圖像'); subplot(2,2,2),imshow(abs(G1)), title('w1圖像'); subplot(2,2,3),imshow(abs(G2)),title('w2濾波'); subplot(2,2,4),imshow(abs(G3)),title('加權二階濾波');

二階濾波比以前的一階濾波銳化程度更增強烈,留下了很是清晰的邊緣圖案。w1w2濾波的方向性不明顯圖像基本一致,僅w2濾波圖像的輪廓更加深一些。

使用imsharpen對圖像進行銳化,對銳化強度參數進行控制,可見過高的銳化強度致使圖像出現「紋理」,效果變差。

b1=imsharpen(img,'Radius',1,'Amount',0.2); b2=imsharpen(img,'Radius',1,'Amount',2); b3=imsharpen(img,'Radius',1,'Amount',1); subplot(1,4,1),imshow(img), title('原始圖像'); subplot(1,4,2),imshow(b1), title('imsharpen圖像1'); subplot(1,4,3),imshow(b2), title('imsharpen圖像2'); subplot(1,4,4),imshow(b3), title('imsharpen圖像3');

4、銳化圖像後續處理

不管一階微分算子仍是二階微分算子,各系數之和都爲0,說明算子在灰度恆定區域的響應爲0,即銳化後的圖像,在原圖比較平坦的區域幾乎都變爲黑色,而在圖像邊緣,灰度跳變點的細節被突出顯示。通常圖像銳化是但願加強圖像的邊緣和細節,而非將平滑區域的灰度信息丟失。所以,能夠用原圖像加上銳化後的圖像,獲得比較理想的結果。

使用Sobel算子銳化和matlab內置銳化函數銳化以後的圖像對比,下圖是內置函數銳化結果:

b=imsharpen(img,'Radius',2,'Amount',1); subplot(1,2,1),imshow(img), title('原始圖像'); subplot(1,2,2),imshow(b), title('imsharpen圖像');

imsharpen濾波圖像明顯比算子銳化的圖像亮度更高,保留了原圖比較平坦的部分,好比背景圖部分。若是但願上面的濾波函數也達到這個效果,只須要把原圖加上濾波後的圖像便可,係數是爲了防止溢出,好比下面的例子。使用函數爲imshow(G+0.7*img),title('Sobel交叉梯度圖像')。

五、參考文獻

1MATLAB--數字圖像處理 圖像銳化(原理篇)

https://www.csdn.net/gather_24/MtjaMg4sMjg1OS1ibG9n.html

2imsharpen

https://ww2.mathworks.cn/help/images/ref/imsharpen.html

3、《數字圖像處理與機器視覺》

第二版。 張錚、徐超、任淑霞、韓海玲等編著。

 

 尊重原創技術文章,轉載請註明。

http://www.javashuo.com/article/p-xzcsrkbu-bh.html

相關文章
相關標籤/搜索