
刚刚看了一下阮一峰老师的博文: 相似图片搜索原理 http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html ,里面说到了一种很简单的图片相似计算方法,就是把一个图片压缩成 8x8 大小的小图片,对这 64 个像素进行遍历,取灰度平均值,每个像素点取和灰度值比较大小的布尔值 1 或者 0 ,最终生成一个 64 位大小的字符串作为其特征码。
其实目前很多 pHash ( perceptual hash )都是按照这种算法来定性一张图片,如果真的每张图片都对应一种这种算法的 pHash 码,世界上是不是永远最多只能存在 2^64=18446744073709552000 张图片???
目前 github 了一遍都找不到更好的 pHash 算法, V2 们有没有好点的 pHash 算法示例,有 php 代码更好,谢谢
1 whx20202 2017-02-17 14:39:50 +08:00 我毕业论文也搞了点图像,是结合应用那种的,我就随便说说 很多图像检索的方法,尤其是比较老的,都是这样,把图像弄成一个向量,然后算欧氏距离来计算相似度。 包括他文中说的 SIFT 也是搞成 128 维向量 图片肯定是无穷无尽的,你如果使用更加”优秀“的算法,就会有更多的图像向量或者图像摘要 我当时用的是词袋模型算法, 就是把图像提取 sift 特征,然后把特征点拿出来聚类,再用自然语言处理的方法,把特征点当做自然语言处理领域的 ”词“,然后搞倒排索引,就表示成向量了,最后通过欧氏距离来计算最近邻或者近似最近邻 我记得还有一种算法 2016 年 CVPR 发的,人家只用了 16 位还是多少来着,但是算法很复杂,效果还可以。。。相似度也还不错 |
2 rock_cloud 2017-02-17 14:51:47 +08:00 只能说这种算法只能分辨这么多种吧。。。然后你这个数也不对啊? |
3 baiyi 2017-02-17 14:52:53 +08:00 我前一阵子也研究了下图像识别,最近有项目了,就暂时搁浅了 首先, 图片肯定是无穷无尽的...... 其次,还是有许多其他的算法的,http://www.ruanyifeng.com/blog/2013/03/similar_image_search_part_ii.html 阮一峰老师的第二篇博文也讲解了其他算法 最后,图像这块推荐下 opencv php 貌似不太适合把,用 python 或者 c++吧.opencv 对应的接口 https://github.com/cnbailian/image-recognition 我也是刚学,代码什么的也是丑陋.随便看一看吧 |
4 iamzhuyi 2017-02-17 14:54:51 +08:00 哈哈 我毕业论文也是关于这个的 |
5 cnZary 2017-02-17 14:55:30 +08:00 只是你那个分辨率只能存在这么多张图片吧? |
6 murmur 2017-02-17 14:56:22 +08:00 楼主这数学。。。 一个图片按 640x 480 分辨率算,也就是这么多点,每个点的颜色可能取值为 255x255x255 那么有多少种可能呢 数量级都不对哦 |
7 murmur 2017-02-17 14:57:49 +08:00 楼主最好好好理解下特征是什么意思,特征提取是有损的,而且损失信息量相当大 举个例子来说,满屋的青蛙有一只狗,你说有个东西没戴眼镜,我一眼就能找出来是啥 但是万千世界你让我同样找这条狗,恐怕这信息就不够用了 |
8 function007 2017-02-17 14:58:49 +08:00 散列是无限集对有限集,必然会有撞的啊。。 |
10 ynyounuo 2017-02-17 14:59:54 +08:00 压缩成 8×8 大小的小图片 取灰度平均值 然后你会说只能存在 2 张图片? |
11 wuhang89 2017-02-17 15:06:43 +08:00 |
12 njwangchuan 2017-02-17 15:13:31 +08:00 |
13 qian0206 2017-02-17 15:17:05 +08:00 @njwangchuan 保存图片前 hash 的话,对于滤镜处理或者降低分辨率的图片也能识别出来,这类图片的前 hash 也是一样么?求告知,谢谢 |
14 whx20202 2017-02-17 15:18:53 +08:00 |
15 ETiV 2017-02-17 15:22:03 +08:00 via iPhone 啥样的脑洞能想出这种结论 既然是 hash ,就肯定有碰撞呀 |
16 BlackBerry 2017-02-17 15:30:48 +08:00 这么大的数也不小了,放心吧,没有那么多图片的 |
18 neurocomputing 2017-02-17 15:43:00 +08:00 瞧你说的,要是没有 hash ,是不是世界就不存在了 hash 不过都是从无限集到有限集的映射罢了 |
19 misaka20038numbe 2017-02-17 15:56:47 +08:00 放心好了,要是不够了 hash 长度可以加的嘛。 |
21 flyingghost 2017-02-17 16:07:07 +08:00 说到了一种(很简单)的图片相似计算方法,就是把一个图片压缩成 ( 8x8 )大小的小图片,对这 ( 64 ) 个像素进行遍历,取灰度平均值,每个像素点取和灰度值比较大小的布尔值 1 或者 0 ,最终生成一个 ( 64 )位大小的字符串作为其特征码。 同理也可以说: 说到了一种(稍微复杂点)的图片相似计算方法,就是把一个图片压缩成 ( 800x800 )大小的小图片,对这( 640000 )个像素进行遍历,取灰度平均值,每个像素点取和灰度值比较大小的布尔值 1 或者 0 ,最终生成一个( 640000 )位大小的字符串作为其特征码。 咦?世界上的图片变多了?(大雾) |
23 viator42 2017-02-17 16:26:04 +08:00 以图找图还是没法分辨细节的东西,我上传一页本子谷歌只能认出这是漫画 |
24 starvedcat 2017-02-17 16:30:38 +08:00 肯定存在某个二进制排列,该数据为一张图片,其内容是你和[x]的交合场面( x 可为任何人)。只不过这样的图片你还没找到 |
25 icebergSnow 2017-02-17 16:35:54 +08:00 via Android @murmur 苟也有眼镜啊?! |
26 picasso250 2017-02-17 17:01:38 +08:00 你知道 2^64 多大吗? |
27 picasso250 2017-02-17 17:03:52 +08:00 恰巧和 IPv6 的地址数量一样多 |
28 Kilerd 2017-02-17 18:57:35 +08:00 via iPhone 全世界只有 26 个英文单词? |
29 ho121 2017-02-17 19:02:57 +08:00 via Android 整个世界是不是只会经历 4294967296 秒? |
31 realpg PRO 如果一个系统采用 crc32 存密码,那么地球上只有 4294967296 种密码? |
32 QNLvw5fLfr7c 2017-02-18 18:38:34 +08:00 我觉得在所有图像中,有意义的图片很少很少,听说(目前为止)不到 100,000,000,000 ,更别说 2^64 了。 因此使用散列进行匹配是可行的,就像两个人指纹不太可能相同一样。 |