【OpenCV-Python】:图像PSNR、SSIM、MSE计算

✨博客主页:王乐予🎈
✨年轻人要:Living for the moment(活在当下)!💪
🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法


评价一幅图像质量的好坏有多种方式,目前最常用的是 PSNR、SSIM、MSE

😺一、MSE(Mean Squared Error)均方误差

MSE是预测值f(x)与目标值y之间差值平方和的均值,公式表示为:
M S E = ∑ i = 1 n ( f ( x ) − y ) 2 n MSE=\frac{\sum_{i=1}^{n}(f(x)-y)^{2}}{n} MSE=ni=1n(f(x)y)2
对于图像来说,两个m×n单色图像I和K,如果一个为另一个的噪声近似,那么它们的均方误差定义为:
M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 MSE=\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^{2} MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
优点:MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。

缺点:当真实值y和预测值f(x)的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。也就是说,对离群点比较敏感,受其影响较大。

😺二、PSNR(Peak Signal-to-Noise Ratio)峰值信噪比

PSNR是通过MSE得出来的,公式如下:
P S N R = 20 l o g 10 ( M A X i M S E ) PSNR=20log_{10}(\frac{MAX_{i}}{\sqrt{MSE}}) PSNR=20log10(MSE MAXi)
log中的分子是表示图像点颜色的最大数值,如果每个采样点用8位表示,那么就是255。PSNR越大,代表着图像质量越好。

😺三、SSIM(structural similarity)结构相似性

SSIM是衡量两张图像相似度的指标,可以测量增强后的图像与真实图像之间的差异,从而指导学习过程。

假设我们输入的两张图像分别是X和Y,那么SSIM的公式表示为:
S S I M ( X , Y ) = ( 2 μ x μ y + C 1 ) ( 2 δ x y + C 2 ) ( μ x 2 μ y 2 + C 1 ) ( δ x 2 δ y 2 + C 2 ) SSIM(X,Y)=\frac{(2\mu _{x}\mu _{y}+C_{1})(2\delta _{xy}+C_{2})}{(\mu _{x}^{2}\mu _{y}^{2}+C_{1})(\delta _{x}^{2}\delta _{y}^{2}+C_{2})} SSIM(X,Y)=(μx2μy2+C1)(δx2δy2+C2)(2μxμy+C1)(2δxy+C2)
其中, μ x \mu _{x} μx μ y \mu _{y} μy分别表示X和Y的平均值; δ x 2 \delta _{x}^{2} δx2 δ x 2 \delta _{x}^{2} δx2分别表示X和Y的方差; δ x y \delta _{xy} δxy表示X和Y的协方差; C 1 C_{1} C1 C 2 C_{2} C2是为了防止分母为0的常数。

特点:
(1):SSIM具有对称性,即SSIM(x,y)=SSIM(y,x)。
(2):SSIM取值范围为[0,1],值越大表示输出图像和无失真图像的差距越小,即图像质量越好。

😺四、代码实现

我们首先需要调用库函数

from skimage.measure import compare_ssim, compare_psnr, compare_mse
**注:高版本库会去掉此API**

具体实现过程:

from skimage.measure import compare_ssim, compare_psnr, compare_mse
import cv2

img1 = cv2.imread(r'C:\Users\Wxr\Desktop\WATERLOO\train_low_high\29.jpg')
img2 = cv2.imread(r'C:\Users\Wxr\Desktop\WATERLOO\train_normal\29.jpg')

psnr = compare_psnr(img1, img2)
ssim = compare_ssim(img1, img2, multichannel=True)  # 对于多通道图像(RGB、HSV等)关键词multichannel要设置为True
mse = compare_mse(img1, img2)

print('PSNR:{},SSIM:{},MSE:{}'.format(psnr, ssim, mse))

图像取两张不同照度的,如下:
在这里插入图片描述在这里插入图片描述
结果:

PSNR:10.178388169399849,SSIM:0.5946874827656982,MSE:6240.818379720052
### 关于纹理特征图的研究 #### 纹理特征的重要性 在计算机视觉图像处理领域,纹理特征是一种重要的图像属性,能够反映物体表面的重复模式或结构特性。它被广泛应用于多种任务中,例如图像分类、目标检测以及医学影像分析等[^3]。 #### 常见的纹理特征提取方法 为了更好地理解和利用纹理信息,研究人员开发了许多有效的纹理特征提取技术: 1. **灰度共生矩阵 (Gray-Level Co-occurrence Matrix, GLCM)** 这种方法通过对像素间的关系进行建模来描述图像的纹理特性。具体来说,GLCM记录了一组特定方向上两个像素之间灰度值的联合概率分布情况。这种方法可以捕捉到局部区域的空间关系,从而提供丰富的纹理细节。 2. **直方图方法** 虽然直方图主要用于表示全局强度分布,但它也可以作为一种简单的纹理描述符。通过计算不同尺度下的梯度直方图或者颜色直方图,可以获得有关图像对比度和平滑性的基本信息[^4]。 3. **滤波器银行(Filter Banks)** 使用一组预定义好的线性滤波器(如Gabor滤波器)对输入图片卷积操作后得到响应作为新的表征形式之一;每一种类型的过滤会产生不同的反应结果对应着某些特殊的物理现象比如边缘锐利程度等等[^2]。 4. **小波变换(Wavelet Transform)** 小波分解能有效地分离出高频部分代表细节点变化而低频则更多关注整体趋势走向,在此基础上再进一步挖掘潜在规律形成最终输出向量。 5. **LBP(Local Binary Patterns)** 局部二进制模式算子以其简单高效著称,仅需比较中心点与其邻域内的其他位置大小关系即可完成编码过程并构建相应的统计直方图表征该区域性质。 #### 应用场景举例 上述提到的各种算法各有优劣适用于不同类型的数据集之上。例如,在遥感卫星拍摄下来的地物类别划分工作中可能倾向于采用基于频率谱系原理设计出来的方案因为它们擅长刻画周期性强弱不均的现象;而在生物细胞显微镜下观察所得样本里由于存在大量随机噪声干扰所以往往会选择抗噪能力强且鲁棒性能较好的选项来进行下一步深入探讨。 ```python import numpy as np from skimage.feature import greycomatrix, greycoprops # 创建一个示例二维数组用于演示GLCM功能 array = np.array([[0, 0, 1, 1], [0, 0, 1, 1], [0, 2, 2, 2], [2, 2, 3, 3]]) glcm = greycomatrix(array, distances=[1], angles=[0], levels=4, symmetric=True, normed=True) contrast = greycoprops(glcm, 'contrast') print(f"Contrast measure: {contrast}") ``` 以上代码片段展示了如何使用Python库`skimage`中的函数来生成灰度共生矩阵(GLCM),并通过测量其对比度参数评估所给定阵列内部存在的差异显著性水平。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王乐予

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值