首页 > 解决方案 > 使用 ImageMagick 使用图像数据库比较图像?

问题描述

我知道我可以使用 PHP中的库函数(也可以在其他几种编程语言中使用)来比较两个图像(检查它们在视觉上是否相同,而不是检查它们的文件格式、EXIF 等)。compareImages( Imagick $compare , int $metric )ImageMagick

在 PHP 中比较 2 个图像的示例代码:

<?php

$image1 = new imagick("image1.png");
$image2 = new imagick("image2.png");
// TODO: have to resize 2 images to same dimension first
$result = $image1->compareImages($image2, Imagick::METRIC_MEANSQUAREERROR);
$result[0]->setImageFormat("png");

header("Content-Type: image/png");
echo $result[0]; // display the result
// TODO: Add exception handling
?>

但是要比较成千上万的图像,这个功能似乎效率低下,因为它只能一张一张地比较。有没有什么功能可以用来制作图像的指纹(类似的东西),以便我可以轻松地在数据库中搜索?

我能想到的方法:

  1. 将图像转换为 Base64 字符串
  2. 从每张图像中提取几个样本像素,将颜色存储在数据库中(但这种方法不准确)
  3. 使用图像识别库(类似于机器学习)为每张图像添加一些标签,然后按标签搜索(这种方法也不准确)
  4. (还要别的吗?)

欢迎所有建议。

ps编程语言不一定是PHP。

标签: phpimagemagick

解决方案


您可以使用该getImageSignature函数,该函数将返回一个包含文件 SHA-256 哈希值的字符串。

因此,要么遍历所有图像并将图像签名添加到您的图像数据库中,要么只是在您执行的每个比较中添加签名。

希望有帮助。


推荐阅读