光谱图像常见评价指标

光谱图像常见评价指标

    • SAM(Spectral Angle Mapper)
    • RMSE——Root Mean Square Error
    • PSNR
    • SSIM
    • MSSIM
    • EGARS

SAM(Spectral Angle Mapper)

​ SAM算法是由Kruse等[146]在1993年提出,把图像中的每个像元的光谱视为一个高维向量,通过计算两向量间的夹角来度量光谱间的相似性,夹角越小,两光谱越相似,属于同类地物的可能性越大,因而可根据光谱角的大小来辨别未知数据的类别。分类时,通过计算未知数据与已知数据间的光谱角,并把未知数据的类别归为最小光谱角对应的类别中。

2023-10-28_17-17-41

# Loss_SAM 类定义了结构相似性(SAM)的损失函数。
# forward 方法接受两个输入图像(im1 和 im2)作为输入。
# 函数首先确保两个图像具有相同的形状,然后进行一系列操作以计算结构相似性(SAM)。
# 结构相似性度量被计算为两个输入图像之间的平均值,并作为输出返回。
# 请注意,此实现中使用了 NumPy 而不是 PyTorch 张量,您可能需要将其转换为 PyTorch 操作以使其适用于深度学习模型的训练。
class Loss_SAM(nn.Module):
    def __init__(self):
        super(Loss_SAM, self).__init__()
        #一个正则项,添加到分母和分子中,以防止除以零或对接近 1 的值取反余弦函数。
        self.eps = 2.2204e-16

    def forward(self, im1, im2):
        assert im1.shape == im2.shape
        H, W, C = im1.shape
        im1 = np.reshape(im1, (H * W, C))
        im2 = np.reshape(im2, (H * W, C))
        core = np.multiply(im1, im2)
        mole = np.sum(core, axis=1)
        im1_norm = np.sqrt(np.sum(np.square(im1), axis=1))
        im2_norm = np.sqrt(np.sum(np.square(im2), axis=1))
        deno = np.multiply(im1_norm, im2_norm)
        sam = np.rad2deg(np.arccos(((mole + self.eps) / (deno + self.eps)).clip(-1, 1)))
        return np.mean(sam)
  1. 对于 x i T x ∗ x_i^Tx^* xiTx,相当于对这两个向量进行点积然后再进行求和。den=np.sum(np.dot(im1,im2))

  2. 内积为向量与转置的乘积。

      im1_norm = np.sqrt(np.sum(np.square(im1), axis=1))
      im2_norm = np.sqrt(np.sum(np.square(im2), axis=1))
      deno = np.multiply(im1_norm, im2_norm)
    

RMSE——Root Mean Square Error

2023-10-28_17-16-30

# Loss_RMSE 类定义了均方根误差(RMSE)的损失函数。
# forward 方法接受输出(outputs)和标签(label)作为输入。
# 函数首先确保输出和标签具有相同的形状,然后计算它们之间的均方根误差(RMSE)。

class Loss_RMSE(nn.Module):
    def __init__(self):
        super(Loss_RMSE, self).__init__()

    def forward(self, outputs, label):
        assert outputs.shape == label.shape
        error = outputs.clamp(0., 1.) * 255 - label.clamp(0., 1.) * 255
        sqrt_error = torch.pow(error, 2)
        rmse = torch.sqrt(torch.mean(sqrt_error.contiguous().view(-1)))
        return rmse
  1. outputs.clamp(0., 1.) * 255 - label.clamp(0., 1.) * 255将数值映射到(0-1),并放到到255,因为图像中的像素值通常是0-255的数值

  2. ∑ i = 1 n ( Y i − f ( x i ) ) 2 \sum_{i=1}^{n}\left(Y_{i}-f\left(x_{i}\right)\right)^{2} i=1n(Yif(xi))2对平方误差进行求平均值,

    其中.contiguous(): 这是一个方法调用,通常用于确保张量在内存中的布局是连续的。在某些情况下,PyTorch张量可能不是连续的,这可能会导致一些计算问题。.contiguous() 方法将确保张量的内存布局是连续的。.view(-1): 这是一个形状变换操作。它将张量重新整形为一维张量,其中"-1" 表示根据张量的大小自动推断新的形状。这通常用于将多维张量展平为一维,以便进行后续计算或操作。

PSNR

