刚刚看了一下阮一峰老师的博文: 相似图片搜索原理 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 2
我毕业论文也搞了点图像,是结合应用那种的,我就随便说说
很多图像检索的方法,尤其是比较老的,都是这样,把图像弄成一个向量,然后算欧氏距离来计算相似度。 包括他文中说的 SIFT 也是搞成 128 维向量 图片肯定是无穷无尽的,你如果使用更加”优秀“的算法,就会有更多的图像向量或者图像摘要 我当时用的是词袋模型算法, 就是把图像提取 sift 特征,然后把特征点拿出来聚类,再用自然语言处理的方法,把特征点当做自然语言处理领域的 ”词“,然后搞倒排索引,就表示成向量了,最后通过欧氏距离来计算最近邻或者近似最近邻 我记得还有一种算法 2016 年 CVPR 发的,人家只用了 16 位还是多少来着,但是算法很复杂,效果还可以。。。相似度也还不错 |
2
rock_cloud 2017-02-17 14:51:47 +08:00 1
只能说这种算法只能分辨这么多种吧。。。然后你这个数也不对啊?
|
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 1
楼主这数学。。。
一个图片按 640x 480 分辨率算,也就是这么多点,每个点的颜色可能取值为 255x255x255 那么有多少种可能呢 数量级都不对哦 |
7
murmur 2017-02-17 14:57:49 +08:00 11
楼主最好好好理解下特征是什么意思,特征提取是有损的,而且损失信息量相当大
举个例子来说,满屋的青蛙有一只狗,你说有个东西没戴眼镜,我一眼就能找出来是啥 但是万千世界你让我同样找这条狗,恐怕这信息就不够用了 |
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 1
@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 2017-02-18 10:02:07 +08:00
如果一个系统采用 crc32 存密码,那么地球上只有 4294967296 种密码?
|
32
QNLvw5fLfr7c 2017-02-18 18:38:34 +08:00
我觉得在所有图像中,有意义的图片很少很少,听说(目前为止)不到 100,000,000,000 ,更别说 2^64 了。
因此使用散列进行匹配是可行的,就像两个人指纹不太可能相同一样。 |