Skimage.measure 的compare_psnr和compare_ssim的改动

Skimage.measure 的compare_psnr和compare_ssim的改动及错误解决
最近在尝试复现使用DnCNN进行图像去噪的过程中发现,代码中计算峰值信噪比psnr和结构相似性指数ssim的代码还是之前旧版本的,在进行导入的时候会爆红

from skimage.measure import compare_psnr, compare_ssim

参考Skimage.measure 的compare_psnr和compare_ssim的改动,解决了函数导入问题,将原本的导入语句修改为以下格式即可

from skimage.metrics import structural_similarity as compare_ssim
from skimage.metrics import peak_signal_noise_ratio as compare_psnr

成功导入代码之后运行又出现了新的问题,报错无法使用
Traceback (most recent call last):
File “D:DnCNN\TrainingCodes\dncnn_keras\main_test.py”, line 128, in < module >
ssim_x_ = compare_ssim(x, x_)
File “C:\Users\dandelion\anaconda3\envs\RDDCNN\lib\site-packages\skimage\metrics_structural_similarity.py”, line 194, in structural_similarity
raise ValueError(
ValueError: Since image dtype is floating point, you must specify the data_range parameter. Please read the documentation carefully (including the note). It is recommended that you always specify the data_range anyway.

查询相关资料发现,在使用scikit-image库的compare_ssim函数计算结构相似性指数(SSIM)时,没有指定data_range参数所致。
data_range参数指定了图像像素值的范围,用于对标准差和协方差进行归一化。当图像的像素值类型为浮点型时,必须指定data_range参数。如果没有指定,则会引发该错误。
要解决这个问题,可以在调用compare_ssim函数时添加data_range参数。data_range参数的值应该等于像素值的最大值减去最小值。例如,如果像素值的范围是[0, 1],那么data_range参数应该设置为1。
在原本代码中的

ssim_x_ = compare_ssim(x, x_)

替换为

ssim_x_ = compare_ssim(x, x_, data_range=x.max() - x.min())

即使像素值类型为整数类型,也建议在使用的过程中始终指定data_range参数,以确保计算正确。

你可能感兴趣的:(python,人工智能,机器学习)