问题标签 [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.
image - 如何知道图像是否与另一个图像相似(角度略有不同但观点相同)
我已经检查了像 Phasher 这样的方法来获得类似的图像。基本上将图像大小调整为 8x8,灰度,获取平均像素并创建每个像素的二进制哈希,比较它是否高于或低于平均像素。
这种方法在这里解释得很好: http ://hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
工作示例: - 桌子上计算机的图像 1 - 图像 2,相同,但带有硬币
这是可行的,因为使用非常缩小的灰度图像的散列,它们两者几乎相同,甚至相同。因此,当 90% 以上的像素相同(在同一个地方!)时,您可以得出结论它们是相似的
我的问题是从相同的角度但不同的角度拍摄的图像,例如:
在这种情况下,生成的哈希“指纹”相互偏移,以至于我们无法逐位比较哈希,这将是非常不同的。
像素是“相似的”,但它们不在同一个地方,因为在这种情况下,天空更多,房屋“开始”比第一个更低。
所以哈希比较结果是“它们是不同的图像”。
可能的解决方案:
我正在考虑为第一个图像创建一个更大的散列,然后为第二个图像获取 10 个随机“子散列”,并尝试查看 10 个子散列是否在第一个大散列的“某个地方”(如果一个子字符串包含在另一个更大的字符串中)。
我认为这里的问题是处理数千张图像时的 CPU/时间,因为您必须将 1 张图像与 1000 张图像进行比较,并且在每张图像中,将 10 个子哈希与一个大哈希进行比较。
其他解决方案?;-)
ruby - phash ruby,如何访问哈希
我目前正在结合 ruby ( https://github.com/toy/pHash/blob/master/lib/phash.rb ) 使用phash ( http://www.phash.org )。
如果我使用所描述的示例,它会起作用。
但我只想提取哈希 - 但我不知道该怎么做
matlab - 用于感知散列的matlab代码
我需要一个用于此处描述的感知散列算法的 matlab 代码: http ://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
基本上我希望这可以删除图像中的细节,只留下主要结构组件信息。
为此,我认为我需要以下步骤: 1. 减少 DCT。假设 DCT 是 32x32(),只保留左上角的 8x8。这些代表图片中的最低频率。
计算平均值。与平均哈希一样,计算平均 DCT 值(仅使用 8x8 DCT 低频值并排除第一项,因为 DC 系数可能与其他值显着不同,并且会偏离平均值)。
进一步降低 DCT。根据 64 个 DCT 值中的每一个值是高于还是低于平均值,将 64 个哈希位设置为 0 或 1。结果并没有告诉我们实际的低频;它只是告诉我们频率与平均值的非常粗略的相对比例。只要图像的整体结构保持不变,结果就不会改变;这可以毫无问题地在伽马和颜色直方图调整中存活。
处理后重建图像。
任何人都可以帮助完成上述任何一个步骤吗?我已经尝试了一些给出一些结果的代码(在下面的链接中),它还不完美: https ://stackoverflow.com/questions/26748051/extract-low-frequency-from-dct-coeffecients-of-an- matlab 中的图像
ruby - 为 gem 使用环境变量(pHash)
我在 OSX 上,我已经安装了 pHash gem。
使用 gem 时,出现以下错误:Could not open library 'libpHash.dylib'
.
在文档中,作者说
您可以使用环境变量(如
PHASH_LIB=/opt/local/lib/libpHash.dylib
.
问题是我不知道如何在我的 ruby 程序的上下文中实际调用这个环境变量。gem 是用 调用的require 'phash'
,但是我在哪里可以指定 ENV 变量?
c++ - 未找到“initializer_list”文件
尝试为节点安装 phash-image 但我收到此错误:
我该如何解决?我在 os x 10.10.3 上并使用自制软件安装了 phash
c++ - 找不到使用 MacPorts 安装的库
我已经使用 MacPorts 安装了 pHash 库,但是当我尝试编译示例源代码时出现此错误:
如何告诉源代码在哪里可以找到库?(根据我发现它们安装在 /opt/local 中)
c++ - 在 Ubuntu 上安装 pHash 时出错
所以我试图在 Ubuntu 上安装 pHash 库。我已经安装了运行此命令所需的所有软件包:
然后我运行 ./configure ,一切似乎都很好,我得到了这个:
但是当我尝试 make 命令时,我得到了这些错误:
有些人可以帮助我理解有什么问题?
python - 在 ImageHash Python 库中更改哈希大小
我正在使用ImageHash库来生成图像的感知散列。该库声称能够生成不同大小的散列(64、128、256),但我不知道如何获得 128 散列。
哈希大小由库重新缩放时的图像大小决定,例如:
这里的默认值为 8(8x8 图像 = 64 像素 -> 灰度 -> 64 位)。
但是,如何创建 128 位哈希?
第二件事,pHash 的默认大小是 32,正如这里所解释的,但稍后将仅计算左上角 8x8 部分的 DCT,因此再次为 64 位。DCT 通过以下方式计算scipy.fftpack
:
如何更改哈希大小?
无论使用哪个值,计算都将始终基于左上角的 8x8,因此始终为 64!
发生的奇怪事情是,如果我从 8 大小的 pHash 开始(从头调整图像大小),我得到了 56 位的最终哈希(即计算 7x8 图像的哈希:我不明白为什么这发生在DCT计算中——但我真的知道一点。
c# - 将 intptr 转换为 ulong 数组
我正在从 C# 调用一个方法,如下所示:
这是我从图书馆调用的方法
如何ulong
从 中读取数组IntPtr
?
image - 在 Elasticsearch 中通过 pHash 距离搜索相似图像
相似图片搜索问题
- 数百万张经过 pHash 处理的图像并存储在 Elasticsearch 中。
- 格式为“11001101...11”(长度为 64),但可以更改(最好不要)。
给定主题图像的哈希“100111..10”,我们希望在8 的汉明距离内的 Elasticsearch 索引中找到所有相似的图像哈希。
当然query可以返回距离大于8的图片,Elasticsearch或者外部的脚本可以过滤结果集。但总搜索时间必须在 1 秒左右。
我们当前的映射
images
每个文档都有包含图像哈希的嵌套字段:
我们糟糕的解决方案
事实: Elasticsearch 模糊查询仅支持最大 2 的 Levenshtein 距离。
我们使用自定义标记器将 64 位字符串拆分为 4 组 16 位,并使用四个模糊查询进行 4 组搜索。
分析仪:
然后是新的字段映射:
然后查询:
请注意,我们返回具有匹配图像的文档,而不是图像本身,但这不应该改变很多。
问题是即使在添加其他特定于域的过滤器以减少初始集之后,此查询也会返回数十万个结果。脚本有太多工作要再次计算汉明距离,因此查询可能需要几分钟。
正如预期的那样,如果增加到minimum_should_match
3 和 4,则只返回必须找到的图像子集,但结果集小而快。低于 95% 的所需图像返回minimum_should_match
== 3,但我们需要 100%(或 99.9%),如minimum_should_match
== 2。
我们用 n-gram 尝试了类似的方法,但在太多结果的类似方式中仍然没有太大的成功。
其他数据结构和查询的任何解决方案?
编辑:
我们注意到,我们的评估过程中有一个错误,minimum_should_match
== 2 返回 100% 的结果。但是,之后的处理时间平均需要 5 秒。我们将看看脚本是否值得优化。