Сравнение изображений с php + gd

Каков наилучший способ сравнения двух изображений с php и библиотекой Graphic Draw (GD) ?

Это сценарий:

alt text http://img262.imageshack.us/img262/4849/imagecomparison.jpg

У меня есть изображение, и я хочу найти, какое изображение данного набора наиболее похоже на него. Самое похожее изображение – это то же изображение, а не идеальное совпадение пикселей, но одно и то же изображение. Я проиллюстрировал разницу между двумя изображениями с номером один на примере, чтобы просто понять, что я имел в виду.

Несмотря на то, что это не дало последовательных результатов, мой подход заключался в том, чтобы уменьшить изображение до 1px, используя функцию imagecopyresampled и посмотреть, насколько близко значения RGB между изображениями.

Сумма значений вычитания каждого красного, зеленого и синего десятичного эквивалентного значения из красного, зеленого и синего десятичного эквивалентного значения возможного совпадения дала мне индекс различий, который, несмотря на то, что он не работал должным образом, так как не всегда наиболее похожее изображение RGB было целевым изображением, я мог бы использовать для выбора изображения из доступных целей.

Вот пример вывода при сравнении 4 изображений с целевым изображением, в этом случае логотип Apple, который соответствует одному из них, но не совсем то же самое:

Исходное изображение:

http://www.lshtm.ac.uk/its/remote/images/os-apple.png Красный: 222 Зеленый: 226 Синий: 232

По сравнению с:

http://a1.twimg.com/profile_images/571171388/logo-twitter_normal.png Красный: 183 Зеленый: 212 Синий: 212 и индекс сходства 56

http://icons-search.com/img/fasticon/fruits_lnx.zip/fruits_lnx-Icons-48X48-apple.png-48×48.png Красный: 117 Зеленый: 028 Синий: 028 и индекс несходства 530

http://www.1sd.org/wp-content/uploads/2008/10/48×48-apple.png Красный: 218 Зеленый: 221 Синий: 221 и индекс несходства 13 Соответствует Правильно.

Красный: 061 Зеленый: 063 Синий: 063 и индекс несходства 491

Может даже не быть лучше с лучшими результатами, чем то, что я уже получаю, и я трачу свое время здесь, но поскольку, похоже, много опытных программистов php, я думаю, вы можете указать мне в правильных направлениях, как улучшить это.

Я открыт для других библиотек изображений, таких как iMagick , Gmagick или Cairo для php, но я бы предпочел не использовать другие языки, кроме php.

Заранее спасибо.

Я бы подумал, что ваш подход кажется разумным, но уменьшение всего изображения до размера 1×1 пикселей, вероятно, слишком далеко.

Однако, если вы конвертировали каждое изображение в один размер и затем вычисляли средний цвет в каждом из 16×16 (или 32×32, 64×64 и т. Д. В зависимости от того, сколько времени / мощности обработки вы хотите использовать), вы должны иметь возможность сформировать какой-то вид разумного (-иш) сравнения.

Я бы предложил, например, middaparka, что вы не можете использовать только один пиксельный образ, потому что вы теряете всю пространственную информацию. Снижение дискретизации до 16×16 (или 32×32 и т. Д.), Несомненно, обеспечит лучшие результаты.

Тогда это также зависит от того, важна ли информация о цвете или нет. Насколько я понимаю, вы могли бы обойтись без него и вычислить изображение на уровне серого, начиная с вашего цветного изображения (например, яркости) и вычислить кросс-корреляцию. Если, как вы сказали, есть несколько изображений, которые точно соответствуют (за исключением информации о цвете), это должно дать вам довольно хорошую надежность.

Используя методы middparka, вы можете преобразовать каждое изображение в последовательность числовых значений, а затем использовать алгоритм Левенштейна для поиска ближайшего соответствия.