Error in my edge detection function?

6 Ansichten (letzte 30 Tage)
Abigail
Abigail am 3 Dez. 2013
Beantwortet: Jyoti Verma am 13 Nov. 2019
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 Kommentar
Abigail
Abigail am 3 Dez. 2013
I forgot to mention that the dir(x,y) 1, 2, 3, and 4 stand for the horizontal,vertical etc. directions.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Image Analyst
Image Analyst am 3 Dez. 2013
You can't have 0 as an index. There is no 0th row. MATLAB is 1-based array indexing, not 0-based like C.

Weitere Antworten (1)

Jyoti Verma
Jyoti Verma am 13 Nov. 2019
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)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by