Error in my edge detection function?

Illustration
Abigail - 2023-02-09T13:20:12+00:00
Question: Error in my edge detection function?

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)); %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+1,y-1))&&(mag(x,y)

Expert Answer

Profile picture of Kshitij Singh Kshitij Singh answered . 2025-11-20

Try This

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)

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!