是一个表示讯号最大可能功率和影响它的表示精度的破坏性噪声)功率的比值的工程术语。由于许多讯号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。

2023-10-28_17-15-19

# Loss_PSNR 类定义了计算峰值信噪比(PSNR)的损失函数。
# forward 方法接受真实图像(im_true)和生成图像(im_fake)作为输入。
# data_range 参数用于指定数据范围,默认为255。
# 函数首先将输入图像缩放到指定数据范围,然后计算图像之间的均方差误差(err)。
# 最后,通过计算 PSNR 并返回平均 PSNR 值。
class Loss_PSNR(nn.Module):
    def __init__(self):
        super(Loss_PSNR, self).__init__()

    def forward(self, im_true, im_fake, data_range=255):
        Itrue = im_true.clamp(0., 1.) * data_range
        Ifake = im_fake.clamp(0., 1.) * data_range
        err = Itrue - Ifake
        err = torch.pow(err, 2)
        err = torch.mean(err, dim=0)
        err = torch.mean(err, dim=0)

        psnr = 10. * torch.log10((data_range ** 2) / err)
        psnr = torch.mean(psnr)
        return psnr

SSIM

结构相似性指标[1](英语:structural similarity index,SSIM index)是一种用以衡量两张数字图像相似程度的指标。当两张图像其中一张为无失真图像,另一张为失真后的图像,二者的结构相似性可以看成是失真图像的图像质量衡量指标。相较于传统所使用的图像质量衡量指标,像是峰值信噪比(英语:PSNR),结构相似性在图像质量的衡量上更能符合人眼对图像质量的判断[2][3]

结构相似性 - 维基百科,自由的百科全书 (wikipedia.org)

2023-10-28_17-22-20

from skimage.metrics import structural_similarity as compare_ssim

MSSIM

MSSIM用于计算两幅高光谱图像之间的平均结构相似度。MSSIM计算方法很简单,只需要分别计算不同波段的SSIM指数,取均值就可以了。

def mssim(x_true,x_pred):
    """
        :param x_true: 高光谱图像:格式:(H, W, C)
        :param x_pred: 高光谱图像:格式:(H, W, C)
        :return: 计算原始高光谱数据与重构高光谱数据的结构相似度
    """
    SSIM = compare_ssim(X=x_true, Y=x_pred, multichannel=True)
    return SSIM

EGARS

ERGAS(全称:Normalized Global Error (ERGAS))是一种用于评估遥感图像质量的指标。它通常用于评估图像处理或压缩算法的性能,以及遥感图像的质量,特别是在图像压缩、图像增强和图像恢复等领域中。

ERGAS的计算公式如下:

E R G A S = 1 N ∑ i = 1 N ( 100 L 1 M S E i ∑ j = 1 L ( R M S E i j Y i ) 2 ) ERGAS = \sqrt{\frac{1}{N} \sum_{i=1}^{N} \left( \frac{100}{L} \sqrt{\frac{1}{MSE_i} \sum_{j=1}^{L} \left(\frac{RMSE_{ij}}{Y_i}\right)^2}\right)} ERGAS=N1i=1N L100MSEi1j=1L(YiRMSEij)2
其中,

  • N表示图像的波段数;
  • L表示图像的灰度级数;
  • M S E i MSE_i MSEi是第i个波段的均方误差(Mean Squared Error);
  • R M S E i j RMSE_{ij} RMSEij是第i个波段中第j个像素的均方根误差(Root Mean Squared Error);
  • Y i Y_i Yi是第i个波段的平均亮度。

ERGAS的值通常以百分比表示,越低的ERGAS值表示图像质量越高。ERGAS主要用于比较不同图像处理算法或压缩方法的性能,以确定它们对图像质量的影响。

总的来说,ERGAS是一种用于评估遥感图像质量的定量指标,它考虑了图像的均方误差、均方根误差以及亮度信息,以提供对图像处理或压缩算法性能的综合评估。

import numpy as np

