Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 图像哈希用于什么?_Algorithm_Image_Hash - Fatal编程技术网

Algorithm 图像哈希用于什么?

Algorithm 图像哈希用于什么?,algorithm,image,hash,Algorithm,Image,Hash,我有时会听到这个术语,我想知道它的用途是什么?通常,散列是一种有用的方法,可以将大量数据减少到一个短(ish)数,用于识别该图像 有时,它们只是为了提供一种简便的方法来识别文件,而无需人工干预,尤其是在几个并行作者在场的情况下,这些作者无法在不重叠的情况下增加某些主计数器(JPG001 JPG002) 有时散列被认为是不可伪造的,所以我可以说——如果你生成的图像散列与我发送图像时生成的图像散列相同,那么你可以确定它来自我(而不是由作恶者调整)。然而,并不是所有的散列都能保证这一点,每隔几年,一种

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

通常,散列是一种有用的方法,可以将大量数据减少到一个短(ish)数,用于识别该图像

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


有时散列被认为是不可伪造的,所以我可以说——如果你生成的图像散列与我发送图像时生成的图像散列相同,那么你可以确定它来自我(而不是由作恶者调整)。然而,并不是所有的散列都能保证这一点,每隔几年,一种流行的“加密”散列就会出现致命的缺陷。

嗯。。。。要在不比较整个文件的情况下快速比较图像(广义的图像或任何其他二进制文件)

实际上,图像哈希是一种流行的方法,用于在一系列帧或视频中查找相似的图像,或者像许多电影制片厂现在所做的那样,用各种图像嵌入水印(从一种令人毛骨悚然的意义上说,几乎可以回过头来听搏击俱乐部!)。

而通常对文件进行哈希时,会对文件中的各个数据位进行哈希,图像哈希在更高的级别上工作。不同之处在于,使用图像散列时,如果两张图片看起来几乎相同,但格式或分辨率不同(或者可能由于压缩而出现轻微损坏),则它们应该散列到相同的数字。尽管它们的数据的实际位完全不同,但如果它们看起来与人类完全相同,它们会散列到相同的东西

这种方法的一个应用是搜索。TinEye.com允许您上传图像,并在互联网上查找图像的许多内容。和谷歌一样,它也有一个网络爬虫,可以在网页中爬行并查找图像。然后对这些图像进行散列,并将散列和url存储在数据库中。上载图像时,它只计算散列并检索数据库中链接到该散列的所有URL。TinEye的示例使用包括查找更高分辨率版本的图片,或从某人的图片中查找其公共facebook/myspace/等个人资料(假设这些个人资料使用相同的照片)

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

还有很多其他可能性,包括图像认证和在视频中查找类似帧(如其他人所述)。

是一个应用于任意数据并生成固定大小(主要是非常小的大小)数据的函数。有许多不同类型的散列,但如果我们谈论图像散列,它用于:

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

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

  • 调整大小
  • 轮换
  • 颜色稍有不同的伽马
  • 不同格式
  • 一些轻微的噪音、水印和瑕疵
即使你会发现一个仅仅在一个字节内不同的图像,如果你对它应用一个哈希函数,结果可能会非常不同(对于像它这样的哈希函数,很可能会完全不同)

所以你需要一个散列函数,它可以为相似的图像创建一个相似的(甚至相同的)散列。其中一个通用的是。但是我们知道图像会有什么样的问题,所以我们可以提出一个解决方案

最著名的算法有:

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


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

好吧,只要你清楚两个图像可能看起来基本相同,或者完全相同,甚至只是元数据不同,那么是的……元数据不同,但根据这个“比较”仍然不匹配,那么是的。如果你不想,你会使用它吗o为图像指定一个唯一的难以猜测的名称?不,这并不难猜测,它可以直接从图像本身派生出来(你不想猜对的人可能可以访问该名称)。您可以先对图像进行变换或水印,这将更改图像,使散列不再工作,但我不确定您是否刚刚破坏了散列的值。在这里,我从几个方面改进了d-hash: