谷歌图片搜索原理
Google图片搜索的原理
谷歌的搜索引擎算法很强大。为了解决这个问题,有人咨询了算法组的朋友,他们分享了基本思路。在这里,谢谢你:
对于这种图像搜索算法,通常有三个步骤:
1.提取目标图像特征的算法有很多,如SIFT描述子、指纹算法函数、捆绑特征算法、哈希函数等。根据不同的图像,可以设计不同的算法,比如利用图像的局部n阶矩来提取图像特征。
2.对图像特征信息进行编码,将大量图像编码为查找表。对于目标图像,可以对分辨率较高的图像进行降采样,降低计算量后再进行图像特征提取和编码处理。
3.相似性匹配操作:在图像搜索引擎中,利用目标图像的编码值计算图像数据库中的全局或局部相似性;根据要求的鲁棒性设定阈值,然后预先保留相似度高的图片;最后,应该还有一步,筛选最匹配的图片。这应该还是用特征检测算法。
每一步都有很多算法,侧重于数学、统计学、图像编码、信号处理等理论。
下面是阮一峰最简单的实现:
输入谷歌图片的网址,或者直接上传图片,谷歌就会找到类似的图片。下图是美国女演员艾丽森汉妮根。
上传后,Google返回以下结果:
这项技术的原理是什么?电脑怎么知道两张图相似?
根据尼尔克拉维兹博士的解释,这个原理非常简单易懂。我们可以用一个快速算法来达到基本的效果。
这里的关键技术叫做‘感知哈希算法’,它的作用是为每张图像生成一个‘指纹’字符串,然后比较不同图像的指纹。结果越接近,图片越相似。
下面是最简单的实现:
第一步是缩小尺寸。
将图片缩小到8x8大小,总共64像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,丢弃大小比例不同造成的图片差异。
第二步,简化颜色。
将缩小的图片转换为64灰度级。也就是说,所有像素总共只有64种颜色。
第三步,计算平均值。
计算所有64个像素的灰度平均值。
第四步是比较像素的灰度。
将每个像素的灰度与平均值进行比较。大于或等于平均值,记为1;小于平均值,记录为0。
第五步,计算哈希值。
结合上一步的比较结果,形成一个64位的整数,就是这张图的指纹。组合的顺序并不重要,只要所有图片的顺序都一样。
拿到指纹后,可以对比不同的图片,看看64位中有多少是不一样的。理论上,这相当于计算‘汉明距离’。如果不同的数据位不超过5,则表示两幅图片非常相似;如果大于10,说明这是两张不同的图片。
具体代码实现见Wote用python语言写的imgHash.py。代码很短,只有53行。使用时,第一个参数是参考图片,第二个参数是其他图片用于比较的目录,返回的结果是两个图片之间不同的数据位数(汉明距离)。
该算法的优点是简单快速,不受图像大小缩放的影响。缺点是图像的内容不能改变。如果你在图片上加几个字,它就不会被认出来。所以它最好的用途就是根据缩略图找出原图。
实际中经常使用比较强大的pHash算法和SIFT算法,可以识别图像的畸变。只要变形程度不超过25%,它们就能匹配原图。虽然这些算法比较复杂,但是原理和上面的简单算法是一样的,就是先把图像转换成哈希串,然后再进行比较。
相关文章
-
你认为按职称加工资好还是按工龄加工资好?
文章来源:老铁商城2020-01-06 -
月薪5万,要求你出国务工2年,中途不得回家,你愿意吗?
文章来源:老铁商城2020-01-06 -
公司派我去非洲工作,每天1000元补助,要不要去?
文章来源:老铁商城2020-01-06 -
是什么让你坚持上班没有离职呢?
文章来源:老铁商城2020-01-06 -
我已60岁,企业破产了,负债一千多万,怎样东山再起?
文章来源:老铁商城2020-01-06 -
如果腾讯、阿里、百度同时聘用你,你会选择哪一个公司?为什么?
文章来源:老铁商城2020-01-06 -
如果你痴迷钓鱼,每月给你10000块,钓遍全国的工作你愿意干吗?
文章来源:老铁商城2020-01-06