imagick在2个不同的图像上的compareImages仅给出0.21的结果

时间:2018-10-05 13:30:51

标签: php imagick

我比较了2张图片,其中分别填充了gray.jpgred.jpg不同的颜色。两者均为500x500。结果给了我差-0.21。为什么这么低?我预期的结果-1(完全不同的图像)。上面的图片-用于测试。我需要比较具有不同尺寸的jpg图像。

$image1 = new imagick();
$image2 = new imagick();     

$image1->readImage("gray.jpg");
$image2->readImage("red.jpg");   

$result = $image2->compareImages($image1, Imagick::METRIC_MEANSQUAREERROR); 
var_dump($result[1]);

1 个答案:

答案 0 :(得分:0)

该指标使用Mean Squared Error测量数学差异。

  

我期望的结果-1张(完全不同的图像)。

不是。达到1的唯一方法是将实心黑色图像(零值:0)与实心白色图像(量子值:2 16 )进行比较。 MSE指标不是真实的布尔值,而是更多关于两个图像有多远的估计。

  

0.21。为什么这么低?

也许回答这个问题的最好方法是快速遍历所涉及的数学。我将忽略量子值(保持在0 ... 255范围内),并舍入到四舍五入。幸运的是,所提供的两个图像都是纯色,因此我们只需要在第一个像素上进行计算即可。

给出两个像素...

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.2/d3.min.js"></script>

查找每个通道之间的距离

     | R   | G   | B   |
     +-----+-----+-----+
red  | 182 |   0 |   1 | 
     +-----+-----+-----+
gray | 142 | 142 | 142 |

转换为两倍并在0.0到1.0之间缩放

     | R   | G   | B   |
     +-----+-----+-----+
dist |  40 | 142 | 141 | 

平方

double | 0.156 | 0.556 | 0.552

最后找到所有颜色通道的平均值

square | 0.024 | 0.309 | 0.305

同样,对于所有像素上的所有颜色通道,您将进入最后一步。

希望有帮助。