IQA (图像质量评价)

article/2025/11/11 13:34:17

原文可见本人博客:IQA (图像质量评价)

全称:Image Quality Assessment

百度百科 IQA:https://baike.baidu.com/item/IQA/19453034?fr=aladdin

主观评价

主观评价方法主要可分为两种:绝对评价和相对评价。

但是实现起来都有困难,这里先不考虑。

客观评价

全参考

基于图像像素统计基础
  • 峰值信噪比(PSNR):PSNR值越大,表明待评图像与参考图像之间的失真较小,图像质量较好
  • 均方误差(MSE):MSE的值越小,表明图像质量越好
代码示例
import cv2 as cv
import numpy as np
import math
​
​
# 均方误差(MSE):MSE的值越小,表明图像质量越好
def get_mse(img1, img2):return np.mean((img1 / 255. - img2 / 255.) ** 2)
​
​
# 峰值信噪比(PSNR):PSNR值越大,表明待评图像与参考图像之间的失真较小,图像质量较好
# 基准为30dB,小于30为劣质
def get_psnr(img1, img2):mse = get_mse(img1, img2)if mse < 1.0e-10:return 100pixel_max = 1return 20 * math.log10(pixel_max / math.sqrt(mse))
​
​
if __name__ == '__main__':origin_img = cv.imread('img.png', 1)new_img = cv.imread('denoised_img_noise.png', 1)print('MSE:', get_mse(origin_img, new_img))print('PSNR:', get_psnr(origin_img, new_img))
结果

MSE: 0.0004777804926332579

PSNR: 33.20771586094474

从结果可以看出,上面测试使用的降噪后的图片质量还是可以的

基于信息论基础

基于信息论中信息熵基础,互信息被广泛用来评价图像质量。近些年,Sheikh和Bovik等人提出来了信息保真度准则(Information Fidelity Criterion,IFC)和视觉信息保真度(Visual Information Fidelity,VIF)两种算法。它们通过计算待评图像与参考图像之间的互信息来衡量待评图像的质量优劣。这两种方法具有一定的理论支撑,在信息保真度上拓展了图像与人眼之间的联系,但是这类方法对于图像的结构信息没有反应。

关于信息保真度准则(Information Fidelity Criterion,IFC)和视觉信息保真度(Visual Information Fidelity,VIF)这两种算法网上很难搜到合适的资料,即便能找到个别也都是matlab的,IFC方法到现在还没办法实现,下面是VIF方法。

代码示例
import numpy
import scipy.signal
import scipy.ndimage
​
__all__ = ['compare_vifp']
​
​
def compare_vifp(ref, dist):sigma_nsq = 2eps = 1e-10
​num = 0.0den = 0.0for scale in range(1, 5):
​N = 2 ** (4 - scale + 1) + 1sd = N / 5.0if scale > 1:ref = scipy.ndimage.gaussian_filter(ref, sd)dist = scipy.ndimage.gaussian_filter(dist, sd)ref = ref[::2, ::2]dist = dist[::2, ::2]
​mu1 = scipy.ndimage.gaussian_filter(ref, sd)mu2 = scipy.ndimage.gaussian_filter(dist, sd)mu1_sq = mu1 * mu1mu2_sq = mu2 * mu2mu1_mu2 = mu1 * mu2sigma1_sq = scipy.ndimage.gaussian_filter(ref * ref, sd) - mu1_sqsigma2_sq = scipy.ndimage.gaussian_filter(dist * dist, sd) - mu2_sqsigma12 = scipy.ndimage.gaussian_filter(ref * dist, sd) - mu1_mu2
​sigma1_sq[sigma1_sq < 0] = 0sigma2_sq[sigma2_sq < 0] = 0
​g = sigma12 / (sigma1_sq + eps)sv_sq = sigma2_sq - g * sigma12
​g[sigma1_sq < eps] = 0sv_sq[sigma1_sq < eps] = sigma2_sq[sigma1_sq < eps]sigma1_sq[sigma1_sq < eps] = 0
​g[sigma2_sq < eps] = 0sv_sq[sigma2_sq < eps] = 0
​sv_sq[g < 0] = sigma2_sq[g < 0]g[g < 0] = 0sv_sq[sv_sq <= eps] = eps
​num += numpy.sum(numpy.log10(1 + g * g * sigma1_sq / (sv_sq + sigma_nsq)))den += numpy.sum(numpy.log10(1 + sigma1_sq / sigma_nsq))
​vifp = num / den
​if numpy.isnan(vifp):return 1.0else:return vifp
结果

