问题标签 [phash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
498 浏览

c++ - Qt5 - 链接 pHash 库“未定义的引用”

我想添加一个名为pHash的外部库。我将此添加到 .pro 文件中:

但是图书馆的任何一项功能都没有工作。当我尝试使用一个时,我构建了错误“未定义对 pHashFunction 的引用”。有一个使用示例:

然后是构建日志:

预先感谢您的帮助 :)

0 投票
0 回答
88 浏览

algorithm - 图像比较调整到人类感知

假设我有两个系统,它们采用相同的绘图命令并开始在各自的平台上绘图(即 HTML Canvas)。完成此操作后,我想保存并比较这两个图像,以确保它们在感知上是相同的,即使形状和颜色可能略有偏差(不可察​​觉的差异)。

我尝试使用感知散列,但不幸的是它似乎对这项任务不够敏感。因此,例如,如果您在一个上设置 1000 个全黑像素(对于 1920x1080 的图像)并将其与另一个进行比较,这在感知上将非常明显,但 pHash 算法仍将返回 100% 匹配。

我尝试对所有像素使用最近邻平均。基本上,对于每个像素,我将它的值与它的许多相邻像素的值取平均值,并将这个值设置回像素。这似乎适用于具有硬边和直线的形状,因为它只需要非常小的局部变化就可以感知到不同。对于长曲线,这不是很好,因为在整个曲线上可能会有适度的变化,但在感知上仍然被认为是相同的。

是否存在一种算法可以处理许多可能的形状/曲线的感知上的微小变化?我应该使用多种算法来处理这项任务吗?

0 投票
1 回答
81 浏览

python - 当非类型对象出现时 phash 中断

我认为“cv2.imread(os.path.join(文件夹,文件))”由于某种原因返回为无,因为下一个分配给出了一个无类型错误,但它仅在所有子文件夹都运行时才会中断。将其更改为仅在发生错误的子文件夹上运行;它运行良好。我最困惑的是,如此微小的变化带来的回报却不同。

0 投票
0 回答
718 浏览

python - 用mongodb计算汉明距离?

假设我有大量包含感知散列的文档(大约 35,000 个),我可以(使用 mongodb)将给定散列 X 与数据库中的所有散列进行比较并找到距离较远的散列的最快方法是什么小于 N。

顺便说一句,我正在使用python,我假设这在mongo中是不可能的,但也许有可能以某种方式优化它?

0 投票
0 回答
68 浏览

macos - OS X 如何生成图标 phash?

我曾尝试在OS X中使用wireshark嗅探空投功能,发现有一个元素调用phash。

使用 AirDrop 时,外观图标将是您的用户图标(如果您已设置)。我试过很多次改图标,打开空投,用wireshark捕捉phash值,因为phash值是OS X自己生成的,是正确的,所以我可以用scapy来改变phash值从我的记录中重新发送,它将出现在 AirDrop 上的图标。我认为 OS X 有其生成值的方法,我想知道它,这样我就不需要重复更改图标并捕获它。

0 投票
1 回答
1459 浏览

python - 如何创建和保存图像感知散列的成对汉明距离以输入聚类算法

希望有人可以提供有关如何计算一堆哈希的成对汉明距离然后对它们进行聚类的指导。我不太关心性能,而是看我在做什么和我想做的事情,无论如何它都会很慢,而且它不会反复运行。

所以......简而言之,我错误地从驱动器上删除了 1000 张照片并且没有备份(我知道......不好的做法)。使用各种工具,我能够从驱动器中恢复非常高的百分比,但留下了数百张 1000 张照片。由于用于恢复某些照片的技术(例如文件雕刻),一些图像在不同程度上损坏了,另一些是相同的副本,还有一些在视觉上基本相同,但逐字节不同。

我正在寻找帮助这种情况的方法如下:

  1. 检查每个图像并确定图像文件是否在结构上损坏(完成)
  2. 为每个图像生成感知散列(指纹),以便可以比较图像的相似性和聚类(完成指纹部分)
  3. 计算指纹的成对距离
  4. 聚类成对距离,以便可以一起查看相似的图像以帮助手动清理

在随附的脚本中,您会注意到我计算哈希的几个地方,我将解释为不会引起混淆......

  • 对于 PIL 支持的图像,我生成三个散列,第一个用于原始图像,第二个旋转 90 度,第三个旋转 180 度。这样做是为了当成对计算完成时,我可以解释方向不同的图像。
  • 对于 PIL 不支持的原始图像,我更喜欢从提取的嵌入预览图像生成的哈希值。我这样做而不是使用原始图像,因为在原始图像文件损坏的情况下,预览图像很可能由于其较小的尺寸而完好无损,因此更好地识别图像是否类似于其他
  • 生成哈希的其他地方是在最后一次努力识别损坏的原始图像期间。我会将提取/转换的原始图像的哈希值与提取的嵌入预览图像的哈希值进行比较,如果相似度不符合定义的阈值,则假定整个原始文件可能已损坏。

