Error in my edge detection function?
Show older comments
I'm attempting to create a canny edge detector and I've run into a speed bump while checking for the edge pixels. Below I have the code I'm using to check which pixel is on an edge but I keep getting the error "Attempted to access mag(0,18); index must be a positive integer or logical" Is there a way to fix this? For this code, mag=gradient magnitude, dir=gradient direction, img=image, and edgecand=the edge candidate.
edgecand = mag;
for x=1:size(img,1);
for y=1:size(img,2);
if (dir(x,y)==1);
if(mag(x,y)>mag(x-1,y))&&(mag(x,y)>mag(x+1,y));
%happy
else edgecand(x,y)=0;
end
end
if (dir(x,y)==2);
if(mag(x,y)<mag(x+1,y+1))&&(mag(x,y)>mag(x-1,y-1));
%happy
else edgecand(x,y)=0;
end
end
if (dir(x,y)==3);
if(mag(x,y)>mag(x,y-1))&&(mag(x,y)<mag(x,y+1));
%happy
else edgecand(x,y)=0;
end
end
if (dir(x,y)==4);
if(mag(x,y)>mag(x+1,y-1))&&(mag(x,y)<mag(x-1,y+1));
%happy
else edgecand(x,y)=0;
end
end
end
end
Thank you for any help!
Accepted Answer
More Answers (1)
Jyoti Verma
on 13 Nov 2019
0 votes
c=imread('carplate1.jpg');
b=rgb2gray(c);
px=[-1 0 1;-1 0 1;-1 0 1]; %_horizontal edges,
b1=filter2(px,b);
figure,imshow(b1/255)
py=px'; %%_vertical edges,
b2=filter2(py,b);
figure,imshow(b2/255)
edge_p=sqrt(b1.^2+b2.^2);
figure,imshow(edge_p/255)
%figure,imshow(edge_p/512), Dividing by 512 darkens the image
%figure,imshow(edge_p/128), Dividing by 128 Lighten the image,
edge_t=im2bw(edge_p/255,0.3); %a binary image containing edges only can be produced by thresholding.
figure,imshow(edge_t)
%edge_g=im2bw(edge_p/255,0.3);
%figure,imshow(edge_g)
%We can obtain edges by the Prewitt _filters
edge_k=edge(b,'prewitt');
figure,imshow(edge_k)
%We can obtain edges by the Prewitt _filters
edge_s=edge(b,'sobel');
figure,imshow(edge_s)
Categories
Find more on Object Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!