V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Reign
V2EX  ›  程序员

世界上是不是永远最多只能存在 18446744073709552000 张图片?

  •  
  •   Reign · 2017-02-17 14:27:11 +08:00 · 6669 次点击
    这是一个创建于 2617 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚刚看了一下阮一峰老师的博文: 相似图片搜索原理 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 代码更好,谢谢

    32 条回复    2017-02-18 18:38:34 +08:00
    whx20202
        1
    whx20202  
       2017-02-17 14:39:50 +08:00   ❤️ 2
    我毕业论文也搞了点图像,是结合应用那种的,我就随便说说

    很多图像检索的方法,尤其是比较老的,都是这样,把图像弄成一个向量,然后算欧氏距离来计算相似度。
    包括他文中说的 SIFT 也是搞成 128 维向量

    图片肯定是无穷无尽的,你如果使用更加”优秀“的算法,就会有更多的图像向量或者图像摘要

    我当时用的是词袋模型算法, 就是把图像提取 sift 特征,然后把特征点拿出来聚类,再用自然语言处理的方法,把特征点当做自然语言处理领域的 ”词“,然后搞倒排索引,就表示成向量了,最后通过欧氏距离来计算最近邻或者近似最近邻

    我记得还有一种算法 2016 年 CVPR 发的,人家只用了 16 位还是多少来着,但是算法很复杂,效果还可以。。。相似度也还不错
    rock_cloud
        2
    rock_cloud  
       2017-02-17 14:51:47 +08:00   ❤️ 1
    只能说这种算法只能分辨这么多种吧。。。然后你这个数也不对啊?
    baiyi
        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
    我也是刚学,代码什么的也是丑陋.随便看一看吧
    iamzhuyi
        4
    iamzhuyi  
       2017-02-17 14:54:51 +08:00
    哈哈 我毕业论文也是关于这个的
    cnZary
        5
    cnZary  
       2017-02-17 14:55:30 +08:00
    只是你那个分辨率只能存在这么多张图片吧?
    murmur
        6
    murmur  
       2017-02-17 14:56:22 +08:00   ❤️ 1
    楼主这数学。。。
    一个图片按 640x 480 分辨率算,也就是这么多点,每个点的颜色可能取值为 255x255x255
    那么有多少种可能呢
    数量级都不对哦
    murmur
        7
    murmur  
       2017-02-17 14:57:49 +08:00   ❤️ 11
    楼主最好好好理解下特征是什么意思,特征提取是有损的,而且损失信息量相当大
    举个例子来说,满屋的青蛙有一只狗,你说有个东西没戴眼镜,我一眼就能找出来是啥
    但是万千世界你让我同样找这条狗,恐怕这信息就不够用了
    function007
        8
    function007  
       2017-02-17 14:58:49 +08:00
    散列是无限集对有限集,必然会有撞的啊。。
    mortal
        9
    mortal  
       2017-02-17 14:59:36 +08:00
    @murmur #7 有点暴力…
    ynyounuo
        10
    ynyounuo  
       2017-02-17 14:59:54 +08:00
    压缩成 8×8 大小的小图片
    取灰度平均值

    然后你会说只能存在 2⁶⁴ 张图片?
    njwangchuan
        12
    njwangchuan  
       2017-02-17 15:13:31 +08:00
    https://github.com/jenssegers/imagehash

    实际项目中用于保存图片前 hash
    qian0206
        13
    qian0206  
       2017-02-17 15:17:05 +08:00
    @njwangchuan 保存图片前 hash 的话,对于滤镜处理或者降低分辨率的图片也能识别出来,这类图片的前 hash 也是一样么?求告知,谢谢
    whx20202
        14
    whx20202  
       2017-02-17 15:18:53 +08:00
    @wuhang89 找了半天没找到我说的那个
    倒是找到师妹讲的一个老的。。。 https://icycai.farbox.com/post/summary-of-ITQ
    算了不管了
    ETiV
        15
    ETiV  
       2017-02-17 15:22:03 +08:00 via iPhone
    啥样的脑洞能想出这种结论


    既然是 hash ,就肯定有碰撞呀
    BlackBerry
        16
    BlackBerry  
       2017-02-17 15:30:48 +08:00
    这么大的数也不小了,放心吧,没有那么多图片的
    Phariel
        17
    Phariel  
       2017-02-17 15:35:10 +08:00 via Android
    @murmur 蛤?暗中观察?
    neurocomputing
        18
    neurocomputing  
       2017-02-17 15:43:00 +08:00
    瞧你说的,要是没有 hash ,是不是世界就不存在了
    hash 不过都是从无限集到有限集的映射罢了
    misaka20038numbe
        19
    misaka20038numbe  
       2017-02-17 15:56:47 +08:00
    放心好了,要是不够了 hash 长度可以加的嘛。
    panlilu
        20
    panlilu  
       2017-02-17 16:05:15 +08:00
    @murmur #7 青蛙为什么会有眼镜?太暴力了。。
    flyingghost
        21
    flyingghost  
       2017-02-17 16:07:07 +08:00
    说到了一种(很简单)的图片相似计算方法,就是把一个图片压缩成 ( 8x8 )大小的小图片,对这 ( 64 ) 个像素进行遍历,取灰度平均值,每个像素点取和灰度值比较大小的布尔值 1 或者 0 ,最终生成一个 ( 64 )位大小的字符串作为其特征码。

    同理也可以说:

    说到了一种(稍微复杂点)的图片相似计算方法,就是把一个图片压缩成 ( 800x800 )大小的小图片,对这( 640000 )个像素进行遍历,取灰度平均值,每个像素点取和灰度值比较大小的布尔值 1 或者 0 ,最终生成一个( 640000 )位大小的字符串作为其特征码。

    咦?世界上的图片变多了?(大雾)
    droiz
        22
    droiz  
       2017-02-17 16:09:28 +08:00
    @murmur 老哥稳
    viator42
        23
    viator42  
       2017-02-17 16:26:04 +08:00
    以图找图还是没法分辨细节的东西,我上传一页本子谷歌只能认出这是漫画
    starvedcat
        24
    starvedcat  
       2017-02-17 16:30:38 +08:00
    肯定存在某个二进制排列,该数据为一张图片,其内容是你和[x]的交合场面( x 可为任何人)。只不过这样的图片你还没找到
    icebergSnow
        25
    icebergSnow  
       2017-02-17 16:35:54 +08:00 via Android   ❤️ 1
    @murmur 苟也有眼镜啊?!
    picasso250
        26
    picasso250  
       2017-02-17 17:01:38 +08:00
    你知道 2^64 多大吗?
    picasso250
        27
    picasso250  
       2017-02-17 17:03:52 +08:00
    恰巧和 IPv6 的地址数量一样多
    Kilerd
        28
    Kilerd  
       2017-02-17 18:57:35 +08:00 via iPhone
    全世界只有 26 个英文单词?😷😷😷
    ho121
        29
    ho121  
       2017-02-17 19:02:57 +08:00 via Android
    整个世界是不是只会经历 4294967296 秒?
    ragnaroks
        30
    ragnaroks  
       2017-02-18 09:59:52 +08:00
    @ho121 #29 对一般人来说可能是的,但有一个人例外
    realpg
        31
    realpg  
       2017-02-18 10:02:07 +08:00
    如果一个系统采用 crc32 存密码,那么地球上只有 4294967296 种密码?
    QNLvw5fLfr7c
        32
    QNLvw5fLfr7c  
       2017-02-18 18:38:34 +08:00
    我觉得在所有图像中,有意义的图片很少很少,听说(目前为止)不到 100,000,000,000 ,更别说 2^64 了。
    因此使用散列进行匹配是可行的,就像两个人指纹不太可能相同一样。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3197 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:35 · PVG 08:35 · LAX 17:35 · JFK 20:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.