相似图片搜索原理一则
记得百度去年上线了shitu.baidu.com当你上传一张照片时百度可以自动帮你适配到相似的图片。
加上有众所周知的搜索引擎读不懂图片这一大前提那么百度是如何实现这一功能的呢
一、一个十分简单的实现方法
计算机怎么知道两张图片相似呢
根据Neal Krawetz博士的解释原理非常简单易懂。我们可以用一个快速算法就达到基本的效果。
这里的关键技术叫做”感知哈希算法” Perceptual hash algorithm 它的作用是对每张图片生成一个”指纹” fingerprint 字符串然后比较不同图片的指纹。结果越接近就说明图片越相似。
来个简单的小示例
第一步缩小尺寸。
将图片缩小到8×8的尺寸总共64个像素。这一步的作用是去除图片的细节只保留结构、明暗等基本信息摒弃不同尺寸、比例带来的图片差异。
第二步简化色彩。
将缩小后的图片转为64级灰度。也就是说所有像素点总共只有64种颜色。
第三步计算平均值。
计算所有64个像素的灰度平均值。
第四步比较像素的灰度。
将每个像素的灰度与平均值进行比较。大于戒等于平均值记为1 小于平均值记为0。
第五步计算哈希值。
将上一步的比较结果组合在一起就构成了一个64位的整数这就是这张图片的指
纹。组合的次序幵不重要只要保证所有图片都采用同样次序就行了。
= =8facfcf4d0
得到指纹以后就可以对比不同的图片看看64位中有多少位是不一样的。在理论上这等同于计算“汉明距离” Hammingdistance。如果不相同的数据位不超过5 就说明两张图片很相似如果大于10就说明这是两张不同的图片。
这种算法的优点是简单快速不受图片大小缩放的影响缺点是图片的内容不能变更。如果在图片上加几个文字它就认不出来了。所以它的最佳用途是根据缩略图找出原图。
实际应用中往往采用更强大的pHash算法和SIFT算法它们能够识别图片的变形。只要变形程度不超过25%它们就能匹配原图。这些算法虽然更复杂但是原理与上面的简便算法是一样的就是先将图片转化成Hash字符串然后再进行比较。
怎么样是不是很简单其实跟搜索引擎在处理文字时的道理一样他幵没有读懂任何的字戒者图片只是简单的通过特征判定即可计算出图片的相似度从而匹配出合适的图片了。
mineserver怎么样?mineserver是一家国人商家,主要提供香港CN2 KVM VPS、香港CMI KVM VPS、日本CN2 KVM VPS、洛杉矶cn2 gia端口转发等服务,之前介绍过几次,最近比较活跃。这家新推出了洛杉矶CN2 GIA VPS,512MB内存/20GB NVME/800GB流量/200Mbps/KVM,58元/季,并且进行了带宽升级,同时IP更改为美国IP。点击...
LetBox此次促销依然是AMD Ryzen处理器+NVME硬盘+HDD大硬盘,以前是5TB月流量,现在免费升级到10TB月流量。另外还有返余额的活动,如果月付,月付多少返多少;如果季付或者半年付,返25%;如果年付,返10%。依然全部KVM虚拟化,可自定义ISO系统。需要大硬盘vps、大流量vps、便宜AMD VPS的朋友不要错过了。不过LetBox对帐号审核严格,最好注册邮箱和paypal帐号...
hostslim美国独立日活动正在进行中,针对一款大硬盘荷兰专用服务器:双E5-2620v2/4x 1TB SATA硬盘,活动价60美元月。HostSlim荷兰服务器允许大人内容,不过只支持电汇、信用卡和比特币付款,商家支持7天内退款保证,有需要欧洲服务器的可以入手试试,记得注册的时候选择中国,这样不用交20%的税。hostslim怎么样?HostSlim是一家成立于2008年的荷兰托管服务器商,...