Php png Lineart比较

Php png Lineart比较,php,gd,Php,Gd,几天来,我一直在做一项涉及使用PHP进行图像比较的任务。我开始认为PHP不是完成这类任务的语言 目标: 使用一个基准,将一个新的线条艺术与之进行比较,并返回它们之间的百分比差异。 我尝试了两种方法:比较像素数的差异(这并不能真正解决线条艺术差异的目标),使所有重叠的像素变为白色,然后找到没有透明度的像素/白色,然后除以底部的不透明像素(似乎没有得到正确的数字) 这里有一个例子: --基础线艺术-- 百分比差异应该在54%左右。然而,我尝试过的所有方法都没有接近这一点(~5%) 我的问题是:这可

几天来,我一直在做一项涉及使用PHP进行图像比较的任务。我开始认为PHP不是完成这类任务的语言

目标:

使用一个基准,将一个新的线条艺术与之进行比较,并返回它们之间的百分比差异。 我尝试了两种方法:比较像素数的差异(这并不能真正解决线条艺术差异的目标),使所有重叠的像素变为白色,然后找到没有透明度的像素/白色,然后除以底部的不透明像素(似乎没有得到正确的数字)

这里有一个例子:

--基础线艺术--

百分比差异应该在54%左右。然而,我尝试过的所有方法都没有接近这一点(~5%)

我的问题是:这可以/如何在PHP中实现? 谢谢


Images©Aywas.com

您可以尝试使用ImageMagick功能,只使用黑色通道吗

编辑:这里是一个基本尝试及其输出。您可能能够操纵输出数字来计算阈值。图1和图2是线条艺术,图3是调整大小为200x200的Google标题徽标

$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
)

用PHP开箱即用绝对不行。@brady:PHP支持和。。。“所以这是可能的。”贾斯汀,我不认为他在试图达到错误的边缘。我在许多项目中使用过GD,但我无法理解它的准确性。我想看到有人对如何做到这一点感到惊讶。我不得不说,我对PHP+图形设计相当悲观