2021-05-12 14:32:11
【matlab數位影像處理實驗】邊緣檢測
2019-12-25 17:51:46
1) 邊緣檢測將影象中各不同區域的邊緣(邊界)檢測出來,以達到檢測的目的。
2) 銳化影象g(m,n)=原影象f(m,n)+加重的邊緣(α*微分)。
1
常用的梯度運算元2
利用edge函數實現I=imread('fabric.png');%讀取影象
K=rgb2gray(I);
BW1 = edge(K,'roberts',0.08);
%進行Roberts 運算元邊緣檢測,門限值採用預設值
BW2 = edge(K,'prewitt', 0.05);
%進行Prewitt 運算元邊緣檢測,門限值採用預設值
BW3 = edge(K,'sobel', 0.04);
%進行 Sobel運算元邊緣檢測,門限值採用預設值
figure,imshow(BW1,[]),title('Roberts 運算元影象');
figure,imshow(BW2,[]),title('Prewitt 運算元影象');
figure,imshow(BW3,[]),title('Sobel運算元影象');
Roberts 運算元影象
Prewitt 運算元影象
Sobel運算元影象
3
利用模版處理Roberts 運算元
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[1,0;0,-1];
BW2=[0,1;-1,0];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1) +abs(K2));
figure,imshow(uint8(M))
Prewitt 運算元
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[-1,-1,-1;0,0,0;1,1,1];
BW2=[-1,0,1;-1,0,1;-1,0,1];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1) +abs(K2));
figure,imshow(uint8(M))
Sobel運算元
I=imread('fabric.png');
K=rgb2gray(I);
BW1=[-1,-2,-1;0,0,0;1,2,1];
BW2=[-1,0,1;-2,0,2;-1,0,1];
J1=filter2(BW1,K);
J2=filter2(BW2,K);
K1=double(J1);
K2=double(J2);
M=(abs(K1) +abs(K2));
figure,imshow(uint8(M))
1
影象區域性特徵的不連續性(相鄰區域的交界)稱為邊緣。邊緣位置的微分特性是幅度和方向性(沿邊緣方向灰度緩變,垂直方向突變)。邊緣位置和導數(微分)間具有一定對應關係,可通過微分進行邊緣檢測。無噪聲時,可用Roberts運算元;Prewitt和Sobel運算元同時具有平均,即抑制噪聲作用;對階躍狀邊緣,Roberts得到的邊緣寬度≥1個畫素,Prewitt和Sobel運算元得到的邊緣寬度≥2個畫素。2
由實驗的效果影象可以知道,在利用edge函數進行相應的運算元邊緣檢測的時候,各運算元的差別非常微小,不過由相應的引數,三個運算元分別為0.08、0.05、0.04可以知道,Sobel運算元在邊緣檢測中最為敏感,及在同一條件下它的處理效果應該最好。在後面實驗部分中,利用「手動」的模版運算元進行邊緣檢測,我們很容易可以看到,Sobel運算元的處理效果最好。相關文章