2015-10-13 1 views
0

J'ai un projet pour détecter les lignes de contour dans this image, mais quand je cours mon code avec l'algorithme de détection de bord canny, une ligne dans l'image se transforme en deux lignes, à cause de deux fois changer dans les valeurs de gris de la ligne avant et après cela.détection de contours de ligne de contour dans MATLAB

i= imread('path'); 
imgG= rgb2gray(i); 

PSF = fspecial('gaussian',7,7); 
Blurred = imfilter(imgG,PSF,'symmetric','conv'); 
figure ,imshow(Blurred) 

edgeimg = edge(Blurred , 'canny'); 
figure ,imshow(edgeimg) 

Je n'ai aucune idée de résoudre ce, s'il vous plaît aidez-moi.

Répondre

0

La meilleure réponse dépend de ce que vous voulez faire avec les bords après les détecter, mais supposons que vous voulez juste pour générer une image où les lignes sont en noir pur et tout le reste est blanc pur ...

L'approche la plus simple consiste à seuil l'image de sorte que les pixels gris plus clairs deviennent blancs et les pixels gris plus sombres deviennent noirs. Vous pouvez également éroder l'image pour essayer de réduire l'épaisseur des lignes - bien que vous trouverez que cela va se débarrasser des contours fins dans votre image d'échantillon.

Voici le code pour le faire (en supposant que vous avez l'image G4.jpg dans votre dossier de travail).

% load image and convert to double (0 to 1) as well as flip black and white 
imG4 = imread('G4.jpg'); 
imG4_gs = 1 - mean(double(imG4)/255,3); 

figure 
image(64*(1 - imG4_gs)) 
colormap('gray'); 
axis equal 

% image grayscale threshold 
img_thr = 0.25; 

% apply threshold to image 
imG4_thr = imG4_gs >= img_thr; 

figure 
image(64*(1 - imG4_thr)) 
colormap('gray'); 
axis equal 

% erode image (try "help imerode" in the MATLAB console) 
imG4_ero = imerode(imG4_thr,strel('disk',1)); 

figure 
image(64*(1 - imG4_ero)) 
colormap('gray'); 
axis equal;