Bildmanipulation und anschließende Analyse

Sturmrider

Erfahrenes Mitglied
Hi @all
Ich hoffe ihr könnt mir ein paar Tips zum Thema "Bildanalyse mit PHP" geben.
Was genau ich damit meine beschreibe ich am besten einmal an einem einfachen Beispiel (eine normale Erkärung wäre umständlich!)
Ich zeichne einen Kreis(schwarz, Innenraum weiß) in ein 200x200px großes Bild(Hintergrund weiß) in z.B. Paint und speichere dieses als JPG ab. Nun möchte ich dieses mit PHP einlesen und unter mehreren anderen Bildern (realer Farbaufnahmen), ein Bild das diesem ähnlich ist, herausfinden. (in diesem Fall wäre es z.B. ein Ball auf einem hellen Hintergrund, z.B. Kiselsteinen)

Natürlich weiß ich, dass das nicht so einfach geht. Ich habe mir auch schon gedanken gemacht, wie man soetwas evtl. realisieren kann. (einen sehr guten Denkanstoß gab mir diese Seite: http://www.kreissl.info/diggs/bilderkennung.php )

Wenn man die Originalbilder (also nicht das Gezeichnete) irgendwie so manipulieren könnte, dass die Kontraste/ bzw. noch besser die Kanten hervortreten könnten
(wie z.B. hier: http://www.kreissl.info/diggs/pics/images/bv_sobel.jpg )
Könnte man doch bestimmt die Bilder irgendwie übernander legen und nach extremen Abweichungen suchen (evtl. auch so, dass man vorher einen Abweichungsgrad angeben könnte)

Ich kenne nur leider kaum PHP-Funktionen die mir bei so einer Bildmanipulation und einem anschließenden Vergleich helfen könnten...
Vielleicht ist diese Methode auch sehr ineffektiev?, danke schonmal für eure Hilfe :rolleyes: !

(diesem Thread konnte ich leider nicht so viel brauchbares für meine Frage entnehmen -> http://www.tutorials.de/forum/php/240636-informationen-ueber-bilder-3.html aber er lässt mich auf ein paar gute Antworten hoffen :D )
 
k, also wie man mit PHP ein Bild mit Graustufen-Abstufungen macht weiß ich jetzt:
PHP:
[..]
$anzahlgraustufen = 4;
$xcords = imageSX($image);
$ycords = imageSY($image);
    for ($y=0;$y<$ycords;$y++) {
		for ($x=0;$x<$xcords;$x++) {
			$RGB = imagecolorsforindex($image, imagecolorat($image, $x, $y));
			$helligkeitswert = round(($RGB["red"]+$RGB["green"]+$RGB["blue"]) / (3*256/$anzahlgraustufen),0);
			$end = round( ($helligkeitswert*$step)-1 ,0);
			$newcolor = ImageColorAllocate($im, $end, $end, $end);
			imagesetpixel ($image, $x, $y, $newcolor);
		}
    }
[...]

Jetzt wollte ich eigentlich irgendwie versuchen die Linien bzw. die Kontrastübergänge etwas zu begradigen, um eine klarere Linienführung zu erhalten. Anschließend wollte ich das ganze Bild weiß einfärben und lediglich an den Stellen der Kontrastunterschiede eine Linie verlaufen lassen. So dachte ich mir hätte ich eine relativ gute Linienführung.

Dann käme der zweite Schritt meines "Problems" (und da habe ich leider auch noch keine besonders gute Idee gehabt). Ich wollte zufällig einige Koordinaten der Linien aus dem Paint-Bild wählen und im "KontrastBild" gucken ob an ungefähr dieser Stelle auch eine Linie besteht (dabei kann ich ja die Pixel auf der x und y-Achse ein wenig hin und her schieben um nach einer Übereinstimmung zu suchen).

Ich würde mich wirklich sehr über Antworten, Anregungen, Hilfestellungen, alles was hier zu bieten habt freuen ^^ (ausgenommen den Kommentar, dass man soetwas besser mit anderen Programmiersprachen etc. macht ;) )

Anmerkung: Was ich allerdings nicht verstehe ist, warum dieser Thread in eine andere Kategorie verschoben wurde, hoffentlich finden ihn hier die richtigen Leute :suspekt:
 
Zurück