دراین روش بدون استفاده از توابع اماده متلب وبا استفاده از ماسک (ماتریس های) با مقدارهای زیر انجام میشود
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’);
بعد از این مرحله با تعیین حد آستانه با مقدار 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’);
تصویر نهایی لبه یابی شده
در زیر نیز کد بصورت کامل درج شده است
%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’);
پاسخ دادن