Also, ich habe eine Aufgabe: Verwenden Sie die Modifikation des Kruskal-Algorithmus, um ein Bild in Regionen zu trennen und zu identifizieren, welche von ihnen Kreise sind und ihre Radien drucken.Wie überprüfe ich, ob eine Region ein Kreis ist?
Finden von Regionen ist relativ einfach, das habe ich getan. Das Finden von Kreisen ist jedoch komplizierter. Meine Idee ist es, alle Grenzpunkte einer Region zu finden, einen Durchschnittspunkt zu finden - mögliche Mitte dieses Kreises - und Abstände zwischen jedem Grenzpunkt und "Zentrum" zu berechnen. Wenn sie sich nicht sehr unterscheiden, ist das tatsächlich ein Kreis.
Vor allem ist das überhaupt möglich? Zweitens wird diese Methode sehr dünne Ringe auch als Kreise erkennen, und das will ich nicht. Wie behebe ich das?
UPD: Wie finde ich effektiv Grenzpunkte? Letzte Schicht von BFS? Punkte mit weniger als 6 Nachbarn (sieht für mich allerdings wie Bruteforce aus)?
Sie können auch überprüfen, ob die Anzahl der Umfangspunkte in der Nähe von '2 * Pi * r' liegt, wobei' r' der Radius in Pixeln ist (die Hälfte der Bounding Box) ... es ist nicht notwendig, die Entfernung für alle Punkte zu überprüfen. Das gleiche gilt für den Bereich ... Siehe auch http://StackOverflow.com/a/37858301/2521214 – Spektre
Die Bounding Box ist absolut nicht robust, zum Beispiel eine dünne Linie in der Region wird die Bounding Box machen viel größer und führt dazu, dass die Kreiserkennung fehlschlägt. – galinette