Kanten transformationsinvariant speichern und vergleichen



  • Hallo!

    Zum Vergleich zweier Tiermuster möchte ich deren Kanten verwenden.
    Die 2-farbigen Muster habe ich also mit einem Schwellwertfilter bearbeitet, der alles zu schwazrz-weiß macht.
    Danach lasse ich einen Sobelfilter drüber laufen und bekomme demzufolge die Kanten in dem Muster zu sehen.
    Hier: www.maxis-house.de/kanten.jpg
    Aus diesem Bild könnte ich jetzt eine lange Kante auswählen. Das ist ja nciht so schwierig, schaff ich schon.
    Mein Problem ist jetzt allerdings: Wie speichert man so eine Kante am besten? Also wie repräsentiere ich die Kante in meinem Programm? Pixelweise ist ja da kein guter Ansatz. Hab schon überlegt, Die Kante in einzelne Punkte zu teilen und mit Geraden zu verbinden und die Kante dann also als Punktliste zu speichern. Das ist aber auch kein guter Ansatz finde ich. also, wie könnte man eine Kante dieser Form am besten intern darstellen?
    Und wenn ich jetzt zwei solche Kanten habe, welche Methode bietet sich an, diese zwei Kanten auf Ähnlichkeit zu prüfen?
    Das Problem ist, dass der vergleich Transformationsinvariant sein muss, da die tiere ja ncih immer gerade liegen sondern sich auch mal biegen können usw. Zwei Kanten müssen auch als sehr ähnlich erkannt werden (wenn sie gleich sind natürlich), wenn die eine gedreht, gestaucht in x-Richtung und gestreckt in y-Richtung ist. Die Transformation ist aber nicht gleichmäßig über die gesamte Kante verteilt, sondern ist in unterschiedlichen Teilen unterschiedlich. zB kann die Kante am Anfang normal sein, in der Mitte ist sie int x-richtung gestaucht und am ende ist sie wieder normal. Die Form der Kante bleibt dabei ja erhalten, ein Mensch würde beide Kanten noch als gleich erkennen. Nun, wie könnte also ein Computer sone zwei Kanten vergleichen?

    Grüße, Maxi



  • Wenn Du diese ganzen Transformationen in Betracht ziehen musst, bleibt Dir vermutlich nur noch die Topologie als sinnvoller Vergleich. Mein Ansatz wäre, die Informationen, die Du so über das Bild hast (nicht nur die Kanten), auf eine Topologische Karte zu reduzieren und diese Karten dann zu vergleichen. ...mit noch einigen qualitativen Zusatzinformationen.



  • hm... also wenn ich das mit der topologie richtig verstanden habe, dann haben ja eine gebogene Kante und eine Gerade die selbe Topologie (Tasse mit Torus und Henekl sind auch gleich). Damit wären ja alle Kanten sozusagen gleich.

    Welche anderen Informationen meinst du noch zB? Farbe ist unwichtig. Eigentlich denke ich, dass lediglich dieses Bild ausreichen müsste um ein Muster mit anderen zu vergleichen.

    Könnte man etwas mehr erreichen, wenn man die Transformationen einschränken würde? Ich denke drehung und translation ist ncih so kompliziert. Aber wenn man zB die Skalierung auf den Faktor 0.9 bis 1.1 oder so einschränken würde, würde man dann bessere MEthoden anwenden können.
    Oder ich hab das mit der Topologie nicht richtig verstanden, vielleicht kannstes nochn bisschen besser erklären.



  • Maxi schrieb:

    hm... also wenn ich das mit der topologie richtig verstanden habe, dann haben ja eine gebogene Kante und eine Gerade die selbe Topologie (Tasse mit Torus und Henekl sind auch gleich). Damit wären ja alle Kanten sozusagen gleich.

    Ja. Wenn die Tiere sich biegen können, wie Du es angedeutet hast, dann kann dabei auch eine Gerade krumm werden. Insofern ist es schon passend, da keine Unterscheidung vorzunehmen.



  • naja... die tiere können sich natürlich biegen, aber nicht so, dass eine so dolle geschlängelte Kante zu einer geraden wird oder eine gerade (wirklich gerade haben sie eigentlich auch nicht) zu so einer schlängellinie wird.
    Hm, schade... ich dachte es ist doch nich so schwer, zwei solche Kanten zu vergleichen... aber da hab ich mich whol getäuscht



  • Du könntest das Bild des Tiers vielleicht skelettieren und dann jeweils die Topologie des Skeletts vergleichen. Ich könnte mir vorstellen, dass da genug Informationen drinstecken, um unterschiedliche Exemplare leicht auseinanderhalten zu können.



  • ich nehme an, mit skelettieren meinst du wie bei den fingerabdrücken die liniendicke auf 1 pixel zu reduzieren, oder?

    Wenn ich eine Topologie vergleichen soll, also ein Netz (oder?), dann brauche ich dafür Knoten und Kanten. Was sollen denn dann deiner Meinung nach die Knoten sein? Es gibt ja keine abzweigungen im Muster, es sind einfache Linien ohne verzweigungen. Was sollen denn dann die Knoten sein?
    die topologie dieses Skeletts wäre doch dann aber für fast alle Muster folgende weil alle in etwa so sind: zwei knoten (oder so) und dazwischen ein Kreis. und davon mehrere netze, weil es ja mehrere flecken gibt.
    Es gibt keine Verzweigungen, weil das Muster immer mit zwei Farben ausfüllbar ist (die tiere sehen auch so aus).

    mir is grad eingefallen, dass es vielleicht doch eine Methode gibt, die transformationen aller Muster zu normalisieren, also alle Transformtionen rückgängig zu machen. wenn man davon ausgeht, dass gleiche kanten gleich aussehen, was könnten sich dann für möglichkeiten ergeben?
    zZ vergleiche ich die Muster pixelweise aber diese Vergleiche dauern ziemlich lange, das is nich so toll. deswegen such ich ine bssere Methode


Anmelden zum Antworten