2017-04-11 4 views
0

Ich muss alle Punkte eines weißen Polygons auf schwarzem Hintergrund in C# erkennen. Hier ist ein Bild von mehreren Beispielen. Ich denke nicht, dass es zu schwierig ist, aber ich kann das mit all den Variationen nicht richtig erkennen. Mein Code ist zu viel, um hier zu posten, aber im Grunde ging ich jede Seite durch und suche, wann sich Schwarz-Weiß ändert. Soll ich Open CV verwenden? Ich hatte auf einen einfachen Algorithmus gehofft, den ich in C# implementieren könnte. Irgendwelche Vorschläge? Vielen Dank.C# Punkte des Polygons in schwarz/weiß erkennen Bild

enter image description here

+0

es ist unklar, was Sie wollen ... alle Punkte des Polygons ROI-Maske und du hast das schon, also nehme ich dir ne an ed Vertexes (Kantenpunkte) ... in diesem Fall finden Sie zuerst Konturen (alle weißen Pixel neben jedem schwarzen Pixel) und wenden dann entweder die Analyse der verbundenen Komponenten oder die Hough-Transformation an, um Linien zu erkennen .... danach sind die Ecken nur Schnittpunkte aller Linien ... oder Extreme mit wechselndem Steigungswinkel .... – Spektre

+0

Ein einfacher Algorithmus würde fluten. Sie können es einfach selbst implementieren. Zum Beispiel wie [dieser Link] (https://www.google.de/amp/s/simpledevcode.wordpress.com/2015/12/29/flood-fill-algorithm-using-c-net/amp/). Nachdem Sie alle Ihre verbundenen Punkte erhalten haben, suchen Sie nach Ihren Eckpunkten oben links, oben rechts .... – PSchn

+0

danke für die Antworten, ja ich muss die Punkte bekommen. Ich werde überprüfen, ob Transformation oder verbundene Komponenten Analyse. Ich glaube nicht, dass ein einfacher Algorithmus zur Erkennung von Eckpunkten funktionieren würde, zum Beispiel würde das mittlere rechte Bild 7 Punkte haben. – dan

Antwort

1

In Ihrem Fall würde ich dies tun:

  1. vor Prozessabbild

    so Rauschen in Farbe entfernen, falls vorhanden (wie JPG Verzerrung etc.) und Binarisieren Bild.

  2. wählen Umfang Pixel

    einfach eine Schleife durch alle Pixel und stellen jedes weiße Pixel, das mindestens einen schwarzen Nachbarn bestimmte Farbe hat, die Ihren Umfang ROI Maske darstellen oder die Pixelposition auf einige hinzufügen Liste der Punkte stattdessen.

  3. gelten angeschlossenen Komponenten Analyse

    so müssen Sie die Reihenfolge der Punkte herausfinden (wie miteinander verbunden sind). Der einfachste Weg, dies zu tun, ist Flood-Einreichung der ROI von ersten gefundenen Pixel, bis alle ROI ist gefüllt und erinnere mich an die Reihenfolge der gefüllten Punkte (ähnlich A *). Es sollte irgendwann zwei verschiedene Wege geben und beide sollten endlich beitreten. Identifizieren Sie diese 2 Punkte und konstruieren Sie die Reihenfolge der Umfangspunkte (indem Sie eine Hälfte umkehren und den geteilten Teil behandeln, falls vorhanden).

    connected components

  4. finden Scheitel

    , wenn Sie die Winkeländerung zwischen allen daraus folgenden Pixeln dann auf geraden Linien die Winkeländerung in der Nähe von Null und in der Nähe von Eckpunkten sollte berechnen viel größer. Also Schwelle und du hast deine Scheitelpunkte. Um dies robust zu machen, müssen Sie den Neigungswinkel aus etwas entfernteren Pixeln berechnen als aus den nächsten Pixeln. Auch eine Schwellenänderung dieser Winkeländerung gegen den gleitenden Durchschnitt liefert häufig stabilere Ergebnisse.

    edge detect

    So finden Sie heraus, wie weit die Pixel sollten Winkel zu berechnen, so dass Sie nicht zu viel Lärm und Scheiteln bekam noch große Spitzen und auch den Schwellenwert herauszufinden, die über den Lärm sicher ist.

    Dies kann auch durch hough erfolgen verwandeln und oder Konturen Funktionen, die CV Libs in vielen vorhanden sind.Eine andere Option ist auch regress/fit die Linien in der Punktliste direkt und berechnen Kreuzungen, die Sub-Pixel-Genauigkeit bieten können.

Für weitere Informationen siehe QAs bezogen werden:

Verwandte Themen