视频编码中的块效应、振铃效应和呼吸效应分析
时间:2021-07-28
本文章向大家介绍视频编码中的块效应、振铃效应和呼吸效应分析,主要包括视频编码中的块效应、振铃效应和呼吸效应分析使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
来源
https://blog.csdn.net/SoaringLee_fighting
https://blog.csdn.net/SoaringLee_fighting/article/details/80639732
Date: 2018.5.28
1、块效应:
(1)概念:
主要是由视频图像采用基于块的编码方式和量化造成相邻块之间存在明显差异的现象,在视频编码中人眼察觉到的小块边界处的不连续。
(2)产生原因:
1、编码过程中对残差进行DCT变换是基于块的,使得块与块之间的相关性被忽略了;
2、对DCT系数进行量化,不同的图像块做了不同的处理。
(3)解决方案:
在视频编码中,为了解决或减小块效应,很多视频编码标准(H264,H265,SVAC)中采用了去块滤波Deblock的方案。
2、振铃效应:
(1)概念:
图像处理中,对一幅图像进行滤波处理,若选用的频域滤波器具有陡峭的变化,则会使滤波图像产生“振铃”,所谓“振铃”,就是指输出图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡。
(2)产生原因:
主要是由于DCT变换后对高频分量进行滤波操作导致。
(3)解决方案:
在视频编码中,为了解决或减小振铃效应,H265和SVAC2中采用了SAO样点滤波偏移的方案。
3、呼吸效应:
(1)概念:
视频编码中的呼吸效应是指由于I帧的插入造成图像质量忽然变好,切换到P帧后又忽然变差。
在视频监控中,为了保证传输,通常会把I帧编小,在这种情况下,会导致I帧质量变差的时候画质突然变差然后再慢慢变好,怎么解决呼吸效应?
(2)分析:
呼吸效应在静止的场景下比较容易观察出来,运动场景中,大部分的图像内容都在变化,不容易发现。尤其在低码率的视频监控场景下,呼吸效应比较明显。
产生的主要原因:I帧和P帧的编码模式和编码质量的不同,导致视觉上图像不连续。
(3)解决方案:
- 一般情况下,CBR(固定码率)码控方式比CQP(固定QP)的呼吸效应更加严重。因此将码控模式修改为CQP方式在一定程度上可以减弱呼吸效应。
- H264/5可以调节I帧P帧直接qp的偏差,控制I帧和P帧的大小比例关系,I帧的qp越小,I帧越大,图像越清楚,在一定程度上提升了整体图像质量,呼吸效应在一定程度上可以得到缓解;但是I帧也不能调的过大,在CBR模式下,I帧把全部带宽都吃掉了,P帧就只能编的更模糊一些,反而加重了呼吸效应;在实际调节过程中,就是通过调整intraQpDelta/intraQpOffset这类的参数来调节I帧大小;在ISP中,如果有3DSR功能,针对静止场景,可以有效改善呼吸效应。该解决方案参考:https://blog.csdn.net/szfhy/article/details/79882903
- HISI提出了前滤波编码的方案,基于HISI编码器的硬件实现,对I帧的编码数据进行滤波操作然后再编码,可以改善呼吸效应,对应MPI接口为HI_MPI_VENC_GetDeBreathEffect和HI_MPI_VENC_SetDeBreathEffect。
原文地址:https://www.cnblogs.com/ccfco/p/15070877.html
- 第一个IronPython程序(之二)
- Python 项目实践二(下载数据)第四篇
- Python 项目实践二(下载数据)第三篇
- 体验扁平化的WordPress 后台管理界面
- Python 项目实践二(生成数据)第二篇
- 重新审视SqlDataReader的使用
- Python 项目实践二(生成数据)第一篇
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 删除 WordPress 导航菜单的多余 CSS 选择器
- 使用asp.net 2.0的CreateUserwizard控件如何向自己的数据表中添加数据
- 自定义(修改)WordPress管理后台界面的字体样式
- Sql Server 2005 ROW_NUMBER 函数实现分页
- Http协议中的数据传送之多重表单提交--multipart/form-data
- 另类大数据:中国有嘻哈的rapper们都在唱些什么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 交通标识分类-TensorFlow实现
- Redis使用与操作k-v数据
- Spring集成Hadoop和Hbase
- JVM系列之:JIT中的Virtual Call接口
- 重新构建711的Android项目(二),架构的选择与实现
- Android的配置文件操作封装,摒弃SharedPreference操作配置漫天乱飞
- java实现PBOC的TLV格式解析,超简单的解析(全互联网最简单)
- 链表总计
- Spring整合MongoDb
- 正确使用Qt多线程
- Spring与hibernate与mybatis
- scala 模式匹配的几个模式
- Spring Security 认证
- Spring Security 简单配置用户存储
- 我的小工具-nodejs串口转TCP调试通信