大家好:
我是烤鸭。今年是AI元年,最近sora更是火的不行。正好最近在搞视频质量分析,寻思写篇文章。毕竟sora生成的视频还需要评判标准,我要写的是关于视频质量分析的方式,主要分为有参考的客观打分和无参考的客观打分。
质量分析算法对比(有参考的客观打分)
PSNR(Peak Signal Noise Rate)-峰值信噪比
一、介绍
PSNR(Peak Signal to Noise Ratio)的中文全称为峰值信噪比,是一种评价图像的客观标准。PSNR的值越大,就代表失真越少。它主要用于衡量图像的噪声水平和图像质量,可以用来评估图像处理算法的性能。通常使用PSNR来测量已经被压缩的重构图像的质量。
PSNR的计算方法基于两个关键图像:参考图像(或原始图像)和失真图像(或处理后的图像)。计算PSNR的步骤如下:
- 将参考图像和失真图像都转换为灰度图像。
- 分别计算两个图像的均方根误差(RMSE-Root Mean Square Error)或均方误差(MSE-Mean Square Error)。
- 使用RMSE或MSE计算PSNR。PSNR的计算公式为:PSNR = 10 * log10((2n-1)2 / MSE),其中n是每个采样值的比特数。
优缺点:PSNR是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR的分数无法和人眼看到的视觉品质完全一致,有可能PSNR较高者看起来反而比PSNR较低者差。这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化。
二、评价标准
PSNR值越大,表示图像的质量越好,一般来说:
(1)高于40dB:说明图像质量极好(即非常接近原始图像)
(2)30—40dB:通常表示图像质量是好的(即失真可以察觉但可以接受)
(3)20—30dB:说明图像质量差
(4)低于20dB:图像质量不可接受
三、几种实现方式
- 直接计算RGB三个通道的PSNR,然后取平均值:这种方法将图像分为红、绿、蓝三个通道,分别计算每个通道的PSNR,然后将三个通道的PSNR值取平均得到最终的PSNR。这种方法简单易行,但可能无法充分考虑到人眼对不同颜色通道的敏感度差异。
- 计算RGB三通道的MSE,然后再除以3:这种方法同样将图像分为红、绿、蓝三个通道,但它是先计算每个通道的MSE,然后将三个通道的MSE值取平均得到最终的MSE,再用这个MSE值计算PSNR。这种方法与第一种方法类似,但计算过程稍有不同。
- 将图片转化为YCbCr格式,只计算Y分量(亮度分量)的PSNR:YCbCr是一种颜色空间,其中Y分量表示亮度信息,Cb和Cr分量表示色度信息。这种方法认为人眼对亮度信息的敏感度高于色度信息,因此只计算Y分量的PSNR可以更准确地反映图像的主观质量。这种方法在一些图像处理应用中较为常见。
- 直接使用matlab的内置函数psnr(注意该函数将所有图像当成灰度图像处理)。
为了方便直观,举例采用了原始图片+噪点,以及灰度图片+噪点的方式,采用的是第二种方式。
四、举例
1、10000个噪点
原图和源噪点图 峰值信噪比: 33.08138577085233
灰度图和灰度噪点图 峰值信噪比: 32.62523071202829
2、100000个噪点
原图和源噪点图 峰值信噪比: 23.133652590310287
灰度图和灰度噪点图 峰值信噪比: 22.64785582861017
3、1000000个噪点
原图和源噪点图 峰值信噪比: 13.469804979763211
灰度图和灰度噪点图 峰值信噪比: 13.13512860718188
SSIM(Structural SIMilarity),结构相似性
一、介绍
SSIM(Structural Similarity Index)是一种衡量两幅图像相似性的指标。它是基于图像组成的角度,将结构信息定义为独立于亮度、对比度的,反映场景中物体结构的属性。通过将失真建模为亮度、对比度和结构三个不同因素的组合,并使用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量,可以计算出两幅图像之间的相似性分数。
SSIM的值范围为-1到1,当两张图像一模一样时,SSIM的值等于1。与传统的误差测量方法(如均方误差)相比,SSIM更具有鲁棒性和准确性,因为它基于人眼对图像的感知,能够更好地反映图像质量。
在深度学习中,SSIM常被用来评估生成模型(如GAN)生成的图像与真实图像之间的相似程度。此外,SSIM也常用于衡量图像失真前与失真后的相似性,以及图像去雨、图像去雾、图像和谐化等任务的效果评估。
总的来说,SSIM是一种重要的图像质量评估指标,它能够帮助我们更好地理解和比较不同图像之间的相似性和质量差异。
SSIM(Structural Similarity Index)的公式如下:
[ SSIM(x, y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)} ]
其中:
- ( x ) 和 ( y ) 是待比较的两幅图像。
- ( \mu_x ) 和 ( \mu_y ) 分别是这两幅图像的均值。
- ( \sigma_x^2 ) 和 ( \sigma_y^2 ) 分别是这两幅图像的方差。
- ( \sigma_{xy} ) 是这两幅图像的协方差。
- ( C_1 ) 和 ( C_2 ) 是为了避免分母为零而加入的常数。通常情况下,( C_1 = (K_1 \cdot L)^2 ) 和 ( C_2 = (K_2 \cdot L)^2 ),其中 ( L ) 是像素值的范围(例如,对于8位灰度图像,( L = 255 )),而 ( K_1 ) 和 ( K_2 ) 是小于1的常数,通常取值为0.01和0.03。
SSIM的计算可以分为三个步骤:
- 亮度比较:( l(x, y) = \frac{2\mu_x\mu_y + C_1}{\mu_x^2 + \mu_y^2 + C_1} )。这个部分衡量了两幅图像的亮度相似度。
- 对比度比较:( c(x, y) = \frac{2\sigma_x\sigma_y + C_2}{\sigma_x^2 + \sigma_y^2 + C_2} )。这个部分衡量了两幅图像的对比度相似度。
- 结构比较:( s(x, y) = \frac{\sigma_{xy} + C_2}{\sigma_x\sigma_y + C_2} )。这个部分衡量了两幅图像的结构相似度。
最终,SSIM的得分是这三个部分的乘积:
[ SSIM(x, y) = l(x, y) \cdot c(x, y) \ cdot s(x, y) ]
SSIM的值域是-1到1,其中1表示两幅图像完全相同,-1表示两幅图像完全不同。在实际应用中,由于像素值总是正值,SSIM的值通常在0到1之间,越接近1表示两幅图像越相似。
二、使用场景
SSIM并不仅仅是一个简单的误差度量方法,而是基于人眼对图像的感知,能够更好地反映图像质量。因此,SSIM得分高的图像并不一定在像素级别上与原图像完全一致,但在人眼看来,它们的质量可能更接近。
此外,SSIM还可以用于评估图像处理算法(如去噪、去雾、超分辨率等)的效果,以及生成模型(如GAN)生成的图像与真实图像之间的相似程度。在这些应用中,SSIM得分通常用于比较不同算法或模型之间的性能差异。
总的来说,SSIM是一种非常有用的图像质量评估指标,它综合考虑了图像的亮度、对比度和结构信息,能够更全面地反映图像之间的相似性。
三、实现方式
- 直接计算法:这是最直接的实现方式,直接按照SSIM的公式进行计算。首先计算两幅图像的均值、方差和协方差,然后代入公式进行计算。这种方法简单直观,但可能计算量较大。
- 滑动窗口法:为了降低计算量,可以采用滑动窗口法。将图像分块,对每个块计算SSIM,然后将所有块的SSIM值进行平均,得到最终的SSIM得分。这种方法可以减少计算量,但需要注意窗口大小和形状对结果的影响。
- 高斯加权法:在滑动窗口法的基础上,可以采用高斯加权来计算每个窗口的均值、方差和协方差。这样可以更好地考虑窗口内像素之间的关系,提高计算的准确性。
- 深度学习库实现:在深度学习中,常用的库如PyTorch、TensorFlow等通常都提供了SSIM的实现。这些实现通常经过优化,计算效率较高。使用这些库可以方便地实现SSIM计算,但需要注意参数的设置和结果的解释。
本例使用的是scikit-image库的structural_similarity方法,底层使用的是第二种方式。
四、举例
1、10000个噪点
SSIM 得分: 0.9184005340005957
2、100000个噪点
SSIM 得分: 0.47344959251345375
3、1000000个噪点
SSIM 得分: 0.07643844461738225
VMAF(Video Multi-method Assessment Fusion),视频多方法评估融合
一、介绍
是一种由Netflix公司开发的视频质量评估指标。它利用大量的主观数据作为训练集,通过机器学习的手段将不同评估维度的算法进行“融合”,从而得到一个能准确反映主观意志的画质评价标准。
VMAF主要包括三种指标:Visual Quality Fidelity(VIF,视觉信息保真度)、Detail Loss Measure(DLM,细节丢失指标)和Temporal Information(TI,运动量指标)。这些指标综合评估视频的质量,包括清晰度、对比度、颜色饱和度等因素。
VMAF打分指令通常用于衡量视频的质量,特别是在视频编码、传输和处理过程中。该指令由视频处理软件或编码器提供,可以通过命令行或API调用来使用。指令会比较原始视频文件和编码后的视频文件之间的质量差异,并给出相应的分数。一般来说,VMAF分数越高表示视频质量越好,而分数越低则表示视频质量较差。
VMAF的优势在于其引入了深度学习机制,能更符合人眼视觉的视频评价标准。同时,VMAF通过为每一个基本的指标分配一定的权重,“融合”为一个最终指标,从而保留每一个基本指标的评价优势,得到更精确的分数。
地址:https://github.com/Netflix/vmaf
二、评分过程
VMAF的评分过程可以概括为以下几个主要步骤:
- 特征提取:首先,从视频中提取出多种特征,这些特征包括空间域特征(如VIF和DLM)和时间域特征(如TI)。这些特征通过特定的算法进行计算,用于衡量视频的质量。
- 权重分配:接下来,使用机器学习算法(如支持向量机,SVM)为每个特征分配一个权重。这些权重是根据大量的主观数据训练集得出的,以确保最终的评分能够准确反映人类对视频质量的感知和评价。
- 融合计算:将每个特征的得分与其对应的权重相乘,然后将所有加权得分相加,得到最终的VMAF评分。这个过程可以看作是一个加权平均的过程,其中每个特征对最终评分的贡献由其权重决定。
虽然没有一个明确的数学公式来表示VMAF的计算过程,但上述步骤描述了其基本思路和框架。实际的实现细节可能会因具体的软件库或工具而异,但总体上遵循上述步骤。
三、实现方式
- 命令行调用:VMAF提供了命令行工具,可以通过在终端或命令行界面中执行特定命令来调用。这种方式适用于快速评估视频质量,不需要编写复杂的代码。您可以通过指定输入视频文件、输出日志文件和其他可选参数来运行VMAF命令。
- 编程接口调用:VMAF还提供了编程接口,允许您在Python、Matlab等编程语言中直接调用VMAF库或函数。这种方式适用于将VMAF集成到您的应用程序或系统中,以便在视频处理、编码、传输等过程中进行实时质量评估。具体的接口文档和示例代码可以在VMAF的官方GitHub仓库或相关文档中找到。
- FFmpeg插件调用:VMAF可以作为FFmpeg的插件进行调用。FFmpeg是一个流行的开源多媒体处理框架,通过将其与VMAF集成,您可以在FFmpeg的处理流程中直接计算VMAF分数。这有助于在视频编码、转码和流媒体处理等应用中方便地评估视频质量
- vmaf-gui工具:
本例使用的是vmaf-gui工具进行了视频评分。
四、举例
720p源视频和转码后对比结果:
视频就不贴了,比较麻烦。
无参考的主观打分
开源:
腾讯的DVQA:
https://git.code.tencent.com/Tencent_Open_Source/DVQA
目前行业内的视频质量评估方法分为两大类:客观质量评估与主观质量评估。
前者计算视频的质量分数,又根据是否使用高清视频做参考、源视频是专业视频还是用户原创视频等进一步细分。
后者主要依赖人眼观看并打分,能够直观反映观众对视频质量的感受。
腾讯多媒体实验室提出的视频质量评估解决方案,首先结合业务需求,使用“在线主观质量评测平台”,来构建大规模主观质量数据库。
目前该评估算法已在腾讯内外部多款产品中进行使用验证,如腾讯会议就借助实验室上百个符合ITU/3GPP/AVS等国外内标准的指标进行评判,闭环监控全网的用户体验质量,从用户真实体验出发,不断优化产品性能。
收费:
腾讯:
产品介绍:
需要开通腾讯COS(对象存储)
https://cloud.tencent.com/document/product/460/80055
检测项 | 说明 |
---|---|
视频画面抖动、重影 | 检测因视频拍摄过程中因相机架设不稳和环境,导致的视频画面出现抖动以及重影等问题。 |
视频画面模糊 | 检测因拍摄条件,或视频多次转码或被压缩后产生的模糊问题。 |
视频画面低光、过曝 | 检测因环境状况及拍摄摄像头的硬件限制,在某些场景下拍摄的画面亮度和对比度缺失,导致画面较暗或画面过度曝光的问题。 |
视频画面花屏 | 检测在拍摄、保存和转存过程中一些未知因素导致视频画面产生花屏问题。 |
视频画面黑白边 | 检测在拍摄、保存和转存过程中一些未知因素导致视频画面产生黑边、白边、黑屏、白屏等问题。 |
视频画面噪点 | 检测视频拍摄中会因为相机和环境引入随机噪点。 |
视频画面马赛克 | 检测出视频画面的马赛克。 |
视频画面二维码 | 检测出视频画面上的二维码,包括条形码、小程序码等。 |
视频画面质量评价 | 用户设定一个视频画面质量分数阈值,经过系统综合评估分析得到视频片段的无参考质量评分,低于该阈值的视频片段结果会反馈给用户。 |
音频 | 检测出音频中的静音、低音、爆音等问题。 |
成本汇算:
视频质量评分 | 0.098元/分钟(vpaplus=费用*1.5) |
---|---|
百度:
产品介绍:
需要开通百度BOS(对象存储)文章来源:https://www.toymoban.com/news/detail-847675.html
https://cloud.baidu.com/product/MCT/videoqt.html文章来源地址https://www.toymoban.com/news/detail-847675.html
whiteScreen | 白屏检测模型 | - | - |
---|---|---|---|
blackScreen | 黑屏检测模型 | - | - |
tooBright | 过亮检测模型 | 0.500 | 表示检测每帧图像过亮程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],阈值越大,表示检测门槛越高。 |
tooDark | 过暗检测模型 | 0.500 | 表示检测每帧图像过暗程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义,阈值越大,表示检测门槛越高。 |
redScreen | 红屏检测模型 | - | - |
yellowScreen | 黄屏检测模型 | - | - |
greenScreen | 绿屏检测模型 | - | - |
blueScreen | 蓝屏检测模型 | - | - |
purpleScreen | 紫屏检测模型 | - | - |
reddish | 偏红检测模型 | 0.500 | 表示检测每帧图像偏红程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
yellowish | 偏黄检测模型 | 0.500 | 表示检测每帧图像偏黄程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
greenish | 偏绿检测模型 | 0.500 | 表示检测每帧图像偏绿程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
bluish | 偏蓝检测模型 | 0.500 | 表示检测每帧图像偏蓝程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
purplish | 偏紫检测模型 | 0.500 | 表示检测每帧图像偏紫程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
blur | 模糊检测模型 | 0.500 | 表示检测每帧图像模糊程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
noise | 噪声检测模型 | 0.500 | 表示检测每帧图像噪声程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
mosaic | 马赛克检测模型 | 0.001 | 表示检测每帧图像中马赛克区域与整个图像面积比值的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
freeze | 冻结检测模型 | - | - |
jitter | 抖动检测模型 | - | - |
blackEdge | 黑边检测模型 | 0.200 | 表示检测每帧图像中黑边区域与整个图像面积比值的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
blurEdge | 模糊边缘检测模型 | 0.200 | 表示检测每帧图像中模糊边缘区域与整个图像面积比值的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
staticEdge | 静态边缘检测模型 | 0.200 | 表示检测每帧图像中静态边缘区域与整个图像面积比值的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
crash | 花屏检测模型 | - | - |
colorBar | 彩条检测模型 | - | - |
block | 块效应检测模型 | 0.400 | 表示检测每帧图像块效应程度(值越大程度越大)的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
interlace | 场效应检测模型 | - | - |
mute | 静音检测模型 | 0.0001 | 表示检测的每帧音频的音量均值的阈值,小于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
volumeLow | 音量过低检测模型 | 0.001 | 表示检测的每帧音频的音量均值的阈值,小于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
volumeHigh | 音量过高检测模型 | 0.600 | 表示检测的每帧音频的音量均值的阈值,大于阈值认为单帧存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
soundIntermittent | 声音间断检测模型 | 0.0001 | 表示检测的每帧音频的音量均值的阈值,小于阈值认为单帧存在静音,5秒内出现两次及以上静音,则认为存在该异常;支持阈值自定义[0,1],设定阈值越大,表示检测门槛越高。 |
成本汇算:
质检类型 | 计费方式 | 单价(元/分钟) |
---|---|---|
视频问题检测 | 按检测视频时长计费 | 0.08 |
音频问题检测 | 按检测音频时长计费 | 0.03 |
到了这里,关于揭秘视频音画质量的神秘面纱:探索几种独到的分析方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!