2009-06-29 3 views
4

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

+0

Ich habe ein Array von (x, y). ein paar hundert die ganze Zeit. Und ich muss herausfinden, die Form hinter diesem – user96547

+0

sind die Punkte, die auf dem Umfang einer Form sein sollen, oder in ihrem Inneren? – libeako

Antwort

5

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

Shape recognition algorithm(s)

Detecting an object on the image based on geometrical form

+0

ok, ich möchte es versuchen. Kennen Sie eine C# Implementierung? – user96547

+0

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

+0

Funktioniert es, wenn der Kreis nicht perfekt ist? – user96547

-2

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.

+0

oh ja. Ich habe mehr 500 Punkte und muss herausfinden, ob ich Linien oder einen Kreis habe. – user96547

0

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