# 定义一个函数来计算ERGAS
def calculate_ergas(reference_image, processed_image):
    # 获取图像的尺寸
    height, width, num_bands = reference_image.shape

    # 初始化变量用于计算各个波段的MSE和RMSE
    mse_values = []
    rmse_values = []

    for band in range(num_bands):
        # 计算MSE(均方误差)
        mse = np.mean((reference_image[:, :, band] - processed_image[:, :, band]) ** 2)
        mse_values.append(mse)

        # 计算RMSE(均方根误差)
        rmse = np.sqrt(mse)
        rmse_values.append(rmse)

    # 计算每个波段的平均亮度
    average_brightness = [np.mean(reference_image[:, :, band]) for band in range(num_bands)]

    # 定义常数参数
    N = num_bands
    L = 256  # 假设灰度级数为256

    # 计算ERGAS
    ergas_values = []
    for mse, rmse, Y in zip(mse_values, rmse_values, average_brightness):
        ergas_values.append((100 / L) * np.sqrt(1 / mse) * (rmse / Y) ** 2)
    
    ergas = np.sqrt((1 / N) * np.sum(ergas_values))

    return ergas

# 示例用法
if __name__ == "__main__":
    # 假设有两遥感图像:reference_image为参考图像,processed_image为经过处理的图像
    # 这里使用随机生成的示例图像数据,您应该替换为实际数据
    height, width, num_bands = 100, 100, 3
    reference_image = np.random.rand(height, width, num_bands)
    processed_image = np.random.rand(height, width, num_bands)

    # 计算ERGAS值
    ergas_value = calculate_ergas(reference_image, processed_image)
    print(f"ERGAS值为: {ergas_value}")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker之微服务实战(一个小的java的jar包发布运行测试test)

Docker微服务实战 1、通过IDEA新建一个普通微服务模块 (在工具idea里面新建项目…,) 通过dockerfile发布微服务部署到docker容器 2、IDEA工具里面搞定微服务jar包 docker_boot-0.0.1-SNAPSHOT.jar 3、编写Dockerfile # 基础镜像使用java FR…

kafka本地安装报错

Error: VM option ‘UseG1GC’ is experimental and must be enabled via -XX:UnlockExperimentalVMOptions. #打开 bin/kafka-run-class.sh KAFKA_JVM_PERFORMANCE_OPTS“-server -XX:UseG1GC -XX:MaxGCPauseMillis20 -XX:InitiatingHeapOccupancyPercent35 -XX:ExplicitGCInv…

html-网站菜单-点击菜单展开相应的导航栏,加减号可切换

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…

QQ自动批量加好友(手机端)

