什么是图像哈希用于?

时间:2009-06-15 22:06:02

标签: algorithm image hash

我有时会听到这个词,并想知道它的用途是什么?

5 个答案:

答案 0 :(得分:36)

虽然正常散列文件会散列文件的各个数据位,但是图像散列的工作稍高一些。不同之处在于,对于图像散列,如果两张图片看起来几乎完全相同但是格式或分辨率不同(或者可能由于压缩而导致轻微损坏),则它们应该散列到相同的数字。尽管他们的数据的实际位数完全不同,但如果他们看起来与人类完全相同,那么他们就会同样的事情。

这个的一个应用是搜索。 TinEye.com允许您上传图像并在互联网上查找其中的许多内容。像谷歌一样,它有一个网页抓取工具,可以抓取网页并查找图片。然后它散列这些图像并将散列和URL存储在数据库中。上传图像时,它只是计算哈希值并检索链接到数据库中该哈希值的所有URL。 TinEye的示例用途包括查找更高分辨率版本的图片,或查找某人的公共facebook / myspace /等。他们的照片中的个人资料(假设这些个人资料使用相同的照片。

图像散列也可以与缓存或本地存储一起使用,以防止分别重新传输照片或存储重复项。

还有很多其他可能性,包括图像身份验证和在视频中查找类似的帧(正如其他人所提到的那样)。

答案 1 :(得分:36)

Hashing是一个适用于任意数据并生成固定大小(通常是非常小的大小)数据的函数。有许多不同类型的哈希,但如果我们谈论图像哈希,它可以用于:

  • 非常快速地找到重复项。几乎任何哈希函数都可以工作。您不会搜索整个图像,而是查找图像的哈希值。
  • 找到类似的图片,我稍后会解释

如果您只是比较原始字节,那么看起来与我们相同的图像会有很大差异。这可能是由于:

  • 调整大小
  • 旋转
  • 略有不同的颜色伽玛
  • 格式不同
  • 一些轻微的噪音,水印和文物

即使你会在一个字节中找到一个不同的图像,如果要对它应用哈希函数,结果可能会非常不同(对于像MD5, SHA这样的哈希,它很可能是完全不同的不同)。

因此,您需要一个哈希函数,它将为类似图像创建类似(或甚至相同)的哈希。其中一个通用的是locality sensitive hashing。但是我们知道图像会出现什么样的问题,所以我们可以提出more specialized kind of hash

最着名的算法是:

  • a-hash。平均散列是最简单的算法,只使用少量转换。缩放图像,转换为灰度,计算平均值并根据平均值对灰度进行二值化。现在将二进制图像转换为整数。该算法非常简单,您可以在一小时内实现它。
  • p-hash。感知哈希使用类似的方法,但不是平均依赖于discrete cosine transformation(信号处理中的流行变换)。
  • d-hash。差异散列使用与a-hash相同的方法,但不使用有关平均值的信息,而是使用渐变(相邻像素之间的差异)。
  • w-hash。与p-hash非常相似,但它使用wavelet transformation而不是DCT。

顺便说一句,如果你使用python,所有这些哈希都已经在this library中实现了。

答案 2 :(得分:3)

散列通常是将大量数据减少为可用于识别该图像的短(ish)数字的有用方法。

它们有时只是为了提供一种方便的方法来识别文件,而无需人工干预,特别是在有几个并行作者的情况下,不能依赖它来增加某些主计数器(JPG001 JPG002)而不重叠

有时候哈希是不可伪造的,所以我可以说 - 如果您生成的图像哈希与我发送给您的图像相同,那么您可以确定它来自我(并且没有调整)由一个恶人)。然而,并非所有的哈希都可以做出这种保证,每隔几年流行的这种“加密”哈希就会产生致命的缺陷。

答案 3 :(得分:1)

在实践中,图像散列很受欢迎,可以在一系列帧或视频中找到相似的图像,或者像现在许多电影制片厂那样嵌入带有各种图像的水印(几乎可以在令人毛骨悚然的意义上回到战斗俱乐部! )。

答案 4 :(得分:-2)

嗯....比较图像(广义上,图片或任何其他二进制文件)快速而不比较整个文件?