在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中的多重装饰器
Apr 11 Python
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
浅谈Python基础之I/O模型
May 11 Python
pycharm设置注释颜色的方法
May 23 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
值得收藏的10道python 面试题
Apr 15 Python
使用turtle绘制五角星、分形树
Oct 06 Python
如何在python中写hive脚本
Nov 08 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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来处理多个提交任务
2006/10/09 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JS简单实现移动端日历功能示例
2016/12/28 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
Python文件读取的3种方法及路径转义
2015/06/21 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
怎样写好自我鉴定
2013/12/04 职场文书
综合内勤岗位职责
2014/04/14 职场文书
受伤赔偿协议书
2014/09/24 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers