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
Antwort
In Ihrem Fall würde ich dies tun:
vor Prozessabbild
so Rauschen in Farbe entfernen, falls vorhanden (wie JPG Verzerrung etc.) und Binarisieren Bild.
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.
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).
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.
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:
- 1. Matplotlib - "contains_point" -Funktion nicht die Punkte innerhalb des Polygons
- 2. Konkavrumpf Alle Punkte des Polygons an der Grenze nehmen
- 3. C# Seite eines Polygons ausfüllen
- 4. Wie finde ich in PostGIS alle Punkte innerhalb eines Polygons?
- 5. Erkennen von Rechtecken in Bild C#
- 6. Selbstschnitt eines Polygons mit n Seiten erkennen?
- 7. Wie kann ich mit Libpqxx auf die in Postgres gespeicherten Punkte des Polygons zugreifen?
- 8. Ein Bild als Farbe eines Polygons setzen
- 9. Split Dartboard in Polygons
- 10. Koordinaten des Quad-Polygons sortieren
- 11. So ermitteln Sie den Typ des Polygons
- 12. Erkennen von Liniensegmenten in einem Bild
- 13. Erkennen des Netzwerkstatus (verbunden - getrennt) in C#
- 14. Lücken in der Kante eines Polygons füllen
- 15. Entfernen des Polygons basierend auf Checkbox Toggle
- 16. Liste der Scheitelpunkte des regulären Polygons abrufen
- 17. Größe des Polygons mit Leaflet geprüft l.draw.polyline
- 18. Cosmos DB Abfrage Rückkehrpunkte außerhalb des Polygons mit ST_Within
- 19. DbGeography - Wählen Sie Polygone/Linienfolgen innerhalb des Polygons
- 20. Punkte auf Bild oben in R
- 21. Anzahl der Punkte in einem Bild
- 22. Erkennen, welches Bild in JLabel
- 23. Unterobjekt in einem Bild erkennen
- 24. Sprache des Texts erkennen
- 25. Gleiches Bild erkennen?
- 26. Funktionale Programmierung: Umfang eines Polygons.
- 27. Slice ein Bild über zwei Aribtray Punkte
- 28. Verwendung pytesseract zu erkennen, Text aus Bild
- 29. GeoPandas Label Polygons
- 30. Erkennen von geraden Linien in einem Bild
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
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
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