相似图片搜索的奥秘 寻找“仙女”车模
极客
我一走进车展大厅,就看到一名堪称“仙女”的车模,瞬间就被征服了。她叫什么名字?怎么才能搭讪?我想到了相似图片搜索。只要我上传她的照片,就知道她在网络上的其他照片,自然就知道她是谁、她的联系方式……

不断进步的算法
在明代,要认定两个人之间是否有血缘关系,采取的就是“滴血认亲”,将两人刺出的血滴在器皿内,看是否凝为一体,如凝为一体就说明存在亲子或兄弟关系。早期的相似图片判断如同“滴血认亲”一样不靠谱,通过简单计算图片的轮廓从而判断两张图片的关系。
到了近代,判断方法有了进步(根据两人的外貌、血型、家族关系等因素进行判断),虽然判断方法不再荒谬,但成功率依然不高。中期的相似图片判断也有了进步,算法不再单一,但依然有许多漏洞,例如《绿坝-花季护航》增加了人体肉色判断,结果将黄牛判断为黄色图片。
如今,判断方法更加科学,通过DNA来断定两人之间的关系。相似图片判断也走上了正轨:通过“DNA”来判断。首先,要用一种特殊的算法为图片创建一个字符串,这个字符串是唯一的,大家可以把它想像成DNA。接着,要创建一个图片数据库,里面收集了无数图片的DNA。然后,用户上传图片,系统获取上传图片的DNA。最后,就是将获取的上传图片的DNA跟图片数据库里面的DNA进行比较,将相似DNA对应的图片显示出来。
不过,这样一来工作量就太庞大了,网上的图片那么多,一个一个去创建DNA,那还不得累死?所以,还没有软件能实现这个功能,也只有拥有庞大资源和雄厚财力的搜索引擎可以办到。不过,成功率不稳定,热门图片的成功率较高(例如明星照片),而特别个性化的图片成功率较低。
“DNA”是这样采集的
第一步:缩小尺寸
将图片缩小到8×8分辨率的尺寸,总共64个像素。为什么要这么做呢?就是去除图片的细节(摒弃不同尺寸、比例等因素带来的图片差异),只保留结构、明暗等基本信息。
第二步:简化色彩
将缩小后的图片,转为64级灰度。换句话说,所有像素点总共只有64种颜色啦。这样一来,一些色彩的差异细节也被摒弃了。
第三步:计算平均值
计算64个像素的灰度平均值。这个计算过程比较复杂且枯燥,靠代码完成,这里就不多说了。如果你对代码感兴趣,到http://go.icpcw.com/f/jk251.htm下载。
第四步:比较像素的灰度
将每个像素的灰度与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。这么繁琐的工作也是代码计算的。
第五步:合成“DNA”值
将第四步的结果按照搜索引擎默认的顺序组合在一起,就构成了一个64位的整数,它就是图片的DNA。到此,DNA采集过程就完成了。
得到DNA以后,就可以对比不同的图片,看看64位中有多少位是不一样的。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。需要注意的是,这个只是最基本的原理,在实际使用时,还会附加更多算法来提高成功率,例如附加pHash算法和SIFT算法,它们能够识别变形的图片(只要变形程度不超过25%,它们就能匹配原图)。
延伸阅读
哼歌搜索采用相同原理
相似图片的搜索原理,也是哼歌搜索的原理。不过搜索结果嘛,那就千差万别了,总的来说成功率比相似图片搜索还低。为什么会这样呢?的确,哼歌搜索也是采集音律的DNA,不过由于口音问题、背景噪音的问题,采集的音频数据有多少走样,谁都说不清楚,从这些数据中提取的DNA,当然失真度就比较大了,想匹配正确的结果自然就比较难。
目前,具备哼歌搜索的网站和APP不多,不错的有http://www.midomi.com,该网站是英文的,但也支持中文搜索,不过成功率不高,要多试几次。该网站也推出了APP,Android平台、iOS平台都有。至于国内的,大家可以试试腾讯的http://h.soso.com,搜中文歌曲的成功率较高。



