Filter "SearchColorPattern"

Funktion

Dieses Filter ist das Herzstück von AutoGamer, es soll Spielfiguren in 3D-Szenerien erkennen. Es berücksichtigt nicht die Gestalt einer Figur, da diese sich ja ständig ändert (durch Gehen, Kämpfen, Bild-Zoom, Bild-Rotation). Zur Objekterkennung wird stattdessen die Farbzusammensetzung analysiert. Der Catalog muss die Farbrelevanzen und das Farbhistogramm für alle Figuren berechnet haben.

Die Abtastung des Bildes erfolgt blockweise, für jeden Pixelblock wird die am besten passende Figur gefunden.Es wird ein Farbhistogramm der Pixel im Block berechnet, und mit den Farbhistogrammen der Figuren im Catalog verglichen.

Farben aus dem Hintergrund werden erkannt und nicht dem Farbhistogramm der Figur zugeordnet. Dazu müssen
1. Bilder des Hintergrunds im Catalog eingetragen und mit “Group=Background” markiert sein.
2. Der Hintergrund im Block aus Flächen gleicher Palettenfarben bestehen, die grösser sind als die grösste Zone von Hintergrundsfarben im GameObject.

Display:

Es wird das Ausgangbild angezeigt, die erkannten Figuren sind durch farbige und numerierte Rechtecke markiert. Die Markerfarbe wurde vom Catalog automatisch berechnet.

Parameters:

BlockSize

Info:

Kantenlänge der Pixelblöcke Sollte so eingestellt werden, dass eine Figur ungefähr in einen Block passt. Wenn zu gross, erscheinen mehrere Figuren in einem Block, und der Mustererkenner arbeitet mit der Summe der Histogramme beider Figuren -> Fehler!
Wenn zu klein, wird eine Figur durch die Blöcke in mehrere Segmente zerschnitten. Dann wird sie entweder als mehrere Figuren detektiert, oder die Segmente liefern nicht genug Pixel und sie wird gar nicht erkannt.

Datentyp:

integer

Default:

keiner.

Beispiel:

“30” -> das Bild wird in Pixelquadrate von 30*30 Pixeln aufgeteilt.

Oversampling

Info:

Einstellung, wie oft das Bild mit der Blockstruktur abgetastet wird. Damit Figuren durch Blockgrenzen nicht bis zur Unkenntlichkeit zerteilt werden, kann das Bild mehrfach mit einem jeweils verschobenen Blockraster abgetastet werden. Erlaub sind 3 Muster: OverSampling = 1, 2 und 4.

Bei Mehrfachabtastung (2 oder 4) sollte “Merge” gesetzt sein, sonst wird dasselbe Gameobjekte sehr oft als verschieden detektiert.

Datentyp:

1, 2 oder 4.

Default:

1

Beispiel:

2: Das Bild wird mit 2 gegeneinander verschobenen Raster mit Maschenbreite “BlockSize*Blocksize” abgetastet.

GameObjectList

Info:

Liste von GameObject-Namen, die erkannt werden sollen. Wenn leer, werden alle GameObejcts mit “Recognize=1” erkannt.
Das Script kann hier angeben, was gerade erkannt werden soll. Der Sinn ist einfach die Rechenzeit-Optimierung: je weniger Objekte erkannt werden müssen, desto besser.
Achtung: wenn eine im Bild vorkommende Figur ausgeschlossen wird, wird vielleicht stattdessen eine ähnliche aussehende andere Figur erkannt. Die Logik ist also nicht: “erkenne alle Figuren, aber zeige nicht alle an”, sondern “suche nach der besten Figur aus der Liste”.

Datentyp:

Comma separeted list of names Namen mit Spaces in “..” einschliessen.

Default:

leer -> alle Objekte im Catalog mit “Recognize=!” werden erkannt

Beispiel:

“mysterious old man”,drunken_dwarf,sandwich_lady, ...”, wenn dieses Filter die bekannten Random-events aus RuneScape erkennen soll.

MinimalColorRating

Info:

Angabe über maximale Grad von “Verschiedenheit” beim Vergleich des GAmeObject-Farb-Relevanz-Histogramms mit dem aktuellen Bildblock..Synthetischer Wert ohne anschauliche Bedeutung.

Je höher der Wert ist, des eher wird der Inhalt eines Bildblocks als GO erkannt. Bei hohen Werte werden mehr GOs detektiert, bei niedrigen Werten weniger.
Der Wert muss je nach Anforderung des Spielskriptes eingestellt werden.

