以图搜图是怎么回事儿

想象一个这样的场景。你偶然得到一张图片,上面是一个美女。


以图搜图是怎么回事儿_第1张图片
美女

你的好奇心来了,想知道她是谁,有没有什么作品可以学习一下。
怎么办呢?搜索引擎只能根据关键词检索,现实是,你现在手里除了一张图,一点有用的信息都没有。
于是你去请教老司机,他向你推荐以图搜图的搜索引擎。顾名思义,上传一张图片,它能帮你找到类似的图片,甚至能找到图片的出处。

网址是http://tineye.com


以图搜图是怎么回事儿_第2张图片

果然有效果!于是你通过以图搜图的方法,找到了图片上美女的信息,还顺藤摸瓜的找到了她的作品,后面的事情就不用说了。现在的互联网真是强大,只要有一点点线索,就能把一个人的老底翻个遍。
感叹之余,我们来看下以图搜图是什么原理吧。

其实说起搜索,就是一个匹配的过程。你服务器上存了互联网上几乎所有的网页,这些网页绝大部分都是由文本构成的。当你以某个关键词查找的时候,只需要一一比对(当然这里为了速度会用到「倒排索引」等高深的算法),只要找出能够匹配的内容即可。

文本信息的匹配很简单,但是换成图片就不一样了。以图搜图面临的首要问题,就是如何判断两张图片是相似的。最简单的办法是,图片本身就是二进制数据,可以通过比对二进制数据来判断。但这样做要求的精度太高,图片的格式不一样,尺寸不一样,相应的二进制数据天壤之别,所以几乎是不可行的。从另一个角度讲,如果按二进制比对,每张图片都要保存它原始的二进制数据,互联网上的图片是海量的,这个存储压力一般人扛不住。

有一个算法可以做到,叫「感知哈希算法」。顾名思义,它仿照人眼对图片相似的判断,只需要轮廓、大体颜色一致,就认为两张图片是相似的,至于图片是什么格式,大小如何,在比较的时候都排除在外。

1、把图片缩小成8*8,缩小之后,整个图片就变模糊了,但是基本的结构还在。这就人为降低了匹配的精度,要的就是这种效果。

以图搜图是怎么回事儿_第3张图片

2、把图片的颜色信息转化成64阶灰度。怎么理解呢?现在既然图片压缩成了8*8大小,一共64个像素,这样只需要64个等级,就能表示每个像素的颜色强弱。我们的目标是比较颜色的相对强弱,并不关心每个像素原来是红色还是黄色。

以图搜图是怎么回事儿_第4张图片

3、计算所有像素的灰度的平均值,然后记录信息,每个像素,大于均值的标1,小均值的标0,最后形成一个64个bit的二进制数,这个数就是这张图的hash值。这样做的好处是存储空间大大降低了。最后的结果是:
1100000011000001111000011110100011111101111010011110100111100000

4、两张图进行对比的时候,对比他们的hash值,如果64位里,相同的越多,越相似。

感知哈希算法说简单其实很简单,它把图片的大致结构,大致颜色抽出来,做成一个数字,既容易存储,又容易比较,而且效果还不错。发散一下,感知哈希算法如果拿来鉴别小黄图,应该也不错。
解决了比较的问题,剩下的,就是搜索引擎的老一套了,输入,对比,展示相似的结果。

下回咱们介绍下「听歌识曲」是怎么回事儿。

你可能感兴趣的:(以图搜图是怎么回事儿)