Ich habe eine Reihe von Punkten. Ich möchte wissen, ob diese Punktmatrix einen Kreis, ein Quadrat oder ein Dreieck darstellt.Erkennen von Formen in einem Array von Punkten
Wo soll ich anfangen? (Ich verwende C#)
Dank Jon
Ich habe eine Reihe von Punkten. Ich möchte wissen, ob diese Punktmatrix einen Kreis, ein Quadrat oder ein Dreieck darstellt.Erkennen von Formen in einem Array von Punkten
Wo soll ich anfangen? (Ich verwende C#)
Dank Jon
Je nach Problem, ein guter Ansatz für dieses Problem kann die Hough transform und alle abgeleiteten Algorithmus
Es besteht in einer Umwandlung des Bildraumes zu einem anderen Raum zu verwenden, wo die Koordinate stellt die Objekte Parameter (Winkel und Anfangspunkt für eine Linie, Koordinaten des Mittelpunkts und Radius für einen Kreis)
Der Algorithmus transformiert jeden Punkt Ihres Punktarrays in Punkten im anderen Raum. Dann müssen Sie im neuen Raum suchen, wenn einige Punkte vorherrschen. Von diesen Punkten erhalten Sie die Parameter Ihres Objekts.
Natürlich müssen Sie es einmal tun, um die Linien zu erkennen (damit Sie wissen, wie viele Linien in Ihrer Bitmap sind und wo sie sind) und um die Kreise zu erkennen (es ist nicht genau derselbe Algorithmus)
Sie können einen Blick auf this lecture haben (Hough Kreis-Transformation), aber man konnte leicht den Algorithmus für Zeile
EDIT finden: Sie können auch einen Blick auf diese Antworten haben
ok, ich möchte es versuchen. Kennen Sie eine C# Implementierung? – user96547
Nein, tut mir leid Aber soweit ich mich erinnere, war der Algorithmus ziemlich einfach (aber es erfordert immer noch etwas Arbeit): a) Sie transformieren Ihr Bild in ein neues Bild mit der mathematischen Transformation (müssen nur die Formeln anwenden) b) Sie müssen nach den wichtigsten Punkten suchen (d. hdie Punkte mit einem Wert größer als ein gegebener Schwellenwert) c) Sie wenden die inverse Transformation an (wieder mit den Formeln) und Sie haben die Koordinate Ihrer Linien/Kreise d) von der Anzahl der Linien, können Sie wissen, ob es ein ist Dreieck oder ein Quadrat (angenommen, dass nur 1 Objekt zu erkennen ist) – ThibThib
Funktioniert es, wenn der Kreis nicht perfekt ist? – user96547
Ich werde einen wilden Stich nehmen und sagen, wenn Sie 3 Punkte haben die Form repräsentiert ein Dreieck, 4 Punkte sind eine Art von Viereck, mehr als die ist ein Kreis.
Vielleicht gibt es weitere Informationen zu Ihrem Problem, das Sie bereitstellen könnten.
oh ja. Ich habe mehr 500 Punkte und muss herausfinden, ob ich Linien oder einen Kreis habe. – user96547
Stellen Sie sich vor, es ist jeder dieser eins nach dem anderen und versuchen Sie, jede dieser Formen auf die Daten zu passen. Für ein Quadrat könnten Sie die vier Extrempunkte finden und versuchen, ein Quadrat zu zeichnen, das durch alle geht von ihnen ..
Sobald Sie eine Form an Ort und Stelle haben .. Sie könnten den Abstand zwischen jedem der Punkte und den Teil der Form, die am nächsten ist zu messen .. dann Quadrate diese Abstände und summieren sie .. die Form, die die kleinste Quadratsumme hat, ist wahrscheinlich die beste Wahl
Verwenden Sie die Hough Transform.
Ich habe ein Array von (x, y). ein paar hundert die ganze Zeit. Und ich muss herausfinden, die Form hinter diesem – user96547
sind die Punkte, die auf dem Umfang einer Form sein sollen, oder in ihrem Inneren? – libeako