在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服务器与android客户端socket通信实例
Nov 12 Python
Python中的zipfile模块使用详解
Jun 25 Python
Python 查看文件的读写权限方法
Jan 23 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
python实现QQ空间自动点赞功能
Apr 09 Python
使用python接入微信聊天机器人
Mar 31 Python
python实现windows倒计时锁屏功能
Jul 30 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 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.MVC的模板标签系统(四)
2006/09/05 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
python超简单解决约瑟夫环问题
2015/05/12 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
使用Python三角函数公式计算三角形的夹角案例
2020/04/15 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
如何写你的创业计划书
2014/01/07 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
英语复习计划
2015/01/19 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
Python合并pdf文件的工具
2021/07/01 Python
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python