我比较了2张图片,其中分别填充了gray.jpg和red.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]);
答案 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
同样,对于所有像素上的所有颜色通道,您将进入最后一步。
希望有帮助。