Wie erkennt man bekannte Muster auf einer schachbrettartigen Karte?



  • Ich versuche mal meine Frage anhand eines Schachspieles als Beispiel zu präzisieren.

    Mal angenommen ich habe ein Schachspiel auf dem Computer und die einzige Möglichkeit die Spielfigurerenpositionen und deren Figurentyp auszulesen wäre einen Screenshot zu erstellen und dann die Positionen und den Figurentyp der einzelnen Schachfiguren via Bilderkennung zu erkennen.
    Wie würde man so etwas am besten machen?

    Gegeben sei hier noch, dass die Schachfiguren von grafisch komplexer Natur seien (also mehrere Pixel, viele Farben, komplexe Formen) und Sprites sind. Diese werden dann gemäß den Spielregeln auf dem Schachbrett verteilt.
    Was bei der Mustererkennung der Schachfigurpositionen und Typ der Schachfiguren nicht erlaubt sei, ist die fertigen Sprites zu nutzen.
    Also einen Sprite durch verschieben mit dem Screenshot Deckungsgleich zu bringen um dann die Position und den Figurentyp an Schbrettpossition A1 zu erkenne ist also nicht erlaubt.

    Prinzipiell darf man also nur den Screenshot und vielleicht bestenfalls Hashwerte oder Positionen und die Farbe einiger weniger Pixel der Sprites nutzen.

    Welche bekannte Verfahren gibt es für so eine Aufgabe?
    Womit löst man das am Besten?



  • Ich hab die "Regeln" noch nicht ganz verstanden. Du darfst schon irgendwie definieren, wie eine Spielfigur ausschaut, du darfst dann nur nicht einen 1:1 Bildvergleich von dem Ausschnitt machen?
    Grundsätzlich kannst du ohne weitere Informationen nicht erkennen, was für eine Figur ein Bild darstellt. Damit haben auch Menschen Probleme. Ich konnte z.B. noch nie 3D Schach spielen, weil ich ständig alle Figuren durcheinander gebracht habe. Ich brauche deutlich unterscheidbare 2D Figuren. Ein Programm kann also sicher nicht raten, ob das ein Läufer, ein Bauer oder eine Dame ist.
    Wenn du also Beispiele für die Firguren hinterlegen kannst, könnte man das schon probieren... Mit Farben würde ich gar nicht arbeiten, in der Bildverarbeitung versucht man meist, mit mit Schwarzweiß oder Graustufen Bildern zu arbeiten. Erstmal die einzelnen Figuren finden, dabei würde ich versuchen auszunutzen, das Schachbrettmuster auszunutzen. Dann vielleicht die Boundingboxen der Figuren bestimmen und die relativen Größen mit denen in deiner Datenbank vergleichen, vielleicht reicht das schon. Wenn nicht, vielleicht die gefundene Boundingbox in paar Abschnitte unterteilen und untersuchen, wieviel Prozent von dem jeweiligen Abschnitt ausgefüllt sind.
    Das sind nur paar spontante Überlegungen, würde mich auch mal interessieren, ob es sich hier schon mal jemand mehr Gedanken dazu gemacht hat.



  • Okay, warum ich keine Muster verwenden möchte ist eher rechtlicher Natur.
    Sagen wir mal die Sprites wären urheberrechtlich geschützt und man könnte sie auch nicht einzeln auf der Festplatte auslesen, weil man nur ein komplettes Bild von einem Server bekommt.

    Man hat also nur den Screenshot.
    Die Rechtecke und Boundingboxen könnte man nun natürlich versuchen auszuloten.
    Daran habe ich auch schon gedacht.

    Aber der nächste Schritt wäre ja jetzt nun die Figuren zu erkennen.

    Stell dir vor, die Figuren würden aussehen wie bei History Line 1942 oder einem neueren Panzer General, nur eben wesentlich mehr Pixel und Farben pro Figur und das halt alles auf einer rechteckigen Karte:

    http://en.wikipedia.org/wiki/File:History-line-gameplay-screen.gif

    EDIT:
    Oder besseres Beispiel, Figuren wie in Civilization 3.

    Wie kann man dann Figur A von Figur B unterscheiden und die jeweiligen Figuren auf der entsprechenden Position identifizieren?



  • Noch was bezüglich der Farben.

    An die Farben dachte ich eben, weil die eine große Hilfe sind, wenn man die Figuren vom Hintergrund unterscheiden will.

    Mit einem Farbfilter könnte ich also z.B. hergehen und erstmal alle grünen Farben ausfiltern, dann würden zu einem großen Teil z.B. die Figuren zurückbleiben, der Hintergrund wäre dann aber ausgefiltert.



    1. regions of interest im bild finden (zum beispiel schachfeld schätzen und verdeckte stellen als interessante regionen extrahieren)

    2. Regionen klassifizieren. Dazu verwendest du am einfachsten irgendein überwachtes lernverfahren und fütterst es mit großen mengen von relevanten bildausschnitten. Support-vektor-maschinen bieten sich vermutlich an. Idealerweise überlegst du dir gute merkmale dafûr, aber zur not tuns auch die bildausschnitte selbst, möglicherweise entsprechend normalisiert und binarisiert.

    3. Schätzungen aus demv origen schritt mit spielregeln abgleichen und ggf. Teile verwerfen/mit regelwissen verbessern.



  • Jester schrieb:

    1. regions of interest im bild finden (zum beispiel schachfeld schätzen und verdeckte stellen als interessante regionen extrahieren)

    Das wäre noch das einfachste.

    1. Regionen klassifizieren. Dazu verwendest du am einfachsten irgendein überwachtes lernverfahren und fütterst es mit großen mengen von relevanten bildausschnitten. Support-vektor-maschinen bieten sich vermutlich an. Idealerweise überlegst du dir gute merkmale dafûr, aber zur not tuns auch die bildausschnitte selbst, möglicherweise entsprechend normalisiert und binarisiert.

    2. Schätzungen aus demv origen schritt mit spielregeln abgleichen und ggf. Teile verwerfen/mit regelwissen verbessern.

    Hier ist das Problem nur, ich habe nur einen Screenshot und zeitlich unterschiedliche Screenshots mit anderen Stellungen kann ich nicht verwenden, weil dann die ganze Sache sinnfrei wäre.
    Man muss die Spielzüge die man machen möchte, nämlich vor dem auswürfeln festlegen, danach ist es zu spät.



  • Hä?

    Du trainierst das system natürlich mit daten bevor du es einsetzt.


Anmelden zum Antworten