相似图片搜索原理一则
记得百度去年上线了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字符串然后再进行比较。
怎么样是不是很简单其实跟搜索引擎在处理文字时的道理一样他幵没有读懂任何的字戒者图片只是简单的通过特征判定即可计算出图片的相似度从而匹配出合适的图片了。
收到好多消息,让我聊一下阿里云国际版本,作为一个阿里云死忠粉,之前用的服务器都是阿里云国内版的VPS主机,对于现在火热的阿里云国际版,这段时间了解了下,觉得还是有很多部分可以聊的,毕竟,实名制的服务器规则导致国际版无需实名这一特点被无限放大。以前也写过几篇综合性的阿里云国际版vps的分析,其中有一点得到很多人的认同,那句是阿里云不管国内版还是国际版的IO读写速度实在不敢恭维,相对意义上的,如果在这...
iON Cloud怎么样?iON Cloud升级了新加坡CN2 VPS的带宽和流量最低配的原先带宽5M现在升级为10M,流量也从原先的150G升级为250G。注意,流量也仅计算出站方向。iON Cloud是Krypt旗下的云服务器品牌,成立于2019年,是美国老牌机房(1998~)krypt旗下的VPS云服务器品牌,主打国外VPS云服务器业务,均采用KVM架构,整体性能配置较高,云服务器产品质量靠...
? ? ? ?创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川联通大带宽,四川联通高防IP,一手整CIP段,四川电信,联通高防机柜,CN2专线相关业务。成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快...