在python中计算ssim的方法(与Matlab结果一致)


Posted in Python onDecember 19, 2019

如下代码可以计算输入的两张图像的结构相似度(SSIM),结果与matlab计算结果一致

// An highlighted block
import cv2
import numpy as np
def ssim(img1, img2):
  C1 = (0.01 * 255)**2
  C2 = (0.03 * 255)**2
  img1 = img1.astype(np.float64)
  img2 = img2.astype(np.float64)
  kernel = cv2.getGaussianKernel(11, 1.5)
  window = np.outer(kernel, kernel.transpose())
  mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5] # valid
  mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]
  mu1_sq = mu1**2
  mu2_sq = mu2**2
  mu1_mu2 = mu1 * mu2
  sigma1_sq = cv2.filter2D(img1**2, -1, window)[5:-5, 5:-5] - mu1_sq
  sigma2_sq = cv2.filter2D(img2**2, -1, window)[5:-5, 5:-5] - mu2_sq
  sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2
  ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *
                              (sigma1_sq + sigma2_sq + C2))
  return ssim_map.mean()
def calculate_ssim(img1, img2):
  '''calculate SSIM
  the same outputs as MATLAB's
  img1, img2: [0, 255]
  '''
  if not img1.shape == img2.shape:
    raise ValueError('Input images must have the same dimensions.')
  if img1.ndim == 2:
    return ssim(img1, img2)
  elif img1.ndim == 3:
    if img1.shape[2] == 3:
      ssims = []
      for i in range(3):
        ssims.append(ssim(img1, img2))
      return np.array(ssims).mean()
    elif img1.shape[2] == 1:
      return ssim(np.squeeze(img1), np.squeeze(img2))
  else:
    raise ValueError('Wrong input image dimensions.')

img1 = cv2.imread("Test2_HR.bmp", 0)
img2 = cv2.imread("Test2_LR2.bmp", 0)
ss = calculate_ssim(img1, img2)
print(ss)

总结

以上所述是小编给大家介绍的在python中计算ssim的方法(与Matlab结果一致),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现的文件同步服务器实例
Jun 02 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
详解django的serializer序列化model几种方法
Oct 16 Python
python函数声明和调用定义及原理详解
Dec 02 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
详解python itertools功能
Feb 07 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
Jun 05 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
Python类的继承super相关原理解析
Oct 22 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 #Python
Python命令行click参数用法解析
Dec 19 #Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 #Python
Python定义函数时参数有默认值问题解决
Dec 19 #Python
Python爬取腾讯视频评论的思路详解
Dec 19 #Python
使用Pandas将inf, nan转化成特定的值
Dec 19 #Python
pandas中read_csv的缺失值处理方式
Dec 19 #Python
You might like
简体中文转换为繁体中文的PHP函数
2006/10/09 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
Prototype Template对象 学习
2009/07/19 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
jQuery 隐藏/显示效果函数用法实例分析
2020/05/20 jQuery
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
利用python获得时间的实例说明
2013/03/25 Python
Python的lambda匿名函数的简单介绍
2013/04/25 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
windows下python安装pip方法详解
2020/02/10 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
用python批量下载apk
2020/12/29 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
Python如何定义一个函数
2015/09/01 面试题
副总经理任命书
2014/06/05 职场文书
2015年党性分析材料
2014/12/19 职场文书
2015年新学期寄语
2015/02/26 职场文书
大学生英文求职信范文
2015/03/19 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
Go timer如何调度
2021/06/09 Golang
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技