在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的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Windows下python2.7.8安装图文教程
May 26 Python
Django与JS交互的示例代码
Aug 23 Python
Python解决走迷宫问题算法示例
Jul 27 Python
python调用staf自动化框架的方法
Dec 26 Python
在Pycharm中自动添加时间日期作者等信息的方法
Jan 16 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
python2和python3哪个使用率高
Jun 23 Python
python不同系统中打开方法
Jun 23 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python实现不同数据库间数据同步功能
Feb 25 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实现数字补零功能的2个函数介绍
2014/05/12 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
js 动态文字滚动的例子
2011/01/17 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python执行get提交的方法
2015/04/29 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python中functools模块的常用函数解析
2016/06/30 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
python集合删除多种方法详解
2020/02/10 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
python中yield的用法详解
2021/01/13 Python
英语系毕业生自荐信
2013/10/31 职场文书
婚纱店策划方案
2014/05/22 职场文书
博士生专家推荐信
2014/09/26 职场文书
未婚证明书模板
2014/10/08 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
小学生读书笔记
2015/07/01 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
实战Python爬虫爬取酷我音乐
2022/04/11 Python
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python