我需要指导的是如何完成以下任务:

  1. 取每个图像的三个哈希值并计算汉明成对距离
  2. 对于每个图像比较,只保留最相似的汉明距离
  3. 将结果输入 scipy 层次聚类,以便我可以对相似的图像进行分组

我只是在学习 Python,所以这是我挑战的一部分......我认为从我从谷歌那里得到的信息中,我可以通过首先使用 scipy.spatial.distance.pdist 获取成对距离来做到这一点,然后处理它以保持每个图像比较的最相似距离,然后将其提供给 scipy 聚类函数。但我不知道如何组织这个并以正确的格式提供东西等。有人可以提供一些指导吗?

这是我当前的脚本以供参考,以防其他人发现我需要更改以存储某种哈希字典或某种磁盘存储很有趣。

已编辑 只是想提供我最终提出的更新,这似乎非常适合我的预期目的,也许它对处于类似情况的其他用户有用。该脚本仍然可以使用一些抛光,但除此之外所有的肉都在那里。因为我很喜欢使用 Python,如果有人看到可以大大改进的东西,请告诉我。

该脚本执行以下操作:

  1. 尝试使用各种方法根据文件结构检测图像损坏。对于原始图像格式(NEF、DNG、TIF),有时我发现损坏的图像仍然可以正常加载,因此我决定对预览图像和原始图像的提取 .jpg 进行哈希处理,并比较哈希值是否相似够了,我假设图像以某种形式损坏。
  2. 为每个可以加载的图像创建感知散列。为基本文件创建了三个(原始文件、原始文件旋转 90、原始文件旋转 180)。此外,对于原始图像,为提取的预览图像创建了额外的 3 个哈希值,这样做是为了在原始图像损坏的情况下,我们仍然可以基于完整图像获得哈希值(假设预览很好)。
  3. 对于被识别为损坏的图像,它们会使用一个后缀进行重命名,该后缀表示损坏以及决定它的原因。
  4. 通过将哈希值与所有文件对进行比较来计算成对汉明距离,并将其存储在一个 numpy 数组中。
  5. 成对距离的平方形式被馈送到 fastcluster 进行聚类
  6. fastcluster 的输出用于生成树状图,以可视化相似图像的集群

我将 numpy 数组保存到磁盘,以便以后可以重新运行 fastcluster/dendrogram 部分,而无需重新计算每个速度较慢的文件的哈希值。这是我必须更改脚本才能允许的事情......

0 投票
3 回答
583 浏览

mysql - 在 mysql 中执行按位 xor + bit_count 时遇到问题

我正在尝试对哈希值(16 个字符的十六进制字符串)进行比较。我有一个 MYSQL 表,它用一phash VARCHAR(16)列存储这些值。这就是我想要做的:

但是 bit_count + xor 没有正确完成。即使phash='dda15873a3de013d'我得到33了我应该得到的结果0(两个十六进制是相同的,所以异或应该只产生零,因此 bit_count 为 0。

怎么了?谢谢

编辑:这里的例子=> http://sqlfiddle.com/#!9/d7f5c2/1/0

0 投票
1 回答
572 浏览

image - pHash 图像相似度的阈值

我正在尝试使用 pHash 比较找到类似的图像。图像的 pHash 是 64 位数字。我正在做的是比较两个图像的哈希值,然后计算结果哈希值中 1 的数量,然后将我的结果计算为百分比。我尝试过使用 50% 和 70% 的阈值,但是对于 50% 的阈值有很多 FP,对于 70% 的阈值有很多 FN。哪个门槛会更好?还是我需要执行一些其他计算?

0 投票
0 回答
381 浏览

mongodb - MongoDB:按到给定 phash 的嗡嗡声距离排序

我们需要它用于以下用例:

这甚至比仅仅定义一个将 a 与 b 关联起来的排序函数更加特殊,因为它需要使用“外部”参数来对比排序的时刻。

0 投票
1 回答
1427 浏览

c++ - 局部敏感哈希还是 pHash?

我正在尝试实现一个通用的指纹记忆器:我们有一个可以通过智能指纹表示的文件(如图像的pHash或音频的色度图),如果我们想要的(昂贵的)函数已经在类似的文件上计算,然后我们返回相同的结果(避免昂贵的计算)。

局部敏感哈希(LSH) 是一种流行且性能良好的解决方案,用于解决昂贵的多维空间中的近似最近邻问题。

pHash是一个很好的库,它实现了图像的感知散列。

因此 pHash 将多维输入(图像)转换为一维对象(哈希码),这与 LSH(同样,LSH 中的多维对象)有所不同。

所以我想知道我们如何为 pHash 哈希值实现一维 LSH?或者简而言之:我们如何将相似的 pHash 值分组?它可以替代经典的 LSH 方法(如果不是为什么)?