光谱图像常见评价指标

news2024/9/21 13:40:17

光谱图像常见评价指标

    • 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}")

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

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

相关文章

为什么越来越多人选择学习Python?

今天我要和大家聊聊一个很热门的话题:为什么那么多人学习Python? 最近小编发现一个有趣的现象,高中生们居然在学校课程里学Python,这不仅给我们这些已经毕业多年的人当头一棒,更是彻底颠覆了传统观念。现在的高中生竟…

国产化区块链平台-FISCO BCOS 区块链

目录 FISCO BCOS 版本信息 系统概述 关键特性 组件服务 开发运维工具 FISCO BCOS作为一种企业级区块链平台,为企业和组织提供了高性能、隐私保护和可定制的区块链解决方案。其强大的架构和丰富的功能使得企业能够在安全可信的环境中开展区块链应用&#xff0…

【Linux】C文件系统详解(四)——磁盘的物理和抽象结构

文章目录 磁盘结构磁盘物理结构磁盘的具体物理结构磁盘结构的逻辑抽象 文件系统BootBlockSuperBlockGroupDescriptorTableinode tableDataBlocksinodeBitmapblockBitmaplinux中的inode 和文件名如何理解文件的增删查改删 补充细节1.如果文件误删了,我们该怎么办?2.inode确定分…

SMART PLC数值积分器功能块(矩形+梯形积分法完整源代码)

PLC的数值积分器算法也可以参考下面文章链接: PLC算法系列之数值积分器(Integrator)-CSDN博客文章浏览阅读1.5k次,点赞3次,收藏3次。数值积分和微分在工程上的重要意义不用多说,闭环控制的PID控制器就是积分和微分信号的应用。流量累加也会用到。有关积分运算在流量累加上…

充电桩负载测试需要检测哪些项目

充电桩负载测试在进行充电桩负载测试时,需要检测以下几个项目: 充电速度:测试充电桩的充电速度,包括直流充电桩的最大输出功率和交流充电桩的充电功率,以确定其是否符合标准要求。充电效率:测试充电桩的充电…

横向扩展统一存储备份解决方案的特点与优势

Infortrend 使企业能够实现高效和可靠的数据备份,确保业务不间断的运行,保护有价值的业务信息。用户可以依靠我们的存储解决方案实现恢复时间目标(RTO)和恢复点目标(RPO),用于广泛的备份应用场景…

【网络安全】国家专利局专利办理系统存在信息泄漏风险

今天在办理专利的时候,发现该系统存在严重的信息泄漏问题。 废话少说,贴图为证。 每一个都可以点开,查看身份证、港澳通信证扫描件,很清晰。 本人没找到可以反馈的渠道,微博被限流。 发此贴只为警醒相关主管部门和运…

JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素

例如&#xff0c;下面这段请求的xml代码&#xff0c;在元素body下面又多了一层&#xff0c;嵌套了4个元素&#xff1a; <?xml version"1.0" encoding"UTF-8"?><request><reqtype>04</reqtype><secret>test</secret>…

2005B 2.4W AB类音频功率放大器应用领域

2005B 2.4W AB类音频功率放大器应用领域&#xff1a;1、便携式DVD&#xff1b;2、笔记本电脑&#xff1b;3、插卡音箱 / USB音箱&#xff1b;4、液晶电视 / 液晶显示器等等。 2005B是一颗单通道AB类音频功率放大器。在5V 电源供电&#xff0c;THDN10%&#xff0c;4欧姆负载上可…

QQ同步通讯录,详细操作方法来了!

腾讯QQ是一款功能丰富的即时通信软件&#xff0c;能够让用户随时随地与好友保持联系&#xff0c;不受时间和地域限制&#xff0c;受到了广大用户的喜爱和信赖。 为了能够快速添加QQ好友&#xff0c;我们可以通过开启通讯录来实现。那么&#xff0c;qq同步通讯录如何操作呢&…

YOLOv8改进 | 2023 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数

论文地址&#xff1a;官方Inner-IoU论文地址点击即可跳转 官方代码地址&#xff1a;官方代码地址-官方只放出了两种结合方式CIoU、SIoU 本位改进地址&#xff1a; 文末提供完整代码块-包括InnerEIoU、InnerCIoU、InnerDIoU等七种结合方式和其Focus变种 一、本文介绍 本文给…

53. 最大子数组和 : 图解从 O(n) 的常规理解到 O(n) 的分治做法

题目描述 这是 LeetCode 上的 「53. 最大子数组和」 &#xff0c;难度为 「中等」。 Tag : 「前缀和」、「区间求和问题」、「线性 DP」、「分治」 给你一个整数数组 nums&#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#…

NC Cloud uploadChunk文件上传漏洞复现

简介 NC Cloud是指用友公司推出的大型企业数字化平台。支持公有云、混合云、专属云的灵活部署模式。该产品uploadChunk文件存在任意文件上传漏洞。 漏洞复现 FOFA语法&#xff1a; app"用友-NC-Cloud" 访问页面如下所示&#xff1a; POC&#xff1a;/ncchr/pm/fb/…

酷柚易汛ERP - 客户等级操作指南

1、应用场景 客户等级用于整个系统对客户进行分级&#xff0c;同一商品可设定多个不同价格&#xff0c;当然这个价格是以客户等级进行区分。 注意&#xff1a;系统中默认设定五种等级&#xff0c;默认等级是不允许删除和禁用&#xff0c;新增的客户等级是可以删除和禁用。

【文末送书】十大排序算法及C++代码实现

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

球幕投影有哪些常见的物理表现形式?

近年来&#xff0c;投影技术不断发展完善&#xff0c;给内容的表达方式带来了突破&#xff0c;使其展示形式不再局限于平面&#xff0c;即使在弧面、球面等异形幕墙上&#xff0c;也能呈现出令人惊叹的视觉画面。其中球幕投影备受关注&#xff0c;它以半球形屏幕将图像投影到球…

SAP ABAP给指定用户增加SAP ALL权限

下面的例子是给指定用户增加SAP ALL的权限ABAP代码&#xff0c;增加指定权限对像的没研究&#xff0c;只能自己看了。这应该是SAP权限的无限破解了吧。 例子中SAP*,是当前系统中有SAP_ALL权限的一个用户&#xff0c;用来参考使用的&#xff0c;根据实际系统用的最大权限用户&a…

webpack快速上手之搭建cesium三维地球环境

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 Cesium介绍 初始化一个Cesium地球 ​编辑 Webpack的使用 Webpac…

SAP权限设计简介

介绍 小技巧 -ERP 权限控制 繁中求简 , 闲聊一下 SAP 复杂权限设计的基本思想。 特别是适合大集团业务的 ERP 系统 , 应该提供一个非常完善的权限控制机制 , 甚至允许将权限控制字段细到字段级别&#xff0c;如果权限控制都做不到这点&#xff0c;估计产品销售就够呛&#x…

一些损失函数的学习

CrossEntropy loss 交叉熵是用来衡量两个概率分布之间的差异性或不相似性的度量交叉熵定义为两个概率分布p和q之间的度量。其中&#xff0c;p通常是真实分布&#xff0c;而q是模型预测的分布 交叉熵还等于信息熵 相对熵 这里&#xff0c;x遍历所有可能的事件&#xff0c;p(x)…