刚刚看了一下阮一峰老师的博文: 相似图片搜索原理 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 了。 
                因此使用散列进行匹配是可行的,就像两个人指纹不太可能相同一样。  |