PHP .png Lineart Сравнение - PullRequest
0 голосов
/ 15 июля 2011

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

Цель:

Используйте базу, сравните с ней новый штриховой рисунок и верните процентную разницу между ними. Я попробовал несколько способов сделать это: сравнить различия в количестве пикселей (что на самом деле не решает задачу различий между линиями), сделать все пиксели перекрывающимися, белыми и найти пиксели без прозрачности / цвета белый и делим на непрозрачные пиксели в базе (которые, кажется, не получают правильное число)

Вот пример:

Baseenter image description here

- - - - - - - - База - - - - - - - - - - - Line-Art - - - - - - - -

Разница в процентах должна составлять около 54%. Тем не менее, ни один из способов, которые я пробовал, не приблизился (~5%) к этому.

Мой вопрос: можно / как это можно сделать в PHP? Спасибо!

Изображения © Aywas.com

1 Ответ

0 голосов
/ 15 июля 2011

Вы можете попробовать использовать функцию ImageMagick сравнить изображения каналов () , используя только черный канал?

Редактировать: Вот основная попытка и ее вывод. Возможно, вы сможете манипулировать выходными числами, чтобы выяснить ваши пороговые значения. Изображения 1 и 2 - это штриховые рисунки, а изображение 3 - логотип заголовка Google, размер которого увеличен до 200x200.

$img1 = new Imagick('image1.png');
$img2 = new Imagick('image2.png');
$img3 = new Imagick('image3.png');

$diff12 = $img1->compareImageChannels($img2,
             Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR);
$diff13 = $img1->compareImageChannels($img3,
             Imagick::CHANNEL_ALL, Imagick::METRIC_MEANABSOLUTEERROR);

print_r($diff12);
print_r($diff13);

Выход:

Array
(
    [0] => Imagick Object
        (
        )

    [1] => 1512.25385625
)
Array
(
    [0] => Imagick Object
        (
        )

    [1] => 24353.6380375
)
...