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
NOTE:-
Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help , Finance Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.
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)
SEE COMPLETE ANSWER CLICK THE LINK
Comments
Post a Comment