1. 引言

做遥感超分辨率重建有一段时间了,其中重要一环就是评价重建质量。对于遥感影像的重建来说,一般有 RMSE , ERGAS , SAM , SRE 等。对于数学解释,本文不做介绍。

2.Python实现

2.1 RMSE(均方根误差)

注意fake_hr为我的重建影像,real_hr为真实label影像。

def rmse(fake_hr, real_hr):
    if len(fake_hr.shape) == 3:
        channels = fake_hr.shape[2]
    else:
        channels = 1
        fake_hr = np.reshape(fake_hr, (fake_hr.shape[0], fake_hr.shape[1], 1))
        real_hr = np.reshape(real_hr, (real_hr.shape[0], real_hr.shape[1], 1))
    fake_hr = fake_hr.astype(np.float32)
    real_hr = real_hr.astype(np.float32)
    def single_rmse(img1, img2):
        diff = img1 - img2
        mse = np.mean(np.square(diff))
        return np.sqrt(mse)
    rmse_sum = 0
    for band in range(channels):
        fake_band_img = fake_hr[:, :, band]
        real_band_img = real_hr[:, :, band]
        rmse_sum += single_rmse(fake_band_img, real_band_img)
    rmse = round(rmse_sum, 2)
    return rmse
2.2 ERGAS

ERGAS的计算是在RMSE的基础之上的。

def ERGAS(hr_mul, label, lr_mul):
    calc ergas.
    h = 30 #高分辨率影像分辨率
    l = 120 #低分辨率影像分辨率
    # 此处也可通过列数计算,此处只是完全按照定义来看
    channels = hr_mul.shape[2]
    inner_sum = 0
    for channel in range(channels):
        band_img1 = hr_mul[:, :, channel]
        band_img2 = label[:, :, channel]
        band_img3 = lr_mul[:, :, channel]
        rmse_value = rmse(band_img1, band_img2)
        m = np.mean(band_img3)
        inner_sum += np.power((rmse_value/m), 2)
    mean_sum = inner_sum/channels
    ergas = 100*(h/l)*np.sqrt(mean_sum)
    return ergas
2.3 SAM(波谱角)

这段代码完全是PSGAN论文计算的代码,下面给出论文名称:

PSGAN: A Generative Adversarial Network for Remote Sensing Image Pan-sharpening

值得注意的是,这段代码计算出来是弧度制,一般的论文对比时还要转换成角度制。

def SAM(x_true, x_pred):
	"calculate method in PSGAN code"
	assert x_true.ndim ==3 and x_true.shape == x_pred.shape
	dot_sum = np.sum(x_true*x_pred,axis=2)
	norm_true = np.linalg.norm(x_true, axis=2)
	norm_pred = np.linalg.norm(x_pred, axis=2)
	res = np.arccos(dot_sum/norm_pred/norm_true)
	is_nan = np.nonzero(np.isnan(res))
	for (x,y) in zip(is_nan[0], is_nan[1]):
	    res[x,y]=0
	sam = np.mean(res)
	return sam
2.4 SRE(信号与重构误差比)
def sre(pred_img, org_img):
    org_img = org_img.astype(np.float32)
    sre_final = []
    for i in range(org_img.shape[2]):
        numerator = np.square(np.mean(org_img[:, :, i]))
        denominator = (np.linalg.norm(org_img[:, :, i] - pred_img[:, :, i])) /\
                      (org_img.shape[0] * org_img.shape[1])
        sre_final.append(numerator/denominator)
    return 10 * np.log10(np.mean(sre_final))
                                    ​	SAM算法是由Kruse等[146]在1993年提出,把图像中的每个像元的光谱视为一个高维向量,通过计算两向量间的夹角来度量光谱间的相似性,夹角越小,两光谱越相似,属于同类地物的可能性越大,因而可根据光谱角的大小来辨别未知数据的类别。总的来说,ERGAS是一种用于评估遥感图像质量的定量指标,它考虑了图像的均方误差、均方根误差以及亮度信息,以提供对图像处理或压缩算法性能的综合评估。后的图像,二者的结构相似性可以看成是失真图像的图像质量衡量指标。在图像质量的衡量上更能符合人眼对图像质量的判断[
                                    参考论文:
On the Performance Evaluation of Pan-Sharpening Techniques
Evaluation of pan-sharpening methods for spatial and spectral quality
Pan-sharpening of multi-spectral images using a new variational m...
                                    在图像处理中,MAT(Matrix)模式是一种常见的表示图像的数据结构。MAT模式将图像表示为一个矩阵或数组,其中每个元素表示图像的一个像素值。MAT模式通常用于灰度图像,其中每个像素的值代表灰度级别,通常在0到255之间。矩阵的行和列对应于图像中的像素位置,因此可以通过索引来访问和修改每个像素的值。...对于彩色图像,MAT模式可以使用三维矩阵表示,其中每个像素包含红、绿、蓝(RGB)三个通道的值。矩阵的行和列仍然对应于图像中的像素位置,而矩阵中的第三个维度代表通道。