文章目录
- 前言
- 一、分贝(dB)的原理
- 1.公式
- 二、信噪比>峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)
- 1.用途
- 2.公式
- 3.示例
- 三、信噪比(SNR, Signal-to-Noise Ratio)
- 1.用途
- 2.公式
- 3.示例
- 四、动态范围(Dynamic Range)
- 1.用途
- 2.公式
- 五、分贝的意义
- 1.直观性
- 2.人眼适应性
- 3.标准化比较
- 六、结构相似性指数(SSIM, Structural Similarity Index)
- 1.原理
- 2.公式
- 3.示例代码
- 七、多尺度结构相似性指数(MS-SSIM)
- 1.原理
- 2.示例代码
- 八、平均绝对误差(MAE, Mean Absolute Error)
- 1.原理
- 2.公式
- 3.示例代码
- 九、视觉信息保真度(VIF, Visual Information Fidelity)
- 1.原理
- 2.示例代码
- 十、学习感知图像块相似度(LPIPS)
- 1.原理
- 2.示例代码
- 总结
前言
在图像处理中,参数的衡量常涉及对数单位(如分贝,dB),主要用于量化信号的强度、噪声水平或图像质量的相对变化。以下是常见参数的原理、计算方法和示例:
一、分贝(dB)的原理
分贝(Decibel)是一种对数单位,用于表示两个量(如信号与噪声)的比值。其核心优势是将大范围的数值压缩到更易处理的尺度,并符合人类感官对强度的非线性感知特性。
1.公式
分贝计算公式" />
其中 𝑃1和 𝑃2是两个功率值。若涉及幅度值(如电压、像素强度),公式需平方:
分贝" />
二、信噪比>峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)
1.用途
用途:衡量图像压缩或重建后的质量(对比原始图像)。
2.公式
信噪比>峰值信噪比" />
3.示例
信噪比>峰值信噪比计算示例" />
三、信噪比(SNR, Signal-to-Noise Ratio)
1.用途
用途:量化信号中有效信息与噪声的比例。
2.公式
信噪比公式" />
3.示例
信噪比示例" />
四、动态范围(Dynamic Range)
1.用途
用途:描述图像中最亮与最暗区域的比值。
2.公式
动态范围" />
五、分贝的意义
1.直观性
直观性:分贝将大范围数值压缩为小范围
(如 1:1000 → 30dB)。
2.人眼适应性
人眼适应性:符合人类对亮度变化的非线性感知(韦伯-费希纳定律)。
3.标准化比较
标准化比较:便于跨不同设备或场景的图像质量评估。
六、结构相似性指数(SSIM, Structural Similarity Index)
1.原理
SSIM通过比较亮度(Luminance)、对比度(Contrast)和结构(Structure)三个因素来评估两幅图像的相似性,范围在**[-1, 1]**之间,1表示完全相同。
2.公式
3.示例代码
from skimage.metrics import structural_similarity as ssim
import cv2
读取图像(需保证尺寸相同)
img1 = cv2.imread('original.png', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('processed.png', cv2.IMREAD_GRAYSCALE)
#计算SSIM
ssim_score = ssim(img1, img2, data_range=255) # 8位图像范围为0-255
print(f"SSIM: {ssim_score:.4f}")
七、多尺度结构相似性指数(MS-SSIM)
1.原理
MS-SSIM在多个尺度(分辨率)下计算SSIM,综合各尺度的结果,更符合人类视觉系统对多分辨率特征的感知。
2.示例代码
import tensorflow as tf # 需要安装tensorflow或使用其他库
#使用TensorFlow的MS-SSIM实现
def compute_ms_ssim(img1, img2):
img1 = tf.convert_to_tensor(img1, dtype=tf.float32)
img2 = tf.convert_to_tensor(img2, dtype=tf.float32)
return tf.image.ssim_multiscale(img1, img2, max_val=255)
#示例(假设img1和img2为numpy数组,形状[H, W, C])
ms_ssim_score = compute_ms_ssim(img1, img2)
print(f"MS-SSIM: {ms_ssim_score.numpy():.4f}")
八、平均绝对误差(MAE, Mean Absolute Error)
1.原理
计算两图像像素差的绝对值的均值,单位与像素强度相同。
2.公式
3.示例代码
def compute_mae(img1, img2):
return np.mean(np.abs(img1 - img2))
mae = compute_mae(img1, img2)
print(f"MAE: {mae:.2f}")
九、视觉信息保真度(VIF, Visual Information Fidelity)
1.原理
通过自然场景统计模型和人类视觉系统的失真感知来评估图像质量,值越大表示质量越好(通常范围在0到1之间)。
2.示例代码
#需要安装piq库:pip install piq
from piq import vif_p
#输入为PyTorch张量,形状[B, C, H, W](B为批次大小)
img1_tensor = torch.tensor(img1).unsqueeze(0).permute(0, 3, 1, 2) # 示例转换
img2_tensor = torch.tensor(img2).unsqueeze(0).permute(0, 3, 1, 2)
vif_score = vif_p(img1_tensor, img2_tensor)
print(f"VIF: {vif_score.item():.4f}")
十、学习感知图像块相似度(LPIPS)
1.原理
基于深度学习模型(如VGG)提取特征,计算特征空间的距离,值越小表示越相似。
2.示例代码
#需要安装lpips库:pip install lpips
import lpips
loss_fn = lpips.LPIPS(net='vgg') # 使用VGG网络
img1_tensor = lpips.im2tensor(lpips.load_image('original.png'))
img2_tensor = lpips.im2tensor(lpips.load_image('processed.png'))
lpips_score = loss_fn(img1_tensor, img2_tensor)
print(f"LPIPS: {lpips_score.item():.4f}")