Error in my edge detection function?
Afficher commentaires plus anciens
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!
1 commentaire
Abigail
le 3 Déc 2013
Réponse acceptée
Plus de réponses (1)
Jyoti Verma
le 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)
Catégories
En savoir plus sur Object Analysis dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!