计算机视觉:图像质量评价指标之 PSNR 和 SSIM

news2025/1/11 6:59:49

1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比

由上可见,PSNR相对MSE多了一个峰值,MSE是绝对误差,再加上峰值是一个相对误差指标 

一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1。

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

其中,第二和第三种方法比较常见。

# im1 和 im2 都为灰度图像,uint8 类型

# method 1
diff = im1 - im2
mse = np.mean(np.square(diff))
psnr = 10 * np.log10(255 * 255 / mse)

# method 2
psnr = skimage.measure.compare_psnr(im1, im2, 255)

compare_psnr(im_true, im_test, data_range=None) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。

在有损图像和视频压缩中,PSNR的典型值在30到50 dB之间,前提是位深度为8位,位深度越高越好。当12位时,PSNR值为60 dB或更高时,认为图像的处理质量较高。对于16位数据,典型的PSNR值在60 ~ 80db之间。无线传输质量损失的可接受值被认为是大约20 dB到25 dB。(供参考)

2. SSIM (Structural SIMilarity) 结构相似性

# im1 和 im2 都为灰度图像,uint8 类型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/795447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置IPv4 over IPv6隧道示例

IPv4 over IPv6隧道: 在IPv4 Internet向IPv6 Internet过渡后期,IPv6网络被大量部署后,而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公…

PV操作解决经典进程同步问题

一.经典同步问题 在学习《操作系统》时,会接触到进程的概念,其中不可避免的接触到进程同步问题,今天我们用熟悉的PV操作解决一些经典的进程同步问题。 二.生产者-消费者问题 1.问题描述 问题描述:一组生产者进程和一组消费者进…

Python-正则表达式(给同事培训篇2)

