在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中os和shutil模块实用方法集锦
May 13 Python
Python中bisect的用法
Sep 23 Python
跟老齐学Python之让人欢喜让人忧的迭代
Oct 02 Python
在Python中处理XML的教程
Apr 29 Python
python3.5基于TCP实现文件传输
Mar 20 Python
pycharm的console输入实现换行的方法
Jan 16 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Keras: model实现固定部分layer,训练部分layer操作
Jun 28 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
Jul 03 Python
python中xlutils库用法浅析
Dec 29 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之PHP语法学习笔记1
2006/12/17 PHP
PHP 日期加减的类,很不错
2009/10/10 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
如何判断php数组的维度
2013/06/10 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
PHP代码优化技巧小结
2015/09/29 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
django 创建过滤器的实例详解
2017/08/14 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
2015年药店店长工作总结
2015/04/29 职场文书
少年雷锋观后感
2015/06/10 职场文书
2019财务转正述职报告
2019/06/27 职场文书