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:
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?