在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利用正则表达式实现计算器算法思路解析
Apr 25 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
HTML的form表单和django的form表单
Jul 25 Python
python禁用键鼠与提权代码实例
Aug 16 Python
python中web框架的自定义创建
Sep 08 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
搭建pypi私有仓库实现过程详解
Nov 25 Python
python实现定时发送邮件
Dec 23 Python
flask框架中的cookie和session使用
Jan 31 Python
Python3使用Selenium获取session和token方法详解
Feb 16 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
Syphon 使用方法
2021/03/03 冲泡冲煮
优化PHP代码技巧的小结
2013/06/02 PHP
php多文件上传实现代码
2014/02/20 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
详解参数传递四种形式
2015/07/21 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python使用scrapy解析js示例
2014/01/23 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
外贸学院会计专业应届生求职信
2013/11/14 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
管理提升方案
2014/06/04 职场文书
科学发展观演讲稿
2014/09/11 职场文书
公司员工离职感言
2015/08/03 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python