空間域銳化

空間域銳化濾波,是將圖像的低頻部分減弱或去除,保留圖像的高頻部分,即圖像的邊緣信息。

基本介紹

  • 中文名:空間域銳化
  • 外文名:Spatial sharpening
  • 套用領域:數字圖像處理
  • 套用:銳化空間濾波器、圖像銳化
  • 語言環境:matlab
  • 方法:梯度銳化法
定義,運算元,四種差分運算元,Roberts運算元銳化濾波,Sobel運算元銳化濾波,4.Prewitt運算元銳化濾波,5.Laplace運算元銳化濾波,

定義

空間域銳化濾波,是將圖像的低頻部分減弱或去除,保留圖像的高頻部分,即圖像的邊緣信息。

運算元

運算元是一個函式空間到函式空間上的映射O:X→X。廣義上的運算元可以推廣到任何空間,如內積空間等。

四種差分運算元

  • Roberts運算元
  • Sobel運算元
  • Prewitt運算元
  • Laplace運算元

Roberts運算元銳化濾波

設圖像函式為F(x,y),點(x,y)的梯度定義為:
空間域銳化
梯度的幅值定義為:
空間域銳化
對於離散圖像,我們需要用差分近似表示微分,那么得到近似梯度幅度為:
空間域銳化
交叉一階差分,得到Roberts運算元:
空間域銳化
(2)代碼實現
Roberts運算元涉及絕對值運算,我們不方便提取出模版來做模版卷積運算,那么直接遍歷所有點求出其近似梯度幅值:
I=imread('C:\圖像\bridge.gif');
subplot(2,2,1),imshow(I)
title('原始圖像')
hx=[-11]; %生成Sobel垂直梯度模板
hy=hx';%生成Roberts水平梯度模板
gradx=filter2(hx,I,'same');
gradx=abs(gradx); %計算圖像的Roberts垂直梯度
subplot(2,2,2),imshow(gradx,[])
title('圖像的Roberts垂直梯度')
grady=filter2(hy,I,'same');
grady=abs(grady); %計算圖像的Roberts水平梯度
subplot(2,2,3),imshow(grady,[]);
title('圖像的Roberts水平梯度');
grad=gradx+grady; %得到圖像的Roberts梯度
subplot(2,2,4),imshow(grad,[]);
title('圖像的Roberts梯度');
空間域銳化
邊界點無法按照Roberts運算元求交叉差分,這裡採取直接忽略邊界的方式。需要注意的是把類型強制轉換為uint8(abs默認返回double)。

Sobel運算元銳化濾波

Roberts運算元是基於2*2視窗計算近似梯度,而Sobel運算元是基於3*3視窗計算近似梯度的,並且Sobel運算元並不是各向同性的運算元,它分為:
  • 水平邊緣檢測Sobel運算元gx
  • 垂直邊緣檢測Sobel運算元gy
先給出模版再說明近似梯度的原因:
空間域銳化
gx之所以近似表示水平梯度,是因為它直接求的是3*3視窗內模版中心像素點附近的像素點水平差分之和,中間元素差分乘以了權重係數2表示和模版中心關聯度更高。gy可以類似理解。
運用模版卷積運算,可以快速求出水平梯度:
Gx=gx⋅F3×3
Sobel運算元考慮權重,因此抗噪能力優於無權重的Prewitt運算元(見後)。
在求出了水平梯度Gx和垂直梯度Gy後,可以得到梯度幅值為:
G=(Gx)2+(Gy)2
(2)代碼實現
為了節約運算量,一般在實現Sobel運算元時不直接使用求模運算(平方和再開方),而是比較Gx和Gy中絕對值較大者(水平差分和垂直差分較大者),也就是選取邊界輪廓更加明顯的方向。
I=imread('C:\圖像\bridge.gif');
subplot(2,2,1),imshow(I)
title('原始圖像')
hx=[-1 -2 -1;0 0 0;1 2 1]; % 生成Sobel垂直梯度模板
hy=hx'; % 生成Sobel水平梯度模板
gradx=filter2(hx,I,'same');
gradx=abs(gradx); % 計算圖像的Sobel垂直梯度
subplot(2,2,2),imshow(gradx,[])
title('圖像的Sobel垂直梯度')
grady=filter2(hy,I,'same');
grady=abs(grady); % 計算圖像的Sobel水平梯度
subplot(2,2,3),imshow(grady,[]);
title('圖像的Sobel水平梯度');
grad=gradx+grady; % 得到圖像的Sobel梯度
subplot(2,2,4),imshow(grad,[]);
title('圖像的Sobel梯度');
空間域銳化
還是需要注意:
  • 做卷積時用Matlab點乘
  • uint8類型轉換

4.Prewitt運算元銳化濾波

  • 前面提到過,Prewitt是Sobel運算元的無權重版本,模版如下:
空間域銳化
  • 直接修改模版即可:
    I=imread('C:\圖像\bridge.gif');
    subplot(2,2,1),imshow(I)
    title('原始圖像')
    hx=[-1 -1 -1;0 0 0;1 1 1]; % 生成Prewitt垂直梯度模板
    hy=hx'; % 生成Prewitt水平梯度模板
    gradx=filter2(hx,I,'same');
    gradx=abs(gradx); % 計算圖像的Prewitt垂直梯度
    subplot(2,2,2),imshow(gradx,[])
    title('圖像的Prewitt垂直梯度')
    grady=filter2(hy,I,'same');
    grady=abs(grady); % 計算圖像的Prewitt水平梯度
    subplot(2,2,3),imshow(grady,[]);
    title('圖像的Prewitt水平梯度');
    grad=gradx+grady; % 得到圖像的Prewitt梯度
    subplot(2,2,4),imshow(grad,[]);
    title('圖像的Prewitt梯度');
空間域銳化

5.Laplace運算元銳化濾波

(1)Laplace運算元
之前的三個運算元都是一階梯度運算元,最後介紹一個二階梯度運算元:Laplace運算元,二維空間的laplace運算元定義為各向同性的二階導數和:
圖像中用二階差分來近似二階梯度:
空間域銳化
所以有
空間域銳化
由此得到Laplace運算元的模版:
(2)代碼實現
I=imread('C:\圖像\bridge.gif');
subplot(2,2,1),imshow(I)
title('原始圖像')
hx=[0 1 1;1 -4 1;0 1 0]; % 生成Laplacia垂直梯度模板
hy=hx'; % 生成Laplacia水平梯度模板
gradx=filter2(hx,I,'same');
gradx=abs(gradx); % 計算圖像的Laplacia垂直梯度
subplot(2,2,2),imshow(gradx,[])
title('圖像的Laplacian垂直梯度')
grady=filter2(hy,I,'same');
grady=abs(grady); % 計算圖像的Laplacia水平梯度
subplot(2,2,3),imshow(grady,[]);
title('圖像的Laplacia水平梯度');
grad=gradx+grady; % 得到圖像的Laplacia梯度
subplot(2,2,4),imshow(grad,[]);
title('圖像的Laplacia梯度');
空間域銳化

相關詞條

熱門詞條

聯絡我們