图像模糊度评价性能提升方法简介

背景介绍

随着多媒体技术的发展,图像以及视频服务逐渐成为人们获取信息的主要载体。传统上,视频或图像质量的好坏需要人眼去看,并且为了得到一个合适的评价分数,一般需要组织多人评价之后取其平均意见。但在实际生活中,面对海量视频及图像服务,纯人力评价成本过高,基本无法实现。而图像质量评价技术(Image Quality Assessment,IQA), 目的是通过相关算法,在不需要人眼观看的情况下,能够对任一图像进行质量评价,输出与人眼主观感受贴近甚至一致的评价分数。IQA算法根据是否需要原始无损图像,可以分成三大类:无参考(No Reference, NR)、半参考(Reduced reference, RR)和全参考(Full Reference, FR)评价。全参考质量评价主要是将失真视频图像和无损参考图像进行对比,评价失真图像相对无损图像的质量损失;半参考质量评价则需要从失真图像和无损图像中分别提取某些有效特征进行分析对比,得出对失真图像的质量评价;无参考评价不需要任何无损图像,直接评价失真图像,是最具有实际应用价值的评价方式。而图像质量评价一般要面对多种损伤类型,最常见的一种就是模糊,它显著地影响人的主观感受,是用户体验(Quality of Experience)需要衡量的一个关键因素。

相关技术

图像模糊度检测算法一般分为以下几类:1. 基于图像边缘,此类方法认为模糊首先会降低图像的清晰度,使边缘纹理变得更粗,通过边缘宽度可以衡量模糊程度;2. 基于像素值的统计信息,此类方法认为清晰的图像中所有像素值的统计分布是规范的(如广义高斯分布),而图像的模糊化会影响改变该分布,因此通过对像素值统计分布参数的计算可以反映模糊程度;3. 变换域方法,此类方法认为模糊会降低图像中的纹理特征,在变换域(如DCT变换后)中纹理一般对应的是高频分量,因此通过衡量图像变换域高频信息的丰富程度可以反映模糊程度。上述三种方法都属于特征工程方法,即找到一些受模糊度影响的特征用作评价指标。随着深度学习的发展,神经网络如CNN等也被用于质量评价领域,但是受限的问题在于,图像的质量评价分数标记需要耗费大量的人力,因此目前的神经网络方法还未大量用于实际。

模糊度评价和其他图像损伤如块损伤评价(马赛克效应)不一样的地方在于,物理上同样程度的模糊,人眼对于其主观感受却不同,见下面的例子:

上面两张图像是通过相同参数的高斯滤波器模糊处理后得到的,在10分值范围内(分数越大表示越清晰),第一张图的得分是3.1分,第二张图的得分是5.9分。所以可以看出对于模糊损伤,人眼的主观感受与图像的内容是强相关的。而目前的评价算法捕捉的主要是像素信息,所以评价算法需要一个修正步骤使得结果更加贴近人眼的感受。

修正方法

传统上,一般的模糊度评价修正采用如下的Logistic函数,其中x是算法的输出值,f(x)是输出值的修正结果,参数通过在常见的IQA数据库上拟合得到。

但是这样的方法忽略了内容类型,比如选取最常用的S3模糊度评价算法,在3个常用的IQA数据库CIDIQ、TID2013、VLC上使用上述修正方法,效果如下图所示。图中横轴是算法输出值,纵轴是人眼主观评价值,理想情况下,如果二者相等,那么形成的散点应该分布在y = x 也就是图中的对角线上。故评价算法的性能用线性相关系数PCC和主客观分数均方差值RMSE衡量。图中第一行是算法修正前的分数以及在各数据库上拟合得到的修正函数,第二行是算法修正后的分数,三列分别代表三个数据库。我们可以发现:

▪ 不同的数据库(内容)所需拟合函数参数不完全相同

▪ 对中轻度模糊基本没有改善(第二行靠近右上方的数据点在修正后反而更偏离对角线了)

最新进展

上海交通大学图像所研究团队提出了一种基于图像内容检索的模糊度评价性能提升方法,在一定程度上解决了上述两个问题,该方法框图如下:

第一步,离线内容数据库构建。使用无损图像通过不同程度的高斯模糊生成不同程度的模糊版本。之后首先采用全参考图像质量评价VIF算法对各模糊版本进行打分(在大规模数据量下无法进行主观评测,使用全参考客观评分代替)。再采用无参考评价算法独立对各模糊度版本进行评分。我们使用目前规模最大的视频质量评价数据库Waterloo数据集,该数据库提供了4744张各种内容的无损图像,对于每张图片,使用高斯模糊对其进行5级损伤处理,5级损伤分别对应于PSNR值为33dB,30dB,27dB,24dB,21dB。形成如图所示的散点图,其中y轴表示全参考VIF分数,x轴表示无参考指标分数。

第二步,内容分类。对于建立的模糊图片数据库,对其中相同内容的不同模糊等级图像对应的数据点进行线性拟合,依据得到的线性回归直线的斜率进行聚类,形成5个内容簇,每个簇用不同的颜色表示。之后在每一类所有数据点中分别进行Logistic非线性拟合。保存每个内容簇中距离聚类中心最近的10张无损图片作为类代表图片,其余的原始图片及其各模糊版本按照内容分为训练集(70%)及验证集(30%),在下一步进行检索网络的训练。我们选取了基于卷积神经网络的图片检索网络KevenNet对内容图像进行检索匹配。

第三步,评分修正。通过检索网络找到与其内容最相近的聚类中心参考图像,并获得那一个簇的 logistic 回归参数。对于一张待评价图像,首先用评价算法输出评价分数,之后再用该图像所在类别的修正函数进行修正。

为方便起见,将上述CIDIQ、TID2013、VLC数据库结合在一起,并对比传统单类修正与我们提出的分类修正方法的性能差异,仍用S3方法作为评价指标。如下图所示;

可以发现:

▪ 多分类修正相对单类修正可以进一步提高模糊度指标总体准确性,PCC值升高,RMSE值下降;

▪ 多分类修正可以提高轻度到中度损伤程度的评价准确性,如图中右上方框内容所示,且所有数据点更加收敛于y = x直线上。

由对比发现,经过我们提出的基于内容分类的修正方法修正后的模糊度指标,相比分类修正前或不经过分类直接修正的模糊度指标,均有明显的评价准确率提升。

更多论文细节和实验分析详见论文:

Y. Liu, Li Song, W. Zhang, A generic method to improve no reference video blurriness assessment[C]. IEEE Conference on Visual Communications and Image Processing (VCIP), 2017:1-4.

下载链接

http://medialab.sjtu.edu.cn/publications/2017/VCIP2017_YKLiu_A%20Generic%20Method%20to%20Improve%20No-Reference%20Image%20Blur%20Metric%20Accuracy%20in%20Video%20Contents.pdf

原文发布于微信公众号 - 媒矿工厂(media_tech)

原文发表时间:2017-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏赵俊的Java专栏

从源码上分析 ArrayList

1171
来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3437
来自专栏desperate633

LeetCode Invert Binary Tree题目分析

Invert a binary tree. 4 / \ 2 7 / \ / \1 3 6 9 to4 / \ 7 2 / \ / \9 6 3 1 Tri...

841
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1716
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

1938
来自专栏Hongten

ArrayList VS Vector(ArrayList和Vector的区别)_面试的时候经常出现

1682
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1192
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4489
来自专栏刘君君

JDK8的HashMap源码学习笔记

3008
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

662

扫码关注云+社区