我有很多相同图片的不同分辨率文件,适用于各种设备,如手机、电脑、PSP等。现在我想在页面上仅显示唯一的图片,但我不知道怎么做。如果一开始就维护了数据库,我本可以避免这个问题,但是我没有。我需要你的帮助来检测最大的独特图片。
我有很多相同图片的不同分辨率文件,适用于各种设备,如手机、电脑、PSP等。现在我想在页面上仅显示唯一的图片,但我不知道怎么做。如果一开始就维护了数据库,我本可以避免这个问题,但是我没有。我需要你的帮助来检测最大的独特图片。
安装gd2和lib puzzle到您的服务器。
Lib puzzle非常惊人且易于使用。查看这个片段:
<?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);
虽然有很多算法可以做到这一点,但我认为手动操作仍然会更快。下载所有图片并将它们输入到类似于Windows Live照片库或其他能够匹配相似图像的软件中。这可能需要几个小时,但实施图像匹配算法可能需要更长时间。之后,您可以花费额外的时间来修改当前系统以将所有内容存储在数据库中。 修复问题的原因,而不是其症状。
聪明地做这件事不需要NxN比较。你可以使用很多启发式方法,但首先我想问你:
所有图像的副本是否完全调整大小(是否进行了一些裁剪-将裁剪后的图像与原始图像匹配可能更加困难和耗时)?
所有生成的图像(调整大小)是否使用相同的工具?
关于您用于调整大小的参数如何?例如,所有用于在PSP上显示的图片分辨率相同吗?
您估计有多少个唯一的图像(即每张图片可能有多少个副本-平均而言)?
您是否已经完成任何分类?例如,所有移动图像是否在单独的文件夹中(或者分辨率与PC图像不同)?仅此就可以大大减少比较的数量,即使您以其他方式进行暴力搜索。
你应该检查哪个图像是最小的,取其大小,然后仅比较矩形大小内的像素。
30000*30000*10/1000/60/60/24 = 104.17
。你需要超过一百天才能完成这项任务。好耶! - jwueller