我有时会听到这个词,并想知道它的用途是什么?
答案 0 :(得分:36)
虽然正常散列文件会散列文件的各个数据位,但是图像散列的工作稍高一些。不同之处在于,对于图像散列,如果两张图片看起来几乎完全相同但是格式或分辨率不同(或者可能由于压缩而导致轻微损坏),则它们应该散列到相同的数字。尽管他们的数据的实际位数完全不同,但如果他们看起来与人类完全相同,那么他们就会同样的事情。
这个的一个应用是搜索。 TinEye.com允许您上传图像并在互联网上查找其中的许多内容。像谷歌一样,它有一个网页抓取工具,可以抓取网页并查找图片。然后它散列这些图像并将散列和URL存储在数据库中。上传图像时,它只是计算哈希值并检索链接到数据库中该哈希值的所有URL。 TinEye的示例用途包括查找更高分辨率版本的图片,或查找某人的公共facebook / myspace /等。他们的照片中的个人资料(假设这些个人资料使用相同的照片。
图像散列也可以与缓存或本地存储一起使用,以防止分别重新传输照片或存储重复项。
还有很多其他可能性,包括图像身份验证和在视频中查找类似的帧(正如其他人所提到的那样)。
答案 1 :(得分:36)
Hashing是一个适用于任意数据并生成固定大小(通常是非常小的大小)数据的函数。有许多不同类型的哈希,但如果我们谈论图像哈希,它可以用于:
如果您只是比较原始字节,那么看起来与我们相同的图像会有很大差异。这可能是由于:
即使你会在一个字节中找到一个不同的图像,如果要对它应用哈希函数,结果可能会非常不同(对于像MD5, SHA这样的哈希,它很可能是完全不同的不同)。
因此,您需要一个哈希函数,它将为类似图像创建类似(或甚至相同)的哈希。其中一个通用的是locality sensitive hashing。但是我们知道图像会出现什么样的问题,所以我们可以提出more specialized kind of hash。
最着名的算法是:
顺便说一句,如果你使用python,所有这些哈希都已经在this library中实现了。
答案 2 :(得分:3)
散列通常是将大量数据减少为可用于识别该图像的短(ish)数字的有用方法。
它们有时只是为了提供一种方便的方法来识别文件,而无需人工干预,特别是在有几个并行作者的情况下,不能依赖它来增加某些主计数器(JPG001 JPG002)而不重叠
有时候哈希是不可伪造的,所以我可以说 - 如果您生成的图像哈希与我发送给您的图像相同,那么您可以确定它来自我(并且没有调整)由一个恶人)。然而,并非所有的哈希都可以做出这种保证,每隔几年流行的这种“加密”哈希就会产生致命的缺陷。
答案 3 :(得分:1)
在实践中,图像散列很受欢迎,可以在一系列帧或视频中找到相似的图像,或者像现在许多电影制片厂那样嵌入带有各种图像的水印(几乎可以在令人毛骨悚然的意义上回到战斗俱乐部! )。
答案 4 :(得分:-2)
嗯....比较图像(广义上,图片或任何其他二进制文件)快速而不比较整个文件?