38

有时两个图像文件在文件级别上可能不同,但人们会认为它们在感知上是相同的。鉴于此,现在假设您有一个庞大的图像数据库,并且您想知道人类是否会认为数据库中存在某些图像 X。如果所有图像都有一个感知哈希/指纹,那么可以对图像 X 进行哈希处理,查看它是否在数据库中将是一件简单的事情。

我知道围绕这个问题进行了研究,并且存在一些算法,但是是否有任何工具,例如 UNIX 命令行工具或库,我可以使用它来计算这样的哈希,而无需从头开始实施某些算法?

编辑:来自 findimagedupes 的相关代码,使用 ImageMagick

try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();

编辑:警告!ImageMagick $image 对象似乎包含有关读取的图像文件的创建时间的信息。这意味着即使对于同一图像,如果在不同时间检索到的 blob,您获得的 blob 也会有所不同。为确保指纹保持不变,请使用 $image->getImageSignature() 作为最后一步。

4

8 回答 8

14

findimagedupes很不错。例如,您可以运行“findimagedupes -v 指纹图像”来打印“感知散列”。

于 2008-12-03T02:38:03.353 回答
5

互相关或相位相关将告诉您图像是否相同,即使存在噪声、退化以及水平或垂直偏移。使用基于 FFT 的方法将使其比问题中描述的算法快得多。

但是,通常的算法不适用于比例或旋转不同的图像。您可以预先旋转或预先缩放它们,但这确实是处理器密集型的。显然,您也可以在对数极坐标空间中进行相关性,它对旋转、平移和缩放都是不变的,但我不太了解细节来解释这一点。

MATLAB 示例:使用归一化互相关注册图像

维基百科称其为“相位相关”,并且还描述了使其具有缩放和旋转不变性

The method can be extended to determine rotation and scaling differences between two images by first converting the images to log-polar coordinates. Due to properties of the Fourier transform, the rotation and scaling parameters can be determined in a manner invariant to translation.

于 2009-08-15T18:44:24.210 回答
4

颜色直方图适用于已调整大小、重新采样等的相同图像。
如果你想匹配不同人的同一地标的照片,那就更棘手了——看看 haar 分类器。Opencv 是一个很棒的免费图像处理库。

于 2008-12-03T03:51:53.547 回答
1

我不知道它背后的算法,但Microsoft Live Image Search刚刚添加了此功能。Picasa 还能够识别图像中的人脸,并对看​​起来相似的人脸进行分组。大多数时候,是同一个人。

一些机器学习技术,如支持向量机、神经网络、朴素贝叶斯分类器或贝叶斯网络,最适合这类问题。我已经写了前三个中的一个来对手写数字进行分类,这本质上是图像模式识别。

于 2008-12-03T02:45:50.093 回答
0

将图像调整为 1x1 像素...如果它们是精确的,则它们是同一张图片的可能性很小...现在将其调整为 2x2 像素图像,如果所有 4 个像素都是精确的,则它们的概率更大是精确的……然后是 3x3,如果所有 9 个像素都是精确的……很好的机会等等。然后是 4x4,如果所有的 16 个像素都是精确的,……更好的机会。

ETC...

这样做,您可以提高效率...如果 1x1 像素网格偏离很多,为什么还要检查 2x2 网格?等等

于 2008-12-03T03:09:59.717 回答
0

如果您有很多图像,则可以使用颜色直方图来获得图像的粗略接近度,然后再对每个图像进行完整的图像比较(即 O(n^2))。

于 2008-12-03T03:39:07.270 回答
-1

您可以使用 diff 来查看它们是否真的不同。我想它会消除很多无用的比较。然后,对于算法,我将使用概率方法..它们看起来相同的可能性是多少..我会根据每个像素中的 rgb 数量来计算。您还可以找到其他一些指标,例如亮度和类似的东西。

于 2008-12-03T02:37:29.297 回答
-1

DPEG“The” Duplicate Media Manager,但它的代码是不开放的。这是一个非常古老的工具——我记得在 2003 年使用它。

于 2008-12-03T03:17:34.490 回答