详细介绍PSNR、SSIM
时间: 2023-10-23 20:12:24 浏览: 160
PS(Peak Signal-to-Noise Ratio)和SSIM(Structural Similarity Index)是两种常用于图像压缩和图像质量评估的指标。
PSNR是以峰值信噪比为基础的图像质量评价指标,用来衡量原始图像与压缩后的图像之间的失真程度。它的计算公式为:
PSNR=10*log10(MAX^2/MSE)
其中MAX为像素值的最大值,通常为255;MSE为压缩后图像与原始图像之间的均方误差,可以表示为:
MSE=1/MNΣ(i=0 to M-1)Σ(j=0 to N-1)[I(i,j)-K(i,j)]^2
其中I(i,j)为原始图像的像素值,K(i,j)为压缩后的图像像素值,M和N分别为图像的宽和高。
PSNR的取值范围为0到无穷大,数值越大表示失真越小,图像质量越好。常用的PSNR阈值是30dB,当PSNR大于30dB时,说明压缩后的图像质量较好。
SSIM是一种基于结构相似性的图像质量评价指标,它不仅考虑了失真的影响,还考虑了图像的结构信息。SSIM的计算公式为:
SSIM(x,y)= [L(x,y)*C(x,y)*S(x,y)]^α
其中x和y分别表示原始图像和压缩后的图像,L(x,y)、C(x,y)和S(x,y)分别表示亮度、对比度和结构相似性,α为加权系数。
SSIM的取值范围为0到1,数值越大表示失真越小,图像质量越好。常用的SSIM阈值是0.9,当SSIM大于0.9时,说明压缩后的图像质量较好。与PSNR相比,SSIM更符合人类视觉系统的感知,因为它考虑了图像的结构信息。
相关问题
请详细介绍psnr和ssim
PSNR(Peak Signal-to-Noise Ratio)是一种用于评估两个图像之间相似度的指标。它主要是通过计算两个图像的峰值信噪比来确定它们之间的相似性。PSNR值越高,表示两幅图像之间的相似度越高。PSNR的计算公式如下:
$$
PSNR = 10 \times \log_{10}\left(\frac{MAX^2}{MSE}\right)
$$
其中,$MAX$代表像素值的最大值(通常为255),$MSE$是两个图像之间的均方误差。
SSIM(Structural Similarity Index)是一种用于评估两个图像之间相似度的指标。它主要是通过比较两个图像的结构信息来确定它们之间的相似性。SSIM值越接近1,表示两幅图像之间的相似度越高。SSIM的计算公式如下:
$$
SSIM(x,y) = \frac{(2\mu_x\mu_y+c_1)(2\sigma_{xy}+c_2)}{(\mu_x^2+\mu_y^2+c_1)(\sigma_x^2+\sigma_y^2+c_2)}
$$
其中,$\mu_x$和$\mu_y$分别代表两个图像的均值,$\sigma_x$和$\sigma_y$分别代表两个图像的标准差,$\sigma_{xy}$代表两个图像之间的协方差。$c_1$和$c_2$是两个常数,用于避免分母为0的情况。
psnr ssim计算
### 计算PSNR和SSIM
#### PSNR计算方法
对于两幅大小相同的灰度图像 \(I\) 和 \(K\), 其中 \(I\) 是原始无失真图像,\(K\) 是待比较的有损图像。假设这两张图像是 \(m \times n\) 的矩阵,则均方误差 (Mean Squared Error, MSE) 可以定义如下:
\[ \text{MSE} = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2 \]
基于此,PSNR可以按照下述公式来计算:
\[ \text{PSNR} = 10 \cdot \log_{10}\left(\frac{\text{MAX}_I^2}{\text{MSE}}\right) \]
其中,\(\text{MAX}_I\) 表示像素的最大可能值,在8位灰度图片的情况下通常取255[^1]。
下面是Python实现PSNR的一个简单例子:
```python
import numpy as np
def psnr(img1, img2):
mse = np.mean((img1 - img2)**2)
if mse == 0:
return float('inf')
max_pixel_value = 255.0
psnr_result = 20 * np.log10(max_pixel_value / np.sqrt(mse))
return psnr_result
```
#### SSIM计算方法
结构相似性指数(Structural Similarity Index Measure, SSIM)考虑了亮度、对比度和结构三方面的因素。其基本形式为:
\[ \text{SSIM}(x,y)=(l(x,y))^a(c(x,y))^b(s(x,y))^c \]
这里 \(l(x,y)\),\(c(x,y)\),\(s(x,y)\) 分别代表亮度、对比度和结构上的相似程度,而 \(a,b,c>0\) 则是权重参数,默认情况下都设为1。具体到两个窗口内的局部区域时,上述三个量可以通过下面的方式得到:
\[ 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} \]
为了防止除零错误引入了常数项 \(C_i=(k_iL)^2,i={1,2,3}\),其中 \(L\) 是动态范围 (\(L=2^k-1,k\) 是比特深度),\(k_1=k_2=0.01,k_3=\frac{k_2}{2}\)[^4]。
以下是使用`skimage.measure.compare_ssim`函数计算SSIM的例子:
```python
from skimage.metrics import structural_similarity as ssim
import cv2
# 加载两张要比较的图像
original_image = cv2.imread('path_to_original_image', 0)
compressed_image = cv2.imread('path_to_compressed_image', 0)
score, diff = ssim(original_image, compressed_image, full=True)
print(f'SSIM score is {score}')
```
阅读全文