定義
空間域銳化濾波,是將圖像的低頻部分減弱或去除,保留圖像的高頻部分,即圖像的邊緣信息。
運算元
運算元是一個函式空間到函式空間上的映射O:X→X。廣義上的運算元可以推廣到任何空間,如內積空間等。
四種差分運算元
•Roberts運算元
•Sobel運算元
•Prewitt運算元
•Laplace運算元
Roberts運算元銳化濾波
(1)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運算元銳化濾波
(1)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梯度');