在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中的过滤器
Jul 16 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
儿童学习python的一些小技巧
May 27 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
python3安装crypto出错及解决方法
Jul 30 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
Python Matplotlib绘制两个Y轴图像
Apr 13 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
Python实现括号匹配方法详解
2020/02/10 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
Python 在局部变量域中执行代码
2020/08/07 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
旷课检讨书2000字
2014/01/14 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
公务员个人考察材料
2014/12/23 职场文书
少年雷锋观后感
2015/06/10 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
Python实现日志实时监测的示例详解
2022/04/06 Python
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS