Was ist der beste Ansatz, um zwei Bilder mit PHP und der Graphic Draw (GD) Bibliothek zu vergleichen? >?
Dies ist das Szenario:
Alternativtext http://img262.imageshack.us/img262/4849/imagecomparison.jpg
Ich habe ein Bild, und ich möchte herausfinden, welches Bild eines bestimmten Sets ihm am ähnlichsten ist. Das ähnlichste Bild ist in der Tat das gleiche Bild, nicht pixelgenau, aber das gleiche Bild. Ich habe den Unterschied zwischen den beiden Bildern mit der Nummer eins in dem Beispiel dramatisiert, nur um das Verständnis dessen, was ich meinte, zu erleichtern.
Obwohl es keine konsistenten Ergebnisse brachte, bestand mein Ansatz darin, die Bilder auf 1px zu reduzieren, indem ich imagecopyresampled
Die Summe der Werte, die jeden roten, grünen und blauen dezimalen Äquivalenzwert von dem Rot-, Grün- und Blau-Dezimaläquivalentwert der möglichen Übereinstimmung abzogen, gab mir einen Unähnlichkeitsindex, der, obwohl er seither nicht wie erwartet funktionierte nicht immer Das am meisten RGB-ähnliche Bild war das Zielbild, mit dem ich ein Bild aus den verfügbaren Zielen auswählen könnte.
Hier ist ein Beispiel der Ausgabe, wenn 4 Bilder mit einem Zielbild verglichen werden, in diesem Fall das Apple-Logo, das mit einem von ihnen übereinstimmt, aber nicht genau dasselbe ist:
Originalbild:
Ссылка Rot: 222 Grün: 226 Blau: 232
Gegenüber:
Ссылка Rot: 183 Grün: 212 Blau: 212 und ein Ähnlichkeitsindex von 56
Ссылка Rot: 117 Grün: 028 Blau: 028 und ein Unähnlichkeitsindex 530
Ссылка Rot: 218 Grün: 221 Blau: 221 und ein Unähnlichkeitsindex 13 Richtig abgestimmt.
Rot: 061 Grün: 063 Blau: 063 und ein Unähnlichkeitsindex 491
Vielleicht ist es gar nicht besser machbar mit besseren Ergebnissen als das, was ich schon bekomme und ich verschwende meine Zeit hier, aber da es eine Menge erfahrener PHP-Programmierer zu geben scheint, kann man mich in die richtige Richtung lenken wie man das verbessert.
Ich bin offen für andere Bildbibliotheken wie iMagick , Gmagick oder Kairo für PHP, aber ich würde es vorziehen, andere Sprachen als PHP zu verwenden.
Vielen Dank im Voraus.
Ich hätte gedacht, dass Ihr Ansatz vernünftig erscheint, aber ein ganzes Bild auf 1 x 1 Pixel zu verkleinern, ist wahrscheinlich ein Schritt zu weit.
Wenn Sie jedoch jedes Bild auf die gleiche Größe konvertiert haben und dann die durchschnittliche Farbe in jedem 16x16 (oder 32x32, 64x64 usw., abhängig von der Verarbeitungszeit / Leistung, die Sie verwenden möchten) berechnet haben, sollten Sie in der Lage sein eine Art vernünftigen (-ischen) Vergleich zu bilden.
Ich würde vorschlagen, wie Middaparka, dass Sie nicht auf ein 1-Pixel-Bild herunterrechnen, weil Sie alle räumlichen Informationen verlieren. Downsampling zu 16x16 (oder 32x32, etc.) würde sicherlich bessere Ergebnisse liefern.
Dann kommt es auch darauf an, ob Farbinformationen für Sie wichtig sind oder nicht. Von dem, was ich verstehe, könnten Sie tatsächlich darauf verzichten und ein Grauwertbild ausgehend von Ihrem Farbbild (z. B. Luma) berechnen und die Kreuzkorrelation berechnen. Wenn, wie Sie sagten, es ein paar Bilder gibt, die genau übereinstimmen (außer Farbinformationen), sollte Ihnen dies eine ziemlich gute Zuverlässigkeit geben.
Mit Middparkas Methoden können Sie jedes Bild in eine Folge numerischer Werte umwandeln und dann Levenshtein verwenden Algorithmus um die beste Übereinstimmung zu finden.
Tags und Links php image image-processing gd similarity