在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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python入门篇之列表和元组
Oct 17 Python
列举Python中吸引人的一些特性
Apr 09 Python
详解Python中expandtabs()方法的使用
May 18 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
python如何查看网页代码
Jun 07 Python
python实现单机五子棋
Aug 28 Python
Django 用户认证Auth组件的使用
Nov 30 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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生成扇形比例图实例
2013/11/06 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
angularjs 的数据绑定实现原理
2018/07/02 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
处理Python中的URLError异常的方法
2015/04/30 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
django项目搭建与Session使用详解
2018/10/10 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
乐观自信演讲稿范文
2014/05/21 职场文书
国贸专业求职信
2014/06/28 职场文书
2014年安全生产责任书
2014/07/22 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
食品安全承诺书范文
2014/08/29 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Python借助with语句实现代码段只执行有限次
2022/03/23 Python