2016-04-12 5 views
0

Ich versuche, Code zu schreiben, der Linien in einem Bild findet und eine rote Linie über die gefundenen Linien zeichnet. Ich habe es geschafft, dies mit der Hough-Transformation zu tun, aber mein Problem ist, dass ich es brauche, um nur horizontale und vertikale Linien zu finden und Linien von allen anderen Steigungen auszulassen.Hough-Transformation filtern, um nur horizontale und vertikale Linien in Matlab zu finden

Ich denke, ich könnte dies lösen, indem ich die Steigung der Zeilen, die der Code findet, und nur rote Linien über die horizontale und vertikale Linien mit einer if - Anweisung, aber ich habe Probleme herauszufinden, wie die extrahieren x und y Werte von den Punkten, die ich finde.

Hat jemand irgendwelche Vorschläge, wie man dieses Problem löst?

Hier ist mein Code unten:

function findlineshv(I) 

% Read Image 
img = imread(I); 

% Convert to black and white because 
% edge function only works with BW imgs 
bwImage = rgb2gray(img); 

% figure(1),imshow(bwImage); 

% find edges using edge function 
b=edge(bwImage,'sobel'); 

% show edges 
% figure(1),imshow(b); 


% compute the Hough transform of the edges found 
% by the edge function 
[hou,theta,rho] = hough(b); 

% define peaks, x and y 
peaks = houghpeaks(hou,5,'threshold',ceil(0.3*max(hou(:)))); 

x = theta(peaks(:,2)); 
y = rho(peaks(:,1)); 


lines = houghlines(bwImage,theta,rho,peaks,'FillGap',5,'MinLength',7); 

figure, imshow(bwImage), hold on 

for k = 1:length(lines) 
    xy = [lines(k).point1; lines(k).point2]; 
    plot(xy(:,1),xy(:,2),'LineWidth',3,'Color','red'); 
end 
+0

Nur ein Hinweis: Sie können eine schnellere Antwort erhalten, wenn Sie auch Ihr Bild teilen. – tfv

Antwort

0

Sie können dies tun, indem Sie einfach die gewünschten Theta-Werte in der Funktion Hough Einstellung.

start_angle = 80; 
end_angle = 100; 
theta_resolution = 0.5: 

[H,T,R] = hough(b, 'Theta', start_angle:theta_resolution:end_angle); 
Verwandte Themen