本篇依旧是我在公司给同事培训的内容,与上一篇类似,不过本篇会内容偏简单,会多讲两种。一起看看; 数据 datas """ [16:45:18]2 [16:45:18]# cap: 13, 12, 11 [16:45:18]cap: 13, 12, 11 [16:45:18]cap: 13, 12, 1…

elementUI this.$confirm 文字大小样式

dangerouslyUseHTMLString:true // message部分 以html片段处理 customClass //MessageBox 的自定义类名 整个comfirm框自定义类名 cancelButtonClass // 取消按钮的自定义类名 confirmButtonClass // 确定按钮的自定义类名<style> .addcomfirm{width: 500px; } .a…

IO进、线程——标准文件IO和时间函数

1.文件IO 最直观的系统调用 1.1打开文件 int open(const char *pathname, int flags, mode_t mode);功能&#xff1a;打开/创建后打开一个文件 返回值&#xff1a;成功返回文件描述符&#xff0c;失败-10 —— 标准输入 1 —— 标准输出 2 —— 标准出错参数说明&#xf…

Hive之窗口函数lag()/lead()

一、函数介绍 lag()与lead函数是跟偏移量相关的两个分析函数 通过这两个函数可以在一次查询中取出同一字段的前N行的数据(lag)和后N行的数据(lead)作为独立的列,从而更方便地进行进行数据过滤&#xff0c;该操作可代替表的自联接&#xff0c;且效率更高 lag()/lead() lag(c…

VS构建项目报错信息及解决办法05

报错信息及解决8&#xff1a; 报错信息详情&#xff1a;无法解析的外部符号“__iob_func” 原因&#xff1a;因VS不同版本之间对stdin,stdout,stder的定义不同&#xff0c;导致不同VS版本之间无法正确的调用函数。 eg: * 当libjpeg-turbo为vs2010编译时&#xff0c;vs2015下…

qsort的使用及模拟实现

qsort函数是C语言库中提供的一种快速排序&#xff0c;头文件是stdlib.h qsort的使用 qsort函数需要四个参数&#xff1a; 1.排序的起始位置的地址&#xff08;数组名&#xff09;: arr 2.排序元素的个数&#xff1a; sizeof&#xff08;arr)/sizeof(arr[0]) 3.排序元素…

使用BERT分类的可解释性探索

最近尝试了使用BERT将告警信息当成一个文本去做分类&#xff0c;从分类的准召率上来看&#xff0c;还是取得了不错的效果&#xff08;非结构化数据强标签训练&#xff0c;BERT确实是一把大杀器&#xff09;。但准召率并不是唯一追求的目标&#xff0c;在安全场景下&#xff0c;…

java中线程池、Lambda表达式、file类、递归

线程池&#xff1a; 在多线程的使用过程中&#xff0c;会存在一个问题&#xff1a;如果并发的线程数量很多&#xff0c;并且每个线程都执行一个时间很短的任务就结束&#xff0c;这样频繁的创建线程就会大大降低系统的效率&#xff0c;因为线程的创建和销毁都需要时间。 线程…

maven编译报错

参考链接&#xff1a;mvn打包No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK_51CTO博客_mvn打包命令 在执行 yum install -y java-1.8.0-opensdk命令后&#xff0c;使用maven去编译打包&#xff0c;结果报错&#xff0c; …

体渲染光线行进算法【NeRF必读】

为了积分由于内散射而沿射线产生的入射光&#xff0c;我们将射线穿过的体块分解为小体块元素&#xff0c;并将每个小体块元素对整个体块对象的贡献结合起来&#xff0c;有点像我们在 2D 编辑软件&#xff08;例如 Photoshop&#xff09;中将带有遮罩或 Alpha 通道&#xff08;通…

ClickHouse(三):ClickHouse单节点搭建

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,随笔-CSDN博客 &#x1f4cc;订阅&#xff1a;拥抱…

pytorch学习——线性神经网络——1线性回归

概要&#xff1a;线性神经网络是一种最简单的神经网络模型&#xff0c;它由若干个线性变换和非线性变换组成。线性变换通常表示为矩阵乘法&#xff0c;非线性变换通常是一个逐元素的非线性函数。线性神经网络通常用于解决回归和分类问题。 一.线性回归 线性回归是一种常见的机…

WebGPU(八):三角形渲染

WebGPU(八)&#xff1a;三角形渲染 三角形的渲染其实很简单&#xff0c;只是需要设置很详细的render pipeline以及shader。 // Select which render pipeline to use wgpuRenderPassEncoderSetPipeline(renderPass, pipeline); // Draw 1 instance of a 3-vertices shape wgp…

C# 全局响应Ctrl+Alt+鼠标右键

一、简述 某些应用&#xff0c;我们希望全局自定义热键。按键少了会和别的应用程序冲突&#xff0c;按键多了可定用户操作不变。因此我计划左手用CtrlAlt&#xff0c;右手用鼠标右键呼出我自定义的菜单。 我使用键盘和鼠标事件进行简单测试&#xff08;Ctrl鼠标右键&#xff…

TypeScript -- 函数

文章目录 TypeScript -- 函数JS -- 函数的两种表现形式函数声明函数的表达式es6 箭头函数 TS -- 定义一个函数TS -- 函数声明使用接口(定义)ts 定义参数可选参数写法 -- ?的使用TS函数 -- 设置剩余参数函数重载 TypeScript – 函数 JS – 函数的两种表现形式 我们熟知js有两…

MySQLExplain详解

Explain使用场景 查询性能优化&#xff1a;EXPLAIN可以帮助开发者分析查询语句的执行计划&#xff0c;判断是否有效地使用了索引、是否有可能导致全表扫描等性能问题。通过EXPLAIN的输出&#xff0c;可以找到潜在的性能瓶颈&#xff0c;并优化查询语句、创建合适的索引或调整表…

Win11虚拟机安装并使用

windows11 虚拟机安装 操作如下&#xff1a;1.进入微软官网2.打开虚拟机应用创建新虚拟机3.选择刚下载IOS文件4 设置虚拟机磁盘空间大小&#xff0c;这个数字可以随便写&#xff0c;反正都是虚拟的&#xff0c;但不可以低于64GB。下面的是否拆分磁盘文件&#xff0c;可更具需要…

大数据课程C4——ZooKeeper结构运行机制

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息&#xff1b; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO&#xff1b; 一、Zookeeper-简介 1. 特点…