psnr ssim
时间: 2025-05-17 07:11:51 浏览: 32
### PSNR 和 SSIM 的概念及计算方法
#### 峰值信噪比(PSNR)
峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是一种广泛使用的图像质量评估指标,主要用于量化失真图像与原始图像之间的差异。其核心思想是比较两个像素矩阵的均方误差(Mean Squared Error, MSE),并将其转换为分贝单位表示的质量度量。
PSNR 的定义如下:
\[ \text{MSE} = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2 \]
其中 \( I(i,j) \) 表示原始图像中的像素值,\( K(i,j) \) 是失真图像对应的像素值,而 \( m,n \) 则分别代表图像的高度和宽度[^2]。
随后,利用 MSE 可以进一步得到 PSNR 的表达式:
\[ \text{PSNR} = 10\cdot\log_{10}\left(\frac{\text{MAX}_I^2}{\text{MSE}}\right) \]
这里,\( \text{MAX}_I \) 是图像的最大可能像素值,在8位灰度图中通常取值为255[^3]。
#### 结构相似性指数(SSIM)
结构相似性指数(Structural SIMilarity Index Measure, SSIM)则更加关注于人类视觉系统的特性,旨在捕捉图像间的结构性变化而非仅仅依赖像素级差值。SSIM 考虑了亮度、对比度以及结构三方面的因素来进行综合评分:
给定两幅大小相同的图片 X 和 Y ,它们局部窗口内的 SSIM 定义为:
\[ \text{SSIM}(X,Y)=(l(X,Y))^a(c(X,Y))^b(s(X,Y))^c \]
具体来说,
- \( l(X,Y)=\frac{(2\mu_X\mu_Y+C_1)}{(\mu_X^2+\mu_Y^2+C_1)} \),反映的是平均亮度上的匹配程度;
- \( c(X,Y)=\frac{(2\sigma_X\sigma_Y+C_2)}{(\sigma_X^2+\sigma_Y^2+C_2)} \),体现的是对比度的一致性;
- \( s(X,Y)=\frac{(\sigma_{XY}+C_3)}{(\sigma_X\sigma_Y+C_3)} \),描述的是两者间结构的相关关系;
常数项 C1,C2,C3是为了稳定除法运算防止数值过小造成不稳定情况引入的小正数[^1]。
以下是 Python 实现上述两种算法的一个简单例子:
```python
import numpy as np
from skimage.metrics import structural_similarity as ssim_func
from math import log10
def psnr(img1, img2):
mse = np.mean((img1 - img2)**2)
if mse == 0:
return float('inf')
PIXEL_MAX = 255.0
return 20 * log10(PIXEL_MAX / sqrt(mse))
# Example usage of both functions with dummy data.
imageA = np.random.randint(0, 256, size=(100, 100), dtype="uint8")
imageB = imageA.copy()
noise = np.random.normal(loc=0, scale=10, size=imageA.shape).astype("int8")
noisy_image = np.clip(imageA.astype(int)+noise, 0, 255)
print(f'PSNR Value: {psnr(noisy_image, imageA): .4f}')
ssim_value = ssim_func(imageA, noisy_image, multichannel=False)
print(f'SSIM Value: {ssim_value:.4f}')
```
#### 应用场景分析
- **PSNR**: 主要应用于压缩编码领域或者去噪处理效果评测当中,当追求较高的精度还原原貌时尤为适用。然而由于仅考虑绝对误差而不顾视感影响,因此有时并不能很好地反映出主观感受上优劣差别。
- **SSIM**: 更贴近实际用户体验测试需求,特别是在涉及复杂纹理区域或是边缘细节保留方面表现优异,适合用来判断经过不同操作后的两张照片之间是否存在显著区别。
阅读全文
相关推荐

















