数字图像处理——图像质量评价(Python)

该博客介绍了如何利用Python计算图像的均方误差(MSE)和峰值信噪比(PSNR)。通过定义`calMSE`和`calPSNR`函数,分别计算标准图像与待评价图像之间的误差,然后将结果保存到文本文件中。实验涉及JPEG和BMP格式的图像,评估了多张待评价图像的质量。
摘要由CSDN通过智能技术生成

简单的按照评价指标公式,计算出待评价图像与标准图像之间的评价指标值,评价公式如下图:
在这里插入图片描述
M和N表示图像的尺寸,L表示图像的灰度取值范围,对于8bit的灰度图像而言取L=255

实验数据如下所示:

标准图像标准图像
待评价的三张图像:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验代码:

import glob
import math

import numpy as np
from skimage import io

road1 = glob.glob(".\\data\\*.jpeg")  # 获取标准图像的文件路径
standard = io.imread(road1[0])  # 读取标准图像文件
standard = standard.astype(np.int32)  # 将 uint8类型的数据转换为int32类型便于后面运算
road2 = glob.glob(".\\data\\*.bmp")  # 获取待评价图像的文件路径
m = len(road2)  # 获取待评价图像的数量
gray = 255  # 定义灰度范围值,方便后续计算
strname = 'ans.txt'  # 定义一个文档名称,用于保存结果


# 定义函数calMSE,计算标准图像std与目标图像aim之间的均方误差(MSE)评价指标
def calMSE(std, aim):
    # 利用循环计算两幅影像间相同位置像素的灰度值的差的平方和
    num = 0
    for i in range(std.shape[0]):
        for j in range(std.shape[1]):
            num += math.pow(std[i, j] - aim[i, j], 2)
    mse = num / (std.shape[0] * std.shape[1])
    return mse


# 定义函数calPSNR,计算标准图像std与目标图像aim之间的峰值信噪比(PSNR)评价指标
def calPSNR(std, aim):
    num = 0
    for i in range(std.shape[0]):
        for j in range(std.shape[1]):
            num += (std[i, j] - aim[i, j]) * (std[i, j] - aim[i, j])
    mse = num / (std.shape[0] * std.shape[1])
    psnr = 10 * math.log(gray * gray / mse, 10)
    return psnr


f = open(strname, "w")  # 打开文件
for i in range(m):
    img = io.imread(road2[i])  # 读取一张待评价的图片
    img = img.astype(np.int32)
    mse = calMSE(standard, img)  # 计算MSE指标
    psnr = calPSNR(standard, img)  # 计算PSNR指标
    name = '图像名称: ' + road2[i] + ',  MSE指标: ' + str(mse) + ',  PSNR指标: ' + str(psnr)
    f.write(str(name))  # 将结果字符串写入文件
    f.write('\n')  # 换行使文件中结果更加清楚
f.close()  # 关闭文件

实验的评价结果将自动保存为文本文档:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值