Bildverarbeitung, Konturverfolgung und Pi=4
-
Gregor schrieb:
EDIT: Die falschen Ergebnisse werden nicht mit wachsendem Kreisradius besser? Eigentlich würde ich das erwarten.
Nein. Die Ergebnisse bleiben mit erstaunlicher Genauigkeit falsch (was für ein Satz). Egal wie groß die Kreise sind, die Circularity ist immer Nahe bei 17 oder 18.
volkard schrieb:
Die Kröte kennt nur vier Richtungen.
[...]
edit: Falsch, er schreibt von "8-Nachbarschaft", seltsam, daß PI dann 4 ergibt.Die Kröte kennt nur 4 Richtungen. Aber es werden stets die beiden letzten besuchten Randpunkte des Blobs verwendet, um den Richtungsvektor/Konturcode zu berechnen. Und die liegen durchaus häufig diagonal zueinander.
Gregor schrieb:
Vielleicht einfach ein Bug, bei dem er nur "G"s kriegt und keine "U"s.
Ich habe den Algorithmus für einen kleinen Kreis von Hand nachgerechnet. Er arbeitet korrekt und liefert auch Us.
Gregor schrieb:
EDIT: @Threadersteller: Dreh mal die Quadrate um 45° und sag, was Du dann kriegst.
Gute Idee. Ich werde es später testen.
Das Verfahren ist in der Literatur verbreitet und nirgends ist die Rede von Fourierdeskriptoren, nur um den Umfang möglichst genau zu berechnen. Das erstaunt mich ein wenig.
-
Gregor schrieb:
EDIT: @Threadersteller: Dreh mal die Quadrate um 45° und sag, was Du dann kriegst.
Quadrat mit Kantenlänge 500 Pixel => Umfang 2000, Circularity 16.
Gedreht in 10° Schritten:
winkel 0
Umfang 1996
Circularity 16winkel 10
Umfang 2205,3868683519
Circularity 19,5403553901618winkel 20
Umfang 2359,66103833159
Circularity 22,3746557840176winkel 30
Umfang 2436,27835406179
Circularity 23,8441479569111winkel 40
Umfang 2435,92510704351
Circularity 23,8371381569166winkel 50
Umfang 2437,09667991876
Circularity 23,8601687533737winkel 60
Umfang 2436,27835406179
Circularity 23,8441479569111winkel 70
Umfang 2359,66103833159
Circularity 22,3746557840176winkel 80
Umfang 2205,3868683519
Circularity 19,5403553901618winkel 90
Umfang 1996
Circularity 16Verdammt nochmal das ganze Verfahren ist in der Form völlig unbrauchbar
-
Kannste mal meinen Vorschlag probieren, nur voll wenige Punkte des Umfangs zu nehmen? Sagen wir mal nur jeden zweiundvierzigsten Punkt?
-
Was du gerade erlebst ist genau der unterschied zwischen punktweiser und gleichmäßiger konvergenz. dein approximierter rand koonvergiert zwar punktweise gegen den kreis, aber nicht gleichmäßig, und daher konvergiert der umfang auch nicht gegen den echten umfang. Mit bel. Liniensegmenten oder auch irgendwelchen polynomen ist es aber möglich den kreis gleichmäßig zu approximieren.
Die Idee von volkard ist doch schonmal nicht schlecht. Evtl. solltest Du die Svhrittweite noch an die lokale Krümmung anpassen.
-
Aaaah ich habs. Jeder n-te Punkt tut es. Genau das was Volkard gleichzeitig geschrieben und auch schon früher vorgeschlagen hat. Hier Ergebnisse für jeden 5. Punkt.
Quadrate. Ideal: Umfang = 2000, Circularity = 16.
winkel 0
Umfang 1993,15298244508
Circularity 15,9543889840994winkel 10
Umfang 2010,20652727901
Circularity 16,2346992343129winkel 20
Umfang 2005,96277396668
Circularity 16,1697333387185winkel 30
Umfang 2022,02948951365
Circularity 16,4249087341382winkel 40
Umfang 2011,21630039606
Circularity 16,2497077736798winkel 50
Umfang 2007,07071474906
Circularity 16,1827229319455winkel 60
Umfang 2021,28393479123
Circularity 16,4127987122534winkel 70
Umfang 2003,07377341062
Circularity 16,1231913689024winkel 80
Umfang 2009,7026554746
Circularity 16,2265615809184winkel 90
Umfang 1993,15298244508
Circularity 15,9543889840994Und Kreise verschiedener Größe.
Ideal: Circularity = 4*Pi = 12,566pixelCount 1227
Umfang 119,75738698811
Circularity 12,3743155636065pixelCount 7511
Umfang 304,845325521225
Circularity 12,6539586726772pixelCount 17805
Umfang 470,681095304744
Circularity 12,6295181984023pixelCount 73931
Umfang 968,24975141415
Circularity 12,7721478302996pixelCount 118713
Umfang 1225,25084538832
Circularity 12,7157425081403Mit der Genauigkeit kann ich leben.
Geschwindigkeit ist auch relevant deswegen verzichte ich vorerst auf Polynome höheren Grades. Aber aus Interesse an der Genauigkeit werde ich es vielleicht mal testweise implementieren.
-
Jester schrieb:
Was du gerade erlebst ist genau der unterschied zwischen punktweiser und gleichmäßiger konvergenz.
Interessante theoretische Erklärung
-
Ok, bitte noch einen Testlauf mit 42 oder 41 statt 5.
-
42 ist zu viel.
Schon 15 hat keine so guten Ergebnisse mehr wie 5 gebracht.
Das Optimum für diese Testdaten scheint zwischen 4 und 10 zu liegen. Das Optimum für meine Realdaten (Kamerabilder) werde ich mit einem geeigneten Satz an Testbildern iterativ bestimmen.Aber Du hattest das richtige Gespür für die Lösung
Quadrate (Umfang = 2000, Circularity = 16), Schrittweite 42
winkel 0
Umfang 1949,74930905663
Circularity 15,2670967914458winkel 10
Umfang 1948,68119450545
Circularity 15,2561334065302winkel 20
Umfang 1936,29591181392
Circularity 15,0660906563606winkel 30
Umfang 1968,19103989357
Circularity 15,5618955337winkel 40
Umfang 1953,54691900362
Circularity 15,331183699432winkel 50
Umfang 1948,99651778647
Circularity 15,2597836576993winkel 60
Umfang 1966,74599756765
Circularity 15,5390528908008winkel 70
Umfang 1936,43263740907
Circularity 15,0682184230171winkel 80
Umfang 1945,63081674964
Circularity 15,2084082612617winkel 90
Umfang 1949,74930905663
Circularity 15,2670967914458Kreise (Ideal: Circularity = 4*Pi = 12,566) , Schrittweite 42
Umfang 96,0266672702513
Circularity 7,95610079985466Umfang 292,796943100463
Circularity 11,673481738695Umfang 442,206151455661
Circularity 11,14763733918Umfang 928,077806371849
Circularity 11,7343198757533Umfang 1189,60240052603
Circularity 11,9865821740134
-
Hi. Kannst Du mal bei dem Quadrat, das Du schrittweise drehst folgendes machen:
Nimm die Variante, bei der Du jeden Punkt betrachtest und gib jeweils die Anzahl der U und G aus. Die würden mich echt interessieren.
EDIT: Wenn Du nur jeden n-ten Punkt nimmst, dann musst Du aufpassen, dass Dein n nicht zu sehr an den Testdaten orientiert ist, die vielleicht nicht sooo viel mit den tatsächlichen Daten zu tun haben. Zum Beispiel wird jeder 42-te Punkt bei sehr großen Kreisen sehr gut funktionieren, aber nicht bei kleineren Kreisen. Bei sehr kleinen Kreisen wirst Du auch mit jedem 5. Punkt Probleme kriegen.
-
Hallo Gregor,
wie oben geschrieben werde ich für einen umfangreichen Satz an Testbildern aus dem Problemfeld ein adäquates n ermitten. Falls es kein solches n gibt, werde ich den Algorithmus variabel gestalten. Oder auf Polynome höherer Ordnung bzw. Splines setzen. Vorerst sieht es allerdings so aus, als würde die Genauigkeit vollkommen ausreichen. Das Problem ist jedenfalls gelöst bzw. die Ursache ist gefunden.
"Nimm die Variante, bei der Du jeden Punkt betrachtest und gib jeweils die Anzahl der U und G aus. Die würden mich echt interessieren."
Ok kann ich machen. Aber wahrscheinlich erst morgen.
-
Gregor schrieb:
Hi. Kannst Du mal bei dem Quadrat, das Du schrittweise drehst folgendes machen:
Nimm die Variante, bei der Du jeden Punkt betrachtest und gib jeweils die Anzahl der U und G aus. Die würden mich echt interessieren.
Ok Gregor, ich habs jetzt noch schnell getestet.
Was schließt Du aus diesen Daten?Quadrat (Ideal: Umfang 2000, Circularity = 16)
Schrittweite 1.
Gerendert mit GDI+ in Schritten von 10° Drehwinkeln.
Zusätzliche Angabe von G (horizontalen oder vertikalen Randschritten) und U (diagonalen Randschritten). Damit ist Umfang = G + sqrt(2)*U.
Außerdem: Die Werte weichen minimal von den Werten des gleichen Tests auf der vorherigen Seite ab. Ich habe die Drehrichtung geändert. Reine Rundungsfehlerwinkel 0
G = 1996
U = 0
Umfang = 1996
Circularity 16winkel 10
G = 1948
U = 182
Umfang 2205,3868683519
Circularity 19,5403553901618winkel 20
G = 1876
U = 342
Umfang 2359,66103833159
Circularity 22,3746557840176winkel 30
G = 1732
U = 498
Umfang 2436,27835406179
Circularity 23,8441479569111winkel 40
G = 1532
U = 640
Umfang 2437,09667991876
Circularity 23,8601687533737winkel 50
G = 1528
U = 642
Umfang 2435,92510704351
Circularity 23,8371381569166winkel 60
G = 1732
U = 498
Umfang 2436,27835406179
Circularity 23,8441479569111winkel 70
G = 1876
U = 342
Umfang 2359,66103833159
Circularity 22,3746557840176winkel 80
G = 1948
U = 182
Umfang 2205,3868683519
Circularity 19,5403553901618winkel 90
G = 1996
U = 0
Umfang 1996
Circularity 16