运用相同的测试图片,可以得到结果:

VIF: 0.9758460769325894

基于结构信息基础
  • SSIM:根据图像像素间的相关性构造出参考图像与待评图像之间的结构相似性,SSIM值越大,图像质量越好

PS:至此,找到更合理的代码方法

代码示例
import cv2 as cv
import numpy as np
import math
from skimage.metrics import mean_squared_error
from skimage.metrics import peak_signal_noise_ratio
from skimage.metrics import structural_similarity
​
​
# 均方误差(MSE):MSE的值越小,表明图像质量越好
def get_mse(img1, img2):return np.mean((img1 / 255. - img2 / 255.) ** 2)
​
​
if __name__ == '__main__':origin_img = cv.imread('img.png', 1)new_img = cv.imread('denoised_img_noise.png', 1)# 均方误差(MSE):MSE的值越小,表明图像质量越好mse = get_mse(origin_img, new_img)# 峰值信噪比(PSNR):PSNR值越大,表明待评图像与参考图像之间的失真较小,图像质量较好# 基准为30dB,小于30为劣质psnr = peak_signal_noise_ratio(origin_img, new_img)# 结构相似度(Structural Similarity,SSIM),SSIM值越大,图像质量越好ssim = structural_similarity(origin_img, new_img, multichannel=True)print('MSE:', mse)print('PSNR:', psnr)print('SSIM:', ssim)
结果

MSE: 0.0004777804926332579

PSNR: 33.20771586094474

SSIM: 0.9570612590498769

存在的问题

我的代码中有这样的一行:from skimage.metrics import mean_squared_error

但是,在下方却没有用到mean_squared_error这一函数,这是因为在测试时,使用mean_squared_error函数得到的结果(30+)与自己写的get_mse函数的结果(0+)大相径庭,而网上的资源大多使用类似于get_mse的方法,而对mean_squared_error方法所提甚少,且从结果看,MSE算法的值也是应该越小越好,所以我暂时不使用mean_squared_error函数

部分参考

部分参考也成为半参考,它是以理想图像的部分特征信息作为参考,对待评图像进行比较分析,从而得到图像质量评价结果。由于所参考的信息是从图像中提取出来的特征,所以它必须要先提取待评图像和理想图像的部分特征信息,通过比较提取出的部分信息对待评图像进行质量评估。部分参考方法可分为基于原始图像特征方法、基于数字水印方法和基于Wavelet域统计模型的方法等。因为部分参考质量评价依赖于图像的部分特征,与图像整体相比而言,数据量下降了很多,目前应用比较集中在图像传输系统中。

这部分内容暂时也没有头绪,先放过

无参考

无参考方法也称为首评价方法,因为一般的理想图像很难获得,所以这种完全脱离了对理想参考图像依赖的质量评价方法应用较为广泛。无参考方法一般都是基于图像统计特性。

  • 均值
  • 标准差
  • 平均梯度
  • 。。。。。。
我的理解

所谓无参考方法,就是只对现有的经过处理的图片进行分析,而不与原图比较。评判方法其实就是是否符合理想图像的特征(与寻找噪声的方式相似:符合噪声特征的像素点就会被判定为噪声)。

个人认为,这样的方法较为适用于无法得到原图,或者原图存在不可忽略的噪声的情况。


http://chatgpt.dhexx.cn/article/p80yvT50.shtml

相关文章

python图像质量评价_图像质量评价(三):FSIM

feature similarity index mersure(FSIM)利用特征相似性进行质量评价。因为human visual system (HVS)是基于一些低层次特征来感知图像的,而相位一致性特征( phase congruency,PC)可以很好的刻画局部结构。同时由于PC对于图像的变化具有相对不变性,这有利于提取图像中稳定的特…

图像质量评价方法介绍

1. 背景介绍 图像是人类感知和机器模式识别的重要信息源&#xff0c;其质量对所获取信息的充分性和准确性起着决定性的作用。然而&#xff0c;图像在获取、压缩、处理、传输、显示等过程中难免会出现一定程度的失真。如何衡量图像的质量、评定图像是否满足某种特定应用要求&am…

matlab无参考图像质量评价,无参考屏幕内容图像质量评价

1 引言 1.1 研究背景及意义 随着计算机和移动互联网技术的快速发展, 多屏互动[、视频游戏[、远程教育等多客户端通信系统也得到了飞速的发展.在这类系统中, 各类终端之间可以相互通信, 以实现屏幕内容图像(终端设备绘制并显示在屏幕上的视觉内容, 包括网页、邮件、地图、动画、…

图像质量评价

图像质量评价iqa&#xff08;Image Quality Assessment&#xff09;通常视为一个回归或分类问题。 图像质量评价有多种细分方式 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/32553977 1&#xff09;客观质量评价&主观美学评估 &#xff08;Image Quality Assessm…

数字图像处理-图像质量评价指标

层次A:根据是否有人参与&#xff0c;图像质量评价方法有:主观评价、 客观评价 &#xff08;1&#xff09;主观评价 ①定义&#xff1a;以人作为观测者&#xff0c;对图像进行主观评价&#xff0c;力求能够真实地反映人的视觉感知。 ②主观评价要求&#xff1a;主观评价是建立…

图像质量评估

拍照容易&#xff0c;但拍出高质量的照片却很难。它需要良好的构图和照明。合适的镜头和卓越的设备可以产生很大的不同。但最重要的是&#xff0c;高质量的照片需要良好的品味和判断力。你需要专家的眼光。 但是&#xff0c;是否有一种数学质量度量可以捕捉这种人类判断&#…

图像质量评价(Image Quality Assessment,IQA)

这篇blog是我记录自己开始做科研的一些笔记、多是从论文和各种博客的集合&#xff0c;偶有一些自己的思考和想法。由于网上相关图像质量评估的整理资料相对较少&#xff0c;如果能帮到看到这篇文章的你&#xff0c;那真是非常棒&#xff01;会持续更新补全一些东西&#xff0c;…

jdk卸载不干净解决办法

Win7系统下安装jdk报错&#xff1b;错误信息&#xff1a;“ Windows Installer 程序包有问题。此安装需要的DLL不能运行。请与您的支持人员或程序包开发商联系”。 造成该问题的原因是系统以前安装过jdk&#xff0c;重新安装需要彻底卸载旧的jdk&#xff0c;这样重新安装才能成…

JDK1.8下载安装与卸载删除

文章目录 一、彻底卸载删除jdk二、oracle账号密码三、JDK1.8下载安装&#xff08;1&#xff09;官网下载&#xff08;2&#xff09;选择JDK&#xff08;3&#xff09;点击同意协议&#xff08;4&#xff09;登录或者注册后登录Oracle账户&#xff08;5&#xff09;保存到本地&a…

如何正确(完美)卸载Java/JDK/JRE

ps:发现网上很多人再重新安装jdk和卸载时有问题,下面这种方法我不敢保证100%有效,但可以尝试,因为我这种情况是有效的.下面是转载内容希望可以多大家提供一点帮助. 官网卸载 角度看工具 https://www.java.com/zh_CN/download/uninstalltool.jsp 很多人在删除JDK时&#xff0c…

(转载)如何将jdk完全卸载

如何将jdk完全卸载 在从eclipse转向idea写java程序的时候遇到了一些关于jdk的问题&#xff0c;可能是第一次安装的时候留下的后遗症&#xff0c;所以就把jdk卸载了重新安装一次&#xff0c;在CSDN上搜到了楼主的帖子&#xff0c;亲测有效&#xff0c;所以转载分享一下&#xf…

微信小程序实现标签栏

标签栏实现功能&#xff1a; 页面向下滑动&#xff0c;标签栏吸顶。点击标签项&#xff0c;标签项呈现选中态&#xff0c;并切换到对应的面板。在面板中进行滑动&#xff0c;可切换标签项和面板。 <!-- tabs.wxml --> <wxs module"touch" src"./tou…

微信小程序富文本标签rich-text

前言&#xff1a; 做项目过程中&#xff0c;经常遇到需要在小程序中展示用富文本编辑器生成的内容。包含着各种HTML标签和样式。这就需要用到rich-text组件。 具体用法&#xff1a; 1、index.wxml文件&#xff1a; // nodes属性接收富文本内容&#xff0c;可以是字符串&…

微信小程序开发之——音乐播放器-实现标签页切换

一 概述 本节介绍点击标签切换页面&#xff0c;包含以下内容&#xff1a; 点击tab标签卡切换content要显示的内容区域当tab被选中时&#xff0c;高亮显示 二 效果图 三 点击tab标签卡切换content要显示的内容区域 3.1 切换功能说明 切换标签页有两种方式&#xff1a; 直接…

微信小程序radio 标签 使用

记录radio 标签,主要是之前有一个项目 ui设计 选中的在后面刚开始以为需要自定义之类的 后台自己随便弄了下,感觉只需要把文字放在前后即可 radio 标签 代码 wxml <view> <radio-group class"radio-group" bindchange"radioChange"><la…

小程序3D标签云

微信小程序实现3D标签云 在网上查找了许多3d标签云的案列&#xff0c;一般都是用原生和jquery写的&#xff0c;然后参考 https://www.cnblogs.com/axes/p/3501424.html这篇文章 在小程序里面实现标签云&#xff0c;具体代码如下 wxml // An highlighted block <view class…

小程序基础使用

目录 一、简介 1.微信小程序与APP的区别 2.微信小程序的开发 二、小程序开发介绍 1.pages js文件 json文件 wxml文件 wxss文件 2.app.js 3.app.json 4.app.wxss 5.json文件 三、微信小程序的配置 1.全局配置 2.局部配置 四、新建页面路由 1.新建文件夹 2.新建…

微信小程序实现tab标签页的切换及动态的选中下划线移动

微信小程序实现tab标签页的切换及动态的选中下划线移动 注意&#xff1a;当前是横向切换&#xff0c;纵向切换请点击&#xff1a;纵向切换tab 效果演示 代码片段 代码片段链接如下&#xff1a; 微信小程序代码片段 可直接点击代码片段路径观看完整演示。 完整代码 wxml如下 …

微信小程序中使用富文本标签解析

通常情况下后台管理系统都配备了富文本编辑器&#xff0c;所以当数据传入前端的时候需要解析才能够正常使用。 在实际的开发中我们会遇到以下的情况&#xff0c;甚至是更复杂的含有图片和样式等的文本内容。 此时我们就需要借助富文本标签来解析渲染了。如下&#xff1a; 这里…

微信小程序多选标签的实现(单选或者多选)

暑假留在社团跟别人一起开发一个校园小程序&#xff0c;如今也基本快开发完成了&#xff0c;整理一下日后可能用到的小组件。 类似于上图&#xff0c;下方的待选项为一个组件&#xff0c;根据父组件传入传入的参数决定是否为多选。 父组件的HTML代码如下 <view class"…