在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脚本实现批量网站存活检测遇到问题及解决方法
Oct 11 Python
详解python调度框架APScheduler使用
Mar 28 Python
pandas对指定列进行填充的方法
Apr 11 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
Python连接字符串过程详解
Jan 06 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
利用Python如何画一颗心、小人发射爱心
Feb 21 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下连接mssql2005的代码
2011/01/17 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python实现字典依据value排序
2016/02/24 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Python单元测试实例详解
2018/05/25 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
python适合人工智能的理由和优势
2019/06/28 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
干部个人考察材料
2014/12/24 职场文书
建房合同协议书
2016/03/21 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL