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

声明:本文最初发表于赖勇浩(恋花蝶)的博客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也可以》之一

时间: 2024-08-16 17:56:33

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

图像相似度计算

http://blog.sina.com.cn/s/blog_4a540be60100vjae.html 图像相似度计算 (2011-12-13 22:16:23) 转载▼ 标签: 图像 相似 svd nmf 巴氏距离 直方图距离 图像哈希 图像校正 图像内容检索 分类: 计算机视觉 图像相似度计算主要用于对于两幅图像之间内容的相似程度进行打分,根据分数的高低来判断图像内容的相近程度. 可以用于计算机视觉中的检测跟踪中目标位置的获取,根据已有模板在图像中找到一个与之最接近的区域.然后一直跟着.已

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

近日逛博客的时候偶然发现了一个有关图片相似度的Python算法实现.想着很有意思便搬到C#上来了,给大家看看. 闲言碎语 才疏学浅,只把计算图像相似度的一个基本算法的基本实现方式给罗列了出来,以至于在最后自己测评的时候也大发感慨,这个算法有点不靠谱.不管怎么样,这个算法有时候还是有用的,所以还是列出来跟大家伙一起分享分享~~ PS:图像处理这一块博大精深,个人偶尔发现了点东西拿来分享.说的不好的地方,写得太糟的地方,诸位准备扔砖头还望淡定,淡定~~ 基本知识介绍 颜色直方图 颜色直方图是在许多图

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

对计算图像相似度的方法,本文做了如下总结,主要有三种办法: 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比,一种全参考的图像质量评价指标. 简介: http://www.cnblogs.com/vincent2012/archive/2012/10/13/2723152.html PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即基于误差敏感的图像质量评价.由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,

图像相似度计算之直方图方法OpenCV实现

操作步骤: 1.      载入图像(灰度图或者彩色图),并使其大小一致: 2.      若为彩色图,增进行颜色空间变换,从RGB转换到HSV,若为灰度图则无需变换: 3.      若为灰度图,直接计算其直方图,并进行直方图归一化: 4.      若为彩色图,则计算其彩色直方图,并进行彩色直方图归一化: 5.      使用相似度公式,如相关系数.卡方.相交或巴氏距离,计算出相似度值. string strSrcImageName = "src.jpg"; cv::Mat mat

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

http://blog.csdn.net/fengbingchun/article/details/42153261 图像相似度计算之哈希值方法OpenCV实现 2014-12-25 21:27 2959人阅读 评论(0) 收藏 举报  分类: OpenCV(72)  Image Processing(18)  版权声明:本文为博主原创文章,未经博主允许不得转载. 感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字

深入学习图像处理——图像相似度算法

最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜索的流程整理一下,想到什么说什么吧. 首先在进行图片灰度化处理之前,我觉得有必要了解一下为什么要进行灰度化处理. 图像灰度化的目的是什么? 将彩色图像转化为灰度图像的过程是图像的灰度化处理.彩色图像中的每个像素的颜色由R,G,B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多

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

简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 原理是使用最简单最基础的感知哈希算法,算法原理戳这里,绝对比笔主讲的要好: http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html UI设计图: 实际运行效果图: 关键算法: 1 // 全流程 2 public static

衡量两幅图像相似度的指标SNR(signal to noise ratio)和PSNR(peak signal to noise ratio)SSIM(structural similarity in

官方网站:https://ece.uwaterloo.ca/~z70wang/research/ssim/ 1.SSIM structural similarity index 一种衡量两幅图像相似度的新指标,其值越大越好,最大为1, 经常用到图像处理中,特别在图像去噪处理中在图像相似度评价上全面超越SNR(signal to noise ratio)和PSNR(peak signal to noise ratio). 具体原理见 Z. Wang, A. C. Bovik, H. R. Shei

图像相似度测量与模板匹配总结

摘要 本文主要总结了进行目标跟踪.检测中经常使用到的图像相似度测量和模板匹配方法,并给出了具体的基于OpenCV的代码实现. 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技术,常常用来进行目标的识别.跟踪与检测.其中最相似肯定是基于某种相似度准则来讲的,也就是需要进行相似度的测量.另外,寻找就需要在图像上进行逐行.逐列的patch窗口扫描,当然也不一定需要逐行逐列的扫描,当几个像素的误差比计算速度来的不重要时就可以设置扫描的行列步进值,以加快扫描和计算的时间消耗.下面就对相似度测量