写一个函数来测量两个灰度之间的峰值信噪比(PSNR) 图像在dB。对于峰值,使用255。
时间: 2024-10-15 14:16:26 浏览: 23
峰信噪比(Peak Signal-to-Noise Ratio,简称PSNR)是一种衡量图像质量的指标,通常用于评估压缩后的图像恢复原始数据的准确程度。在计算PSNR时,我们假设图像中的最大值(例如灰度图像中的白色像素)为255,噪声是零。
以下是一个简单的Python函数,它接受两个灰度图像(作为numpy数组),计算并返回它们的PSNR:
```python
import numpy as np
def calculate_psnr(img1, img2):
# 确保输入都是灰度图像(单通道)
assert len(img1.shape) == 2 and len(img2.shape) == 2
# 计算均值
mean_square = np.mean((img1.astype('float') - img2.astype('float')) ** 2)
# 如果均值接近0,可能存在数值稳定性问题,设置一个较小的阈值
epsilon = np.finfo(np.float32).eps
if mean_square < epsilon:
return float('inf')
max_pixel_value = 255.0 # 峰值值
psnr_db = 10 * np.log10(max_pixel_value**2 / (mean_square + epsilon))
return psnr_db
# 使用示例
# img1和img2应该是形状相同的灰度图像
psnr = calculate_psnr(img1, img2)
print(f"PSNR: {psnr} dB")
```
这个函数首先检查图像是否为灰度图像,然后计算两者差值的平方的平均值(即均方误差)。接着利用公式计算PSNR,并将其转换为分贝(dB)形式。
阅读全文