声明:本文最初发表于赖勇浩(恋花蝶)的博客http://blog.csdn.net/lanphaday

先将两张图片转化为直方图,图像的相似度计算就转化为直方图的距离计算了,本文依照如下公式进行直方图相似度的定量度量:

Sim(G,S)=

其中G,S为直方图,N 为颜色空间样点数

转换为相应的 Python 代码如下:

#!/usr/bin/env python
# coding=utf-8 import Image def make_regalur_image(img,size=(256,256)):
return img.resize(size).convert('RGB') def split_image(img,part_size=(64,64)):
w,h = img.size
pw,ph = part_size assert w%pw == h%ph==0 return [img.crop((i,j,i+pw,j+ph)).copy() for i in xrange(0,w,pw) for j in xrange(0,h,ph)] def hist_similar(lh,rh):
assert len(lh)==len(rh)
return sum(1-(0 if l==r else float(abs(l-r))/max(l,r))for l,r in zip(lh,rh))/len(lh) def calc_similar(li,ri):
# return hist_similar(li.histogram(),ri.histogram())
return sum(hist_similar(l.histogram(),r.histogram()) for l,r in zip(split_image(li),split_image(ri)))/16.0 def calc_similar_by_path(lf,rf):
li,ri = make_regalur_image(Image.open(lf)),make_regalur_image(Image.open(rf))
return calc_similar(li,ri) def make_doc_data(lf,rf):
li = make_regalur_image(Image.open(lf))
ri = make_regalur_image(Image.open(rf))
li.save(lf+'_regalur.png')
ri.save(rf+'_regalur.png') fd = open('stat.csv','w')
fd.write('\n'.join(l+','+r for l,r in zip(map(str,li.histogram()),map(str,ri.histogram()))))
fd.close() import ImageDraw
li = li.convert('RGB')
draw = ImageDraw.Draw(li)
for i in xrange(0,256,64):
draw.line((0,i,256,i),fill ='#F00')
draw.line((i,0,i,256),fill='#F00')
li.save(lf+'_lines.png') if __name__=='__main__':
path = r'test/TEST%d/%d.JPG'
for i in xrange(1,7):
print 'test_case_%d: %.3f%%'%(i,calc_similar_by_path('test/TEST%d/%d.JPG'%(i,1),'test/TEST%d/%d.JPG'%(i,2))*100) make_doc_data('test/TEST4/1.JPG','test/TEST4/2.JPG')

参考:

用Python做图像处理

计算图像相似度——《Python也可以》之一

计算图像相似度——《Python也可以》之一的更多相关文章

  1. MatLab计算图像圆度

    本文所述方法可以检测同一图像中的多个圆形(准确的说,应该是闭合图像). 在Matlab2010a中可以实现. 附录效果图: %颗粒圆度 clear;close all; %% %读取源图像 I = i ...

  2. 图像相似度算法的C#实现及测评

    近日逛博客的时候偶然发现了一个有关图片相似度的Python算法实现.想着很有意思便搬到C#上来了,给大家看看. 闲言碎语 才疏学浅,只把计算图像相似度的一个基本算法的基本实现方式给罗列了出来,以至于在 ...

  3. OpenCV进行图像相似度对比的几种办法

    转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/43853435, 来自:shiter编写程序的艺术 对计算图像相似度的方法,本文做 ...

  4. 图像相似度计算之哈希值方法OpenCV实现

    http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 29 ...

  5. Python OpenCV 图像相识度对比

    强大的openCV能做什么我就不啰嗦,你能想到的一切图像+视频处理. 这里,我们说说openCV的图像相似度对比, 嗯,说好听一点那叫图像识别,但严格讲, 图像识别是在一个图片中进行类聚处理,比如图片 ...

  6. python计算余弦复杂度

    import numpy as np from sklearn.metrics.pairwise import cosine_similarity a = np.array([1, 2, 3, 4]) ...

  7. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

  8. 转-------CNN图像相似度匹配 2-channel network

    基于2-channel  network的图片相似度判别 原文地址:http://blog.csdn.net/hjimce/article/details/50098483 作者:hjimce 一.相 ...

  9. 我用JAVA做了个简易图像相似度计算器

    简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 使用最简单最基础的感知哈 ...

随机推荐

  1. 多种数据库之间的同步工具SymmetricDS

    代码:https://github.com/JumpMind/symmetric-ds 原理: 通过触发器模式同步时,是将数据库的变化记录到某个系统表中,然后在客户端建立缓冲,并定期将变化push到接 ...

  2. cocos2d-x移植:xcode到eclipse

    xcode程序移植到eclipse 必要组件: 1.macos gcc编译器,若没有,在xcode->preference->downloads中下载command line tools( ...

  3. IIS7 经典模式和集成模式的区别

    IIS7.0中的Web应用程序有两种配置形式:经典形式和集成形式. 经典形式是为了与之前的版本兼容,运用ISAPI扩展来调用ASP.NET运转库,原先运转于IIS6.0下的Web应用程序迁移到IIS7 ...

  4. pycharm 提示性信息

    语法错误:文字底部红色波浪线 解决方案:语法修改正确 语法不符合规范:文字底部灰色波浪线 解决方案:快捷键(Alt + Enter + Enter ) 单词拼写提示:文字底部绿色波浪线 解决方案: 单 ...

  5. WinRAR的自解压模式 - imsoft.cnblogs

    一个 SFX (SelF-eXtracting)自解压文件是压缩文件的一种,它结合了可执行文件模块,一种用以运行从压缩文件解压文件的模块.这样的压缩文件不需要外部程序来解压自解压文件的内容,它自己便可 ...

  6. HDU 4647 Another Graph Game 想法类

    解题思路:若没有边权,则对点权从大到小排序即可.. 考虑边,将边权拆成两半加到它所关联的两个点的点权中即可. ..因为当两个人分别选择不同的点时,这一权值将互相抵消. 以上摘自杭电的解题报告. 至于为 ...

  7. 《DSP using MATLAB》Problem 4.13

    代码: %% ---------------------------------------------------------------------------- %% Output Info a ...

  8. test20180922 倾斜的线

    题意 问题描述 给定两个正整数P和Q.在二维平面上有n个整点.现在请你找到一对点使得经过它们的直线的斜率在数值上最接近P/Q(即这条直线的斜率与P/Q的差最小),请输出经过它们直线的斜率p/q.如果有 ...

  9. day23 python学习 类 人狗大战

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 面向过程 优点是:极大的降低了 ...

  10. Xamarin版的C# SVG路径解析器

    原文:Xamarin版的C# SVG路径解析器 Xamarin版的C# SVG路径解析器,对SVG的Path路径进行解析,其中包括: 主程序SvgPathParser.cs, 相关接口定义:ISour ...