Sal*_*ali 44
散列是一种适用于任意数据并生成固定大小(通常是非常小的大小)的数据的函数.有许多不同类型的哈希,但如果我们谈论图像哈希,它可用于:
如果您只是比较原始字节,那么看起来与我们完全相同的图像会有很大差异.这可能是由于:
即使你会在一个字节中找到一个不同的图像,如果要对它应用哈希函数,结果可能会非常不同(对于像MD5这样的哈希,SHA很可能会完全不同).
因此,您需要一个哈希函数,它将为类似图像创建类似(或甚至相同)的哈希.其中一个通用的是局部敏感散列.但是我们知道图像会出现什么样的问题,所以我们可以提出一种更专业的哈希.
最着名的算法是:
顺便说一句,如果你使用python,所有这些哈希都已在这个库中实现.
Mat*_*ehm 37
虽然通常散列文件会散列文件的各个数据位,但图像散列的工作水平略高.不同之处在于,对于图像散列,如果两张图片看起来几乎完全相同但是格式或分辨率不同(或者可能由于压缩而导致轻微损坏),则它们应该散列到相同的数字.尽管他们的数据的实际位数完全不同,但如果他们看起来与人类完全相同,那么他们就会发现同样的事情.
其中一个应用是搜索.TinEye.com允许您上传图像并在互联网上查找其中的许多内容.像谷歌一样,它有一个网页抓取工具,可以抓取网页并查找图片.然后它散列这些图像并将散列和URL存储在数据库中.上传图像时,它只是计算哈希值并检索链接到数据库中该哈希值的所有URL.TinEye的示例用途包括查找更高分辨率版本的图片,或查找某人的公共facebook/myspace /等.他们照片中的个人资料(假设这些个人资料使用相同的照片
图像散列还可以与高速缓存或本地存储一起使用,以分别防止重传照片或存储重复.
还有很多其他可能性,包括图像验证和在视频中找到类似的帧(正如其他人所提到的).
一般来说,散列是将大量数据减少到可用于识别该图像的较短数字的有用方法。
它们有时只是为了提供一种无需人工干预即可识别文件的简便方法,特别是在存在多个并行作者的情况下,不能依赖他们在不重叠的情况下增加某些主计数器(JPG001 JPG002)。
有时哈希值是不可伪造的,所以我可以说 - 如果您生成的图像哈希值与我向您发送图像时生成的哈希值相同,那么您可以确定它来自我(并且没有被邪恶的人调整) )。然而,并不是所有的哈希值都能做出这样的保证,每隔几年,流行的这种“加密”哈希值就会被证明存在致命的缺陷。