python怎么计算psnr
时间: 2024-12-28 15:20:15 浏览: 5
### 使用Python计算峰值信噪比(PSNR)
为了计算两个图像之间的峰值信噪比 (Peak Signal-to-Noise Ratio, PSNR),可以采用如下方法。该度量广泛应用于评估重建图像的质量,特别是压缩后的恢复情况或是去除噪声的效果。
对于两幅大小相同的灰度图 \(I_1\) 和 \(I_2\) ,其均方误差 Mean Squared Error(MSE) 定义为:
\[
MSE=\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I_1(i,j)-I_2(i,j)]^2
\]
其中 m,n 是图片的高度和宽度;\(I_1(i,j)\), \(I_2(i,j)\) 表示位置 \((i,j)\) 的像素强度值[^1]。
而 PSNR 则基于 MSE 计算得出:
\[
PSNR = 10 * log_{10}\left(\frac{MAX_I^2}{MSE}\right)
\]
这里 \(MAX_I\) 是单个像素的最大可能功率,对于8位灰度图像来说通常是255。
下面是一个简单的 Python 函数来实现上述公式的 PSNR 计算过程:
```python
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2) ** 2)
if mse == 0:
return 'INF'
max_pixel_value = 255.0
psnr_result = 20 * np.log10(max_pixel_value / np.sqrt(mse))
return psnr_result
```
此函数接受两张相同尺寸的 NumPy 数组形式输入,并返回它们之间 PSNR 值的结果。如果均方差等于零,则意味着两张图像是完全一样的,在这种情况下定义 PSNR 为无穷大(INF)。
阅读全文