Datentyp:

double

Default:

Für RuneScape ca. 300. Mehr für lockere Beurteilung, wenn z.B. ein GO in einer farblich leicht veränderten Darstellung nicht mehr erkannt wird. Weniger, wenn das GO mit anderen GOs oder dem Bildhintergrund verwechselt wird.

Beispiel:

 

ObjectSizeTolerance

Info:

Angabe über erlaubte Grössen-Abweichungen von gefundenen GameObjects.
Die Soll-Grösse eines GO in Pixeln (“gopixelsize”) wird aus seiner Angabe “Size_Meter” und dem Szeneparameter “Resolution_PixelPerMeter” berechnet.
Die Ist-Grösse nach Mustererkennung (“goimagepixels”) berechnet sich als die Summe der farblich passenden Pixeln.
Damit eine GameObject detektiert wird, muss gelten:
gopixelsize * gopixelsize / ObjectSizeTolerance < goimagepixels  < gopixelsize * gopixelsize * ObjectSizeTolerance.

Hat auch Einfluss auf die Erkennung lokaler Hintergrundsfarben im Block: Es werden nur Farbflächen als Hintergrund erkannt, die grösser als ObjectSizeTolerance * <grösste Hintegrundsfläche in GO> sind

Datentyp:

double, >= 1

Default:

2. Mehr, wenn kleine Objekte fälschlicherweise als GOs gefunden werden. Kleiner, wenn dargestellte GOs nicht erkannt werden. Weniger, wenn lokaler Hintergrund schlecht erkannt wird.
Weniger, wenn Flächen aus texturiertem Hintergrund mit GameObjecten verwechselt werden.
Mehr, wenn zuviele Figuren durch die Zerstückelung durch Blockgrenzen verloren gehen (geteilte Figur ist kleinere Figur)

Beispiel:

 

Resolution_PixelPerMeter

Info:

Geschätzter Massstab der Bildansicht: Wieviele Bildpixel ergeben einen Meter der “wirklichen” Welt? Dient zur Beurteilung, wie gross GameObjects dargestellt werden, deren “wirkliche” Grösse mit dem Parameter “Size_Meter” angegeben wurde.

Bei perspektivischen 3D-Ansichten hängt dieser Parameter stark vom gewählten Zoom-Faktor und der Entfernung der Spielfiguren vom Betrachter ab. Bei starker Perspektive kann mit “Resolution_PixelPerMeter” kann grob die Z-Lage der zu erkennenden Objekte eingestellt werden. Man kann so zB die Erkennung weitentfernter (= optisch kleiner) Spielfiguren abschalten.

Datentyp:

double

Default:

Am besten ein bekanntes GameObject im Bild finden und dessen Grösse in Pixel feststellen. Wert = Wurzel(Länge*Breite)

Beispiel:

 

Merge

Info:

Durch die Rasterung der Blockstruktur kommt es oft vor, dass ein GameObject in zwei Segmente zerlegt wird, die getrennt voneinander im Ergebnis auftauchen.
Wenn “Merge=True” ist, werden GameObjects, dern Extents an einerderstossen oder einander überlappen, zu einem GameObjekt verschmolzen. Dadurch wird die Zahl der Gameobjects gesenkt..

Der nötige Grad an Überlappung hängt vom Parameter “Oversampling” ab. bei 1 (kein Oversampling) müssen die Extents einander berühren. Bei 2 und 4fach Abtastung müssen die Extents um “BlockSize/4” überlappen. So wird der Effekt gedämpft, das mehrere dicht beieinander stehende GameObejcts als ein riesiges Objekt detektiert werden.
 

Datentyp:

Boolean

Default:

false

Beispiel:

 

 

Results:

Parameter 1:

Datentyp:

Default:

Rechenzeitbedarf:

Die CPU-Last wächst ...

  • linear mit der Anzahl der zu entdeckenden Figuren.
  • linear mit der Anzahl der Blöcke
  • linear mit der Grösse der Blöcke

Bugs:

Die Aufteilung in starre Pixelblöcke ist blöd,das Blockraster zerreisst die Figuren. Aber alle anderen Verfarhen zum erkennen von zusammengehörigen Pixelwolken sind nicht schnell lauffähig.

 

[Referenz] [GameObject-Parameter] [Filter "Generic"] [Filter "Capture"] [Filter "Preprocess"] [Filter "SearchImage"] [Filter "SearchColorPattern"] [Filter "RunescapeCompass"] [JScript-Interface] [Verzeichnisstruktur]