计算机是怎么知道两张图片相似的呢?

作者:数之联

摘要:以图搜图功能,特别是移动端的以图搜图,成为日益增长的流量入口和用户需求。有机构表明:未来5年,用户使用语音和图像进行意图表达的比例将超过50%。移动端的以图搜图是一代又一代的图像人、搜索人的梦想,而如今梦想在一步步贯彻并变为现实。

那么对于我们这些非专业的seo人员来说,36大数据(http://www.36dsj.com/)

可以不去学习图像搜索的算法,但是一定要知道搜索引擎是如何辨别图片的。

在以图搜图功能日渐普及的当下,相信有不少人经常会用到,你可以直接上传本地图片来搜索不同尺寸的相似图片。

就拿拍图购图像搜索产品为例:36大数据(http://www.36dsj.com/)

计算机是怎么知道两张图片相似的呢?_第1张图片

你可以上传一张图片搜索各大互联网电商网站上所有与它相似的图片。

计算机是怎么知道两张图片相似的呢?_第2张图片

那么咱们就拿这张穿着白裙子的女孩图片为例,反馈的搜索结果如下:

计算机是怎么知道两张图片相似的呢?_第3张图片

相似度高达百分百另外还能同色系同材质进行匹配

那么问题就来了!36大数据(http://www.36dsj.com/)

计算机又是怎么知道两张图片相似呢?这种技术的原理是什么?

其实原理非常简单易懂,我们可以用一个快速算法,就达到基本的效果。这里的关键技术叫做“感知哈希算法”(Perceptual hash algorithm),它的作用是对每张图片生成一个“指纹”(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。

感知哈希算法:36大数据(http://www.36dsj.com/)

第一步,缩小尺寸。将图片缩小到8*8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

第二步,简化色彩。 将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。 第三步,计算平均值。 计算所有64个像素的灰度平均值。 第四步,比较像素的灰度。 将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。 第五步,计算哈希值。将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。 得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算”汉明距离”(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。 优这种算法的优点是简单快速不受图片大小缩放的影响劣缺点是图片的内容不能变更如果在图片上加几个文字

它就认不出来了。36大数据(http://www.36dsj.com/)

所以它的最佳用途是根据缩略图找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

颜色分布法:每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。

计算机是怎么知道两张图片相似的呢?_第4张图片

任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图)。 如果每种原色都可以取256个值,那么整个颜色空间共有1600万种颜色(256的三次方)。针对这1600万种颜色比较直方图,计算量实在太大了,因此需要采用简化方法。可以将0~255分成四个区:0~63为第0区,64~127为第1区,128~191为第2区,192~255为第3区。这意味着红绿蓝分别有4个区,总共可以构成64种组合(4的3次方)。

任何一种颜色必然属于这64种组合中的一种,这样就可以统计每一种组合包含的像素数量。

计算机是怎么知道两张图片相似的呢?_第5张图片

上图是某张图片的颜色分布表,将表中最后一栏提取出来,组成一个64维向量(7414, 230, 0, 0, 8, …, 109, 0, 0, 3415, 53929)。这个向量就是这张图片的特征值或者叫”指纹”。

于是,寻找相似图片就变成了找出与其最相似的向量。这可以用皮尔逊相关系数或者余弦相似度算出。

深度学习:自从Hinton在2012年将深度卷积神经网络(CNN)带入到图像分类领域后,深度学习在图像处理相关领域的研究一下子变得异常火热起来

计算机是怎么知道两张图片相似的呢?_第6张图片

简单概括就是:36大数据(http://www.36dsj.com/)

  1. 利用多个隐藏层
  2. 每层多个卷积核对输入图像进行卷积
  3. 每层的输出作为下一层的输入
  4. 最后连接一个分类器进行分类
  5. 通过不断的训练修改各层的参数
  6. 最后再每个隐藏层训练得到一些抽象的特征图谱
  7. 网络训练好后就可以对输入图像进行分类了

基于深度学习原理的图像检索,更多的是从一种图像理解的角度来进行的,得到的是一种更加抽象的描述,也可以定义为“语义”,它更多的是在解释这个图像描绘的是什么物体或者什么场景之类的。

综合多媒体和移动化的特点,未来搜索技术的发展将为用户提供更加灵活、多样化的搜索请求方式,以及综合音频、视频、图片、文本等多媒体信息的搜索结果,使得搜索领域的人机交互更加自然、有效。

在未来二至五年内,图像搜索将迎来新一轮的应用高潮。36大数据(http://www.36dsj.com/)

End.



无觅相关文章插件,快速提升流量

转载请注明来自36大数据(36dsj.com): 36大数据» 计算机是怎么知道两张图片相似的呢?

你可能感兴趣的:(Geek)