如何在PHP中检测类似的图像?

时间:2011-01-05 09:36:04

标签: php image image-processing similarity

我有各种分辨率的相同图片的文件,适用于移动设备,个人电脑,掌上电脑等各种设备。现在我试图在页面中只显示独特的图片,但我不知道该怎么做。如果我在第一时间维护数据库,我本可以避免这种情况,但我没有。我需要你帮助检测最大的独特图片。

4 个答案:

答案 0 :(得分:14)

在您的服务器中安装gd2和lib puzzle

Lib谜题令人惊讶且易于玩耍。检查此代码段

<?php
# Compute signatures for two images
$cvec1 = puzzle_fill_cvec_from_file('img1.jpg');
$cvec2 = puzzle_fill_cvec_from_file('img2.jpg');

# Compute the distance between both signatures
$d = puzzle_vector_normalized_distance($cvec1, $cvec2);

# Are pictures similar?
if ($d < PUZZLE_CVEC_SIMILARITY_LOWER_THRESHOLD) {
  echo "Pictures are looking similar\n";
} else {
  echo "Pictures are different, distance=$d\n";
}

# Compress the signatures for database storage
$compress_cvec1 = puzzle_compress_cvec($cvec1);
$compress_cvec2 = puzzle_compress_cvec($cvec2);

答案 1 :(得分:2)

嗯,即使你有很多算法可以做到这一点,我相信手动执行它仍然会更快。下载所有图像将它们提供给像windows live photo gallery或任何其他可以匹配类似图像的软件。 这将花费您几个小时,但实现图像匹配算法可能需要更多。之后,您可以花费额外的时间来修改当前系统,以便将所有内容存储在数据库中。 解决问题的原因,而不是症状。

答案 2 :(得分:0)

首先,您的问题几乎与PHP无关,因此我删除了该标记并添加了更多相关标记。


聪明地做它不需要NxN比较。你可以使用很多启发式方法,但首先我想问你:

  1. 一张图片的所有副本是否都相互调整大小(是否进行了一些裁剪 - 将裁剪后的图像与原始图像匹配可能会更加困难和耗时)?

  2. 是否使用同一工具生成(调整大小)所有图像?

  3. 您用于调整大小的参数怎么样?例如,是否所有图片都以相同的分辨率在PSP上显示?

  4. 您对有多少独特图像的估计是什么(即平均每张图片有多少份?)

  5. 您是否已经完成了任何类别的分类。例如,所有移动图像都在单独的文件夹中(或者与PC图像的分辨率不同)?仅这一点就可以减少 lot 的比较次数,即使你做其他事情也是如此。

  6. 非常高级别的提示,说明为什么不需要进行NxN比较:您可以设计许多不同的近似哈希值(例如,高/低频率jpeg系数的分布)以及将“潜在”类似图像组合在一起。这可以将所需的比较次数减少10-100次甚至更多,这取决于所使用的启发式和数据集的质量。甚至可以对部分图像进行散列。如果你使用正确的技术,30000不是一个非常大的数字。

答案 3 :(得分:-1)

您应该检查2个图像中哪个最小,取大小,然后仅比较矩形尺寸内的像素。