0

Ich arbeite an einem Matlab-Bildverarbeitungsprojekt, das im Wesentlichen Komponenten und Verbindungen aus einem Bild eines handgezeichneten Schaltplans extrahiert.Wie erkennen Sie handgezeichnete Linien mit Hough-Transformation in Matlab?

Nach dem Preproccessing und dem Erlangen des Skeleton-Images habe ich versucht, die Hough-Transformation zu verwenden, um die Linien zu erkennen, so dass ich Ecken und Verbindungspfade identifizieren kann. Hier

ist der Code:

[H,T,R] = hough(im); 
peaks = houghpeaks(H,50,'Threshold',ceil(0.3*max(H(:)))); 
lines = houghlines(im, T,R,peaks, 'Fillgap', 20, 'MinLength', 20); 

figure; imshow(im); 
title('Lines detected'); 
hold on; 
for l=1:length(lines) 
    xy = [lines(l).point1; lines(l).point2]; 
    if ((lines(l).theta == 0)||(lines(l).theta >= 355 && lines(l).theta < 5)) || (lines(l).theta < 95 && lines(l).theta > 85) % detect only approx. horizontal and vertical lines 
     plot(xy(:,1),xy(:,2), 'LineWidth', 2); 
    end 
end 

Dies ist die Ein- und Ausgabe, die ich habe bei der Ausführung:

enter image description here

Ich brauche alle Liniensegmente zu erkennen, die fast horizontal sind oder vertikal, mit minimaler Länge, mit einigen Unregelmäßigkeiten aufgrund der von Hand gezeichneten Natur.

In diesem Screenshot zeigt das Ausgabebild nur wenige erkannte Linien, und einige Linien werden teilweise erkannt. Es sollte tatsächlich alle Drähte erkennen, die zum Verbinden von Komponenten verwendet werden.

Wie kann ich Hough-Transformationsfunktionen einstellen oder andere Methoden verwenden, um diese Anforderung zu erfüllen?

Antwort

1

(lines(l).theta >= 355 && lines(l).theta < 5) ist unmöglich. Die einzigen akzeptierten Theta-Werte sind 0 und [86,94].

Um ehrlich zu sein, ich verstehe nicht ganz, warum das horizontale und vertikale Linien gibt - ich würde denken, das Ergebnis wäre im Bogenmaß und offensichtlich 86 Radiant bis 94 Radiant macht keinen Sinn.

Mit diesem gesagt, wollen Sie nicht nur für 0 Grad/0 Radianten, sondern auch 180 Grad/Pi Radianten, und das gleiche für 270 Grad = 3/2 Pi = -1/2 Pi prüfen.