2013-01-17 10 views
5

Hallo, ich habe ein Polygonproblem. Ich weiß nicht, wonach ich suchen soll, also habe ich beschlossen, hier zu fragen. Das Bild unten zeigt eine einfache Form. Die Konturen werden mit OpenCV und durch den CV_CHAIN_APPROX_TC89_KCOS (für diejenigen, die wissen, wie dies getan wird) Algorithmus ermittelt, so dass alle Punkte in einer Linie zu einer einzigen Linie zusammengefasst werden. Also sowieso einige Konturen enthalten eine Art von, ich nenne es Lärm, in der Form. Das Bild unten zeigt, was mit Rauschen gemeint ist. Die rote Linie ist die Kontur. (Leider keine ms male Fähigkeiten)Konturapproximation mit unerwünschten Punkten

enter image description here

Mein Ziel ist es, die Form neu zu definieren, um die Form zu nähern, aber lassen Sie sich dieses „Rauschen“. Also sollte die Kontur so aussehen. Die blaue Linie zeigt die korrigierte Kontur.

enter image description here

+0

Haben Sie [cv :: approxPolyDP] überprüft (http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html#cv-approxpolydp)? Es sieht so aus, als würde es tun, was du erreichen willst. Wenn Sie steile Winkel haben, müssen Sie möglicherweise die Funktion teilweise anwenden und nicht das gesamte Polygon gleichzeitig. –

+0

Ich werde es versuchen. Ich gebe in ein paar Minuten ein Feedback –

+0

Nun kein Glück mit cv :: approxPolyDP –

Antwort

4
  1. Versuch zu erkennen, Ecken mit ... cvGoodFeatuersToTrack() .... aber hat Kriterien, die Ecken durch eine gute Menge Abstand voneinander getrennt sein sollten ... wenn Ecken einen Cluster verwerfen bilden.
  2. Aus der Liste der Punkte in der Kontur ... wählen Sie den Punkt mit (höchster x, höchster y), (höchster x, niedrigster y), (niedrigster x, höchster y) und (niedrigster x, niedrigster y) .... jetzt diese vier Punkte ...
  3. beitreten Wenn Sie ‚Rauschen‘ an den Ecken haben sich dann gerade Linien in dem Bild einer Hough-Transformation ...
+0

Das klingt ziemlich nützlich, aber was ist, wenn mein Polygon kein einfaches Rechteck ist; etwas wie ein L-förmiges Polygon? (Ich werde meine Frage schnell aktualisieren) –

+0

Was ist die Chance, dass Sie an den 90-Grad-Ecken "Lärm" haben können? –

+0

Nahe bei Null. BTW sehr guter Ansatz auf der Suche nach Clustern! +1 –

1

ich kann zu erfassen versuchen vorschlagen ein weiterer Ansatz:

1) Sie können Hough Line Transform verwenden, um Linien auf Ihrem Bild zu erkennen (vor der Verwendung Canny Konturen zu erkennen). Sie können kleine Linien nicht berücksichtigen, indem Sie in der Methode HoughLinesP einen ziemlich großen Schwellenwert verwenden (die minimale Anzahl von Schnittpunkten, um eine Linie zu "erkennen").

2) Nachdem Sie alle Linien gefunden haben, können Sie ihre Kreuzung finden, wie es beschrieben wird here von @DanielHsH. So wirst du alle Ecken finden können.