图像相似性搜刮的道理
副问题[/!--empirenews.page--]
本文转自: http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html http://www.voidcn.com/article/p-nvcdxgfv-bnx.html http://blog.sina.com.cn/s/blog_b27f71160101gp9c.html http://www.voidcn.com/article/p-ojqegjmq-wy.html http://www.voidcn.com/article/p-cttqtaiy-g.html http://blog.sina.com.cn/s/blog_b27f71160101gpep.html 计较机怎么知道两张图片相似呢? 按照Neal Krawetz博士的表明,道理很是简朴易懂。我们可以用一个快速算法,就到达根基的结果。 这里的要害技能叫做"感知哈希算法"(Perceptual hash algorithm),它的浸染是对每张图片天生一个"指纹"(fingerprint)字符串,然后较量差异图片的指纹。功效越靠近,就声名图片越相似。 下面是一个最简朴的实现: 一、均匀哈希算法(aHash) 此算法是基于较量灰度图每个像素与均匀值来实现的。 第一步,缩小尺寸。 将图片缩小到8x8的尺寸,总共64个像素。这一步的浸染是去除图片的细节,只保存布局、明暗等根基信息,摒弃差异尺寸、比例带来的图片差别。
第二步,简化色彩。 将8*8的小图片转换成灰度图像,将64个像素的颜色(red,green,blue)转换成一种颜色(利害灰度)。 第三步,计较均匀值。 计较全部64个像素的灰度均匀值。 第四步,较量像素的灰度。 将每个像素的灰度,与均匀值举办较量。大于或便是均匀值,记为1;小于均匀值,记为0。 第五步,计较哈希值。 将上一步的较量功效,组合在一路,就组成了一个64位的整数,这就是这张图片的指纹。组合的序次并不重要,只要担保全部图片都回收同样序次就行了。 ?=? 获得指纹往后,就可以比拟差异的图片,看看64位中有几多位是纷歧样的。在理论上,这等同于计较"汉明间隔"(Hamming distance)。假如不沟通的数据位不高出5,就声名两张图片很相似;假如大于10,就声名这是两张差异的图片。 步调声名:
1.缩放图片:为了保存布局去掉细节,去除巨细、横纵比的差别,把图片同一缩放到8*8,共64个像素的图片。 2.转化为灰度图:把缩放后的图片转化为256阶的灰度图。 附上灰度图相干算法(R = red, G = green, B = blue) ? 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数要领:Gray=(R*30+G*59+B*11)/100 3.移位要领:Gray =(R*76+G*151+B*28)>>8; 4.均匀值法:Gray=(R+G+B)/3; 5.仅取绿色:Gray=G; ? ? ? 3.计较均匀值: 计较举办灰度处理赏罚后图片的全部像素点的均匀值。? 4.较量像素灰度值:遍历灰度图片每一个像素,假如大于均匀值记录为1,不然为0. 5.获得信息指纹:组合64个bit位,次序随意保持同等性即可。 6.比拟指纹:计较两幅图片的指纹,计较汉明间隔(从一个指纹到另一个指纹必要变屡次),汉明间隔越大则声名图片越纷歧致,反之,汉明间隔越小则声名图片越相似,当间隔为0时,声名完全沟通。(凡是以为间隔>10 就是两张完全差异的图片)
算法实现(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |