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

简单的按照评价指标公式,计算出待评价图像与标准图像之间的评价指标值,评价公式如下图:
数字图像处理——图像质量评价(Python)_第1张图片
M和N表示图像的尺寸,L表示图像的灰度取值范围,对于8bit的灰度图像而言取L=255

实验数据如下所示:

标准图像数字图像处理——图像质量评价(Python)_第2张图片
待评价的三张图像:



实验代码:

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()  # 关闭文件

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

你可能感兴趣的:(python,图像处理)