نسخه دوم الگوریتم لبه یابی edge sobel

, , پیغام بگذارید

دراین روش  بدون استفاده از توابع اماده متلب وبا استفاده از ماسک (ماتریس های) با مقدارهای زیر انجام میشود

F1=[-1 0 1;-2 0 2; -1 0 1];

F2=[-1 -2 -1;0 0 0; 1 2 1];

کارکرد این الگوریتم بصورت زیر است

ابتدا تصویر خوانده

%Input Image

A=imread(‘coins.png’);

در مرحله بعد تصویر به نوع داده double تغییر داده تا عملیات ضرب و جمع ماسک بر

روی آن قابل انجام باشد

A=double(A);

عملیات انجام ضرب ماسک بر روی تصویر

for i=1:size(A,1)-2

for j=1:size(A,2)-2

%Gradient operations

Gx=sum(sum(F1.*A(i:i+2,j:j+2)));

Gy=sum(sum(F2.*A(i:i+2,j:j+2)));

 

%Magnitude of vector

I(i+1,j+1)=sqrt(Gx.^2+Gy.^2);

 

end

end

حال برای اینکه تصویر قابل نمایش باشد تصویر به نوع uint8(I) تبدیل میکند

figure,imshow(I);title(‘Filtered Image’);

 

edge_sobel_03

بعد از این مرحله با تعیین حد آستانه با مقدار 210 مقادیر پیکسل هایی که کمتر از از این مقدار باشند برابر با صفر خواهند بود

%Define a threshold value

Thresh=210;

B=max(I,Thresh);

B(B==round(Thresh))=0;

B=im2bw(B);

figure,imshow(B);title(‘Edge detected Image’);

edgesobel

تصویر نهایی لبه یابی شده

در زیر نیز کد بصورت کامل درج شده است

%Input Image

A=imread(‘coins.png’);

%Preallocate the matrices with zeros

I=zeros(size(A));

%Filter Masks

F1=[-1 0 1;-2 0 2; -1 0 1];

F2=[-1 -2 -1;0 0 0; 1 2 1];

A=double(A);

for i=1:size(A,1)-2

for j=1:size(A,2)-2

%Gradient operations

Gx=sum(sum(F1.*A(i:i+2,j:j+2)));

Gy=sum(sum(F2.*A(i:i+2,j:j+2)));

 

%Magnitude of vector

I(i+1,j+1)=sqrt(Gx.^2+Gy.^2);

 

end

end

I=uint8(I);

figure,imshow(I);title(‘Filtered Image’);

%Define a threshold value

Thresh=210;

B=max(I,Thresh);

B(B==round(Thresh))=0;

B=im2bw(B);

figure,imshow(B);title(‘Edge detected Image’);

 

پاسخ دادن

anti spam *