1.需求 按照格式输入批量qq号,输入加好友间隔时间,脚本自动打开qq应用开始自动加好友,全程自动化操作。 输入qq号格式: 运行示意图: 2.代码 function carmiLogin () {var carmi = getCarMi()try {const data = {"key": carmi}http.__okhttp__.setTimeout(3000…

“富二代”极氪,辉煌过后总要独自长大

文丨刘俊宏 极氪&#xff0c;可能是跑得最快的造车新势力。 首先是推出新产品的速度。11月7日&#xff0c;极氪新的轿车极氪007在广州车展开启预售。从首次发布的极氪001算起&#xff0c;极氪用时不到3年便已拥有了5款产品。 这五款新品的销量&#xff0c;在新势力当中也说得…

纽扣电池ANSI/UL4200A-2023安全合规标准是什么?

关于联邦 强制性安全标准 ANSI/UL 4200A-2023 近来&#xff0c;与纽扣电池相关的死亡和严重伤害越来越多。 美国消费品安全委员会(以下简称CPSC)的工作人员正在参与消费品电池相关的法规制定&#xff0c;包括采用UL 4200A-2023锂技术的纽扣或硬币电池的产品安全标准。 202…

2023年中国温热电灸综合治疗仪发展趋势分析:产品渗透率将进一步增长[图]

温热电灸综合治疗仪是传统中医针灸结合现代低频脉冲电刺激和电加热的一款现代化电针灸治疗仪器。其基于传统的艾灸原理及现代神经和肌肉电刺激原理&#xff0c;通过电子加热和磁化作用&#xff0c;充分利用艾草及其它特效药材精炼的高效成分&#xff0c;同时对人体多个穴位进行…

Chat GPT 用于论文润色,常用指令这里都全了

ChatGPT在多个方面对科研人员提供帮助&#xff0c;其中之一就是SCI论文润色&#xff0c;通过输入论文的摘要、引言或者段落&#xff0c;科研人员可获得ChatGPT生成的回复&#xff0c;包括修改建议、语法纠正、表达方式优化等。 指令润色 比如&#xff1a; 请帮我润色论文&am…

山西电力市场日前价格预测【2023-11-21】

1.日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-21&#xff09;山西电力市场全天平均日前电价为278.73元/MWh。其中&#xff0c;最高日前电价为367.26元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计…

图神经网络:消息传递算法

一、说明 图网络-GNN&#xff08;Graph Neural Networks&#xff09;是近几年研究的主题之一&#xff0c;虽不及深度神经网络那么火爆&#xff0c;但在一些领域&#xff0c;如分子化学方面是不得不依赖的理论。本文就一些典型意义的图神经网络消息传递展开阐述。 二、图网络简述…

【LeetCode:689. 三个无重叠子数组的最大和 | 序列dp+前缀和】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Django 入门学习总结2

通过学习&#xff0c;我们可以实现一个简单的投票系统。这个投票系统有两部分组成。 公共部分&#xff0c;公众可以查看和进行投票。管理员可以进行增加、删除、修改投票信息。 这里投票系统Python语言版本为3.10.13&#xff0c;Django Web框架版本为4.2.7。 投票系统的实现…

浪涌防护器件要选对,布局布线更重要!|深圳比创达电子EMC(下)

浪涌测试&#xff0c;作为最常见的EMC抗干扰测试项目之一&#xff0c;基本上是家用消费电子必测的项目&#xff1b;其测试目的是为了验证产品在承受外部的浪涌冲击时能否正常工作。 一、比创达整改案例 1) 背景&#xff1a; 某智能插座产品在浪涌测试&#xff0c;需要过2kV差…

分布式与微服务 —— 初始

前言 距今微服务的提出已经过去快十个春秋&#xff0c;网络上的博文讲微服务也是一抓一大把&#xff0c;但是荔枝仍然觉得还是有必要自己梳理一下整个知识体系。在这篇文章中&#xff0c;荔枝将会以一个初学者的角度来切入&#xff0c;从分布式系统和微服务架构引入&#xff0c…

NTLM 认证支持的添加与实现

我在psf/requests项目中报告了bug #932&#xff0c;并提出了一个关于支持HTTP NTLM认证的问题。这篇文章将详细介绍问题背景和解决方案。 HTTP NTLM认证是一种用于验证用户身份的协议。在某些场景下&#xff0c;用户可能需要使用NTLM认证才能访问某些网站或资源。然而&#xff…

2023年中国农业机器人行业市场规模及发展趋势分析[图]

农业机器人是一种机器&#xff0c;是机器人在农业生产中的运用&#xff0c;是一种可由不同程序软件控制&#xff0c;以适应各种作业,能感觉并适应作物种类或环境变化&#xff0c;有检测(如视觉等)和演算等人工智能的新一代无人自动操作机械。 农业机器人分类 资料来源&#xf…

基于纹理特征的kmeas聚类的图像分割方案

Gabor滤波器简介 在图像处理中&#xff0c;以Dennis Gabor命名的Gabor滤波器是一种用于纹理分析的线性滤波器&#xff0c;本质上是指在分析点或分析区域周围的局部区域内&#xff0c;分析图像中是否存在特定方向的特定频率内容。Gabor滤波器的频率和方向表示被许多当代视觉科学…

亚马逊云科技帮助客户在云中构建具有高可靠性和韧性的应用程序

在一个理想的世界里&#xff0c;一切都非常完美&#xff0c;并且一直都在顺畅运作。早晨的通勤没有交通堵塞&#xff0c;最喜欢的停车位一直空着&#xff0c;一杯温度适宜的饮料&#xff0c;生活一帆风顺&#xff0c;没有任何中断。在需要时&#xff0c;您能得到所需的东西。但…

LeetCode207.课程表

看完题我就想&#xff0c;这不就是进程里面的死锁问题嘛&#xff0c;进程1等进程2释放锁&#xff0c;进程2等进程3释放锁&#xff0c;进程3等进程1释放锁&#xff0c;这就造成了死锁。或者是spring中的循环依赖问题&#xff0c;BeanA的初始化需要初始化一个BeanB&#xff0c;Be…

释放固态继电器的力量:主要优势和应用

固态继电器&#xff08;SolidStateRelay&#xff0c;缩写SSR&#xff09;&#xff0c;是由微电子电路&#xff0c;分立电子器件&#xff0c;电力电子功率器件组成的无触点开关。用隔离器件实现了控制端与负载端的隔离。固态继电器的输入端用微小的控制信号&#xff0c;达到直接…