转自:https://zhuanlan.zhihu.com/p/50757421
暂时只理解了PSNR,后续如果用到SSIM再来研究补充。
1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比
其中,第二和第三种方法比较常见。
# 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公式的理解:
其实常规意义上原图像和噪声图像的MSE
就基本能反应该图像信息丢失程度,此时该值越小表明结果越好误差越小,值越大结果越差误差也越大。
但存在的问题是,当图像为浮点型图像时,即其中值在0~1之间取值时,发现这里的MSE和uint8算出来的结果差距很大,那么该如何评价他们之间的好坏呢?
为了使得该指标具有更强的通用性,引入了归一化方式,即
,此时其结果为即uint8的值为255^2,浮点型为1^2。这时评估指标就变为
。以uint8举例,当原图全都为255,噪声图全都为0,此时MSE为255^2,
为255^2,此时评估指标为1,当噪声图与原图相等时,其结果为无穷大(所以我这里认为可以在分母加一个极小的数,以防出现这种情况,尽管概率很低也应该避免才对,但这里为了讲解公式,就不加入一个极小的数了)。
这里评估指标为1到无穷大,这有点不美,显示也不太好看,所以引入了对数log10。前面的10我认为也是为了更加美观加入的。
2. SSIM (Structural SIMilarity) 结构相似性
# im1 和 im2 都为灰度图像,uint8 类型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)
针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。