在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 相关文章推荐
Django 实现下载文件功能的示例
Mar 06 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
python代码如何实现余弦相似性计算
Feb 09 Python
Win 10下Anaconda虚拟环境的教程
May 18 Python
Python实现壁纸下载与轮换
Oct 19 Python
Python3 类型标注支持操作
Jun 02 Python
Python作用域和名称空间的详细介绍
Apr 13 Python
python通过新建环境安装tfx的问题
May 20 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
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
删除html标签得到纯文本可处理嵌套的标签
2014/04/28 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
浅谈php自定义错误日志
2015/02/13 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python复制文件的方法实例详解
2015/05/22 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python模拟登陆实现代码
2017/06/14 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python调用接口的4种方式代码实例
2019/11/19 Python
pytorch模型预测结果与ndarray互转方式
2020/01/15 Python
Python生成器常见问题及解决方案
2020/03/21 Python
Django如何实现防止XSS攻击
2020/10/13 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
《小小雨点》教学反思
2014/02/18 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
初中毕业生感言
2015/07/31 职场文书
MySQL锁机制
2021/04/05 MySQL
pycharm debug 断点调试心得分享
2021/04/16 Python