现在几天,我一直坚持使用PHP进行图像比较的任务。我开始认为PHP不是执行此类任务的语言。
目标:
使用基础,比较新的艺术线条,并返回它们之间的百分比差异。 我尝试了几种方法:比较像素数量的差异(这并没有真正解决线条艺术差异的目标),使所有像素重叠,白色,找到没有透明度的像素/颜色白色并由基座中的非透明像素划分(似乎没有得到正确的数字)
以下是一个例子:
- - - - - - - - 基地 - - - - - - - - - - - Line-Art - - - - - - - -
百分比差异应为54%左右。但是,我尝试过的方法都没有关闭(~5%)
。
我的问题是:可以/如何在PHP中完成? 谢谢!
图片©Aywas.com
答案 0 :(得分:0)
您可以尝试使用ImageMagick函数compareimagechannels(),仅使用黑色通道吗?
编辑:这是基本尝试及其输出。您可以操纵输出数字来计算阈值。图像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
)