空間域銳化

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

定義

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

運算元

運算元是一個函式空間到函式空間上的映射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梯度');

空間域銳化 空間域銳化

相關詞條

熱門詞條

聯絡我們