书名: 《深入理解视频编解码技术—-基于H.264标准及参考模型》

第一章

1.各种变换,如DCT, 离散傅里叶变换等,是为了变换到另一个域中,便于对图像进行压缩(如果加入预测,残差值会更小一些,能够让编码长度更短一些)

2.对在变换域中,能找到更多相关性,这样在编码的时候能够更多的压缩

离散余弦变换DCT 经常把整数变换成浮点数 无法使用在无损压缩中 图像能量都集中在离散预先变换后的低频部分
整数DCT变换 无损压缩

第二章

2.1 预测编码

2.1.1

2.1.2 帧间预测编码

2.1.3 运动估计

基于块匹配的运动估计,就是找到帧和帧之间最相似的块,记录运动矢量

2.1.3.1 运动估计的参考帧,前向后向及双向预测

2.1.3.2 运动搜索块的大小

2.1.3.3 运动搜索范围

2.1.3.4 运动估计准则

1)SAD

绝对误差和

SAD=∑(x,y)∈A|s[x,y]−s2[x,y]|

SAD=\sum_{(x,y)\in A}|s[x,y] - s^2[x,y]|

2)SATD
3)SSD
4)MAD
5)MSD

2.1.3.5 运动搜索算法

(1)全搜索算法
(2)快速搜索算法
三步法
二维对数法
交叉法
菱形法

2.1.4 运动补偿

在运动估计的基础之上,才能作运动补偿,其实就是求运动矢量的残差
MVD=MV−MVp MVD = MV - MV_p
MVD为运动矢量的残差, MV为原来搜索到的运动矢量, MVp MV_p是通过周围块的MV预测得到的预测运动矢量

2.4 编码

2.4.7 指数哥伦布编码

应用范围:
除了DCT变换后的系数以外都用指数哥伦布编码

h.264 使用0阶指数哥伦布编码
[M zeros][1][INFO]
ExpG依据变字长编码理论。在变字长编码中,编码器的编码输出码字是长度不等的码字。大概率出现的信息符号,赋以短字长的码字;小概率出现的信息符号,赋以长字长的码字。所以要把对应数值映射到code_num的时候,就要遵循这个原则,概率大的映射到短字长的码字,概率小的映射到长字长的码字。
ExpG码字的二进制结构如下:
[前导零][1][INFO]
码字包含 M个前导零(M>=0),
bit 1,
M-bit信息域INFO。

根据输入的参数code_num,
ExpG码的编码过程是:
M = floor(log2(code_num + 1))
INFO = code_num + 1 - 2^M

相应的,
解码过程是:
(1) 读取一系列连续的bit 0直到bit 1,记录bit 0的个数(M)
(2) 读取bit 1
(3) 读取M-bit = INFO
(4) code_num = 2^M + INFO - 1
由此,ExpG的码字长度是2M+1比特。

第三章

3.1 H.264常见术语解释

3.1.1 基本名词解释

1)场和帧

2)宏块、片

一个编码图像通常划分成若干宏块组成,一个宏块由一个 16×16 亮度像素和附加的一个 8×8 Cb和一个 8×8 Cr 彩色像素块组成。每个图象中,若干宏块被排列成片的形式。
I 片 只包含I 宏块,P 片可包含 P 和I 宏块,而B 片可包含 B 和I 宏块。
I 宏块利用从当前片中已解码的像素作为参考进行帧内预测(不能取其它片中的已解码像素作为参考进行帧内预测)。
P 宏块 利用前面已编码图象作为参考图象进行帧内预测,一个帧内编码的宏块可进一步作宏块的
分割:即 16×16、 16×8、 8×16 或 8×8 亮度像素块(以及附带的彩色像素);如果选了 8×8 的子宏块,则可再分成各种子宏块的分割,其尺寸为 8×8、 8×4、 4×8 或 4×4 亮度像素块(以及附带的彩色像素)。
B 宏块 则利用双向的参考图象(当前和未来的已编码图象帧)进行帧内预测。

3.1.2 档次(profile) 和 级(level)简介

Baseline(基本)档次(CAVLC)

Main(主要)档次(CABAC)

Extended(扩展)档次(CAVLC)

不同的档次,支持的功能不一样,熵编码的方式也不一样

3.2 H.264编解码器框架


先得到残差,然后再进行DCT变换、量化!!!

3.3 帧内预测

相邻的附近的预测,包括亮度和色度

亮度:

预测模式

Intra4x4
Intra16x16

代价计算公式

Intra4x4 和 Intra16x16的代价计算公式不一样

亮度最佳帧内预测模式的选择有三个步骤

1.计算并得到代价最小的Intra4x4预测模式
2.计算并得到代价最小的Intra16x16预测模式
3.比较前两步得到的代价,取其中代价较小的模式为最佳帧内预测模式

色度:

色度的最佳帧内预测模式的选择只需要比较4种模式的代价,选择代价最小的模式。

预测模式也可以通过旁边块来预测到,这样可以较少对预测模式的编码

帧内16x16预测的时候,要把DC系数抽取出来,组合成一个4x4块,再经过Hardmard变换

3.4 帧间预测

3.4.1 树状结构分块及运动估计

3.4.2 亚像素插值

3.4.3 多参考帧预测

3.4.4 MV预测与SKIP模式

(1)MVp的获取

用周围MB块的MV值来预测该块的运动矢量,得到 MVp MV_p

(2)SKIP模式编码

P_Skip类型宏块(H.264标准文档表7-13)

P_Skip类型宏块,也就是COPY宏块,既无运动矢量残差(MVD),也不编码量化残差,
解码时,直接用MVp作为运动矢量得到像素预测值,像素重构值等于像素预测值
条件: MC得到的最终运动矢量等于预测运动矢量MVp,即运动矢量差MVD为0,还有其余条件,详见书上

B_Skip类型宏块(H.264标准文档表7-14)

B_Skip类型宏块,也是既无运动矢量残差(MVD),又不编码量化残差,
解码时,通过Direct预测模式计算出前、后向MV,利用前、后向MV得到像素预测值,像素重构之等于像素预测值
条件: 变换系数要么全被量化为0,要么采用某种算法被抛弃

3.4.5 B帧预测

3.4.6 加权预测

1) 亮度变化场景加权预测

帧间运动补偿是基于视频亮度不发生变化这样一个假设,而在视频寻列中,经常会遇到亮度变化的场景,加权预测的提出是为了应对亮度变化的场景。

2) 编码

亮度变化检测 :直方图,个灰度级差别的绝对和
计算加权系数 :计算参考帧和当前帧的而亮度均值的壁纸,利用该壁纸作为加权系数; 或 MSE最小的加权系数和偏移量的计算加权系数
亮度补偿

运动估计 在搜索窗的范围内进行搜索,而不是整个帧图像范围
运动补偿等等

3.2熵编码

CAVLC
应用范围:
在 H.264标准的基本档次中 ,亮度块和色度块的残差数据是用 CAVLC 进行编码的,即DCT变换后的数据是CAVLC编码的。
**(
残差数据在经过变换和量化后,非零系数主要集中在低频部分;高频部分的系数则大多数为零,非零系数的值也比较小,一般都是± 1。 CALVC充分利用了残差数据的这一特性,设计了相应的编码规则,减少了块信息的冗余度。
)**
在h.263 MPEG-4中用的比较多

大体思想是拆分
拆分成 非零系数 、 拖尾系数 和 0;
拖尾系数不超过3个而且和非零系数有重叠,拖尾系数只有1 和 -1,可以用0和1来代表正负来编码;
非零系数知道幅值即可;
剩下的都是0,只要记录位置即可
1)把一个4x4系数矩阵,通过zigzag的方式扫描后, 重新排序
2)对非零系数的数目(TotalCoeffs) 以及 拖尾系数(TrailingOnes)的数目进行编码
3)对每个拖尾系数的符号进行编码,标准规定用0表示“+”号,1表示“-”号。编码的顺序是按照反向扫描的顺序,从高频数据开始。
4)对最后一个非零系数前零的数目(TotalZeros)进行编码。
5)对每个非零系数前零的个数(RunBefore)进行编码。还有一个变量ZerosLeft表示当前非零系数左边的所有零的个数,ZerosLeft的初始值等于TotalZeros,在每个非零系数的RunBefore值编码后进行更新。
注意在一下两种情况下是不需要编码的:最后一个非零系数(run_before[0])前零的个数;没有剩余的零需要编码(ZerosLeft = 0)
CABAC 并没有看懂

3.7 去块效应滤波器

3.7.1 块效应及其产生原因

3.7.2 后置滤波 与 环路滤波

3.7.3 滤波过程

1)计算边界强度BS

2)区分真假边界,假边界即由块处理造成的边界需要进行去块效应滤波

3.7.4 滤波运算

根据边界强度BS的不同,采用不同强度的滤波

3.9 SP 与 SI帧技术

3.9.1 引入

3.9.2 应用

1)流间切换 如视频清晰度切换
2)拼接与随机接入 如在视频播放中间插入广告等造成的瞬时场景变化
当流的内容相同,只是图像质量不同时,可用SP技术;当流的内容相差很大时,使用SI帧技术将更有效
3)错误恢复

3.9.3 原理 没看懂原理

用不同的帧能推导出后面相同的帧,很奇怪的事情,没看懂原理

举例 :从 480p 切换到 720p
720p的SP主帧在编码,跟平常一样,其重建值标为720p重建值
720p的SP辅帧编码的时候,输出的
残差 = 720p重建值 - 480p -> 720p预测值,其中480p预测值指的是从480p流中预测得到的720p的值
所以发送残差以后,可以根据前一帧的480p图像做参考,得到预测值,加上残差,可以得到720p的重建值,即解码得到SP辅帧

我的理解
就是在480p视频流中(480p的残差)
插入了720p的视频(720p-480p的残差),可以从480p视频帧预测出720p视频帧,然后加上
这个跨分辨率的残差,可以解出720p视频帧

3.10 码率控制

3.10.1 基本原理

码率控制的总体目标是控制每一帧图像编码输出的比特数,并在总比特数一定的约束条件下使得图像失真最小,并且保证编解码端的缓存区不发生溢出。也就是说,典型的码率控制过程是一个率失真RDO优化的过程,即在给定的目标比特率下,选择适当的量化参数使得失真最小。
具体的并没看懂

3.11 模式选择与率失真优化(RDO)

3.12 H.264的传输与存储 涉及到NAL网络部分居多,这个暂时不用过多的纠结

3.13 H.264的差错控制与错误隐藏 没看懂,先不深究了

深入理解视频编解码技术----基于H.264标准及参考模型 读书笔记相关推荐

  1. 【从零开始】理解视频编解码技术

    [从零开始]理解视频编解码技术 auxten ​ CovenantSQL 联合创始人 ​关注他 1,263 人赞同了该文章 转载自: https://github.com/leandromoreira ...

  2. 深入浅出理解视频编解码技术

    导读:随着移动互联网技术的蓬勃发展,视频已无处不在.视频直播.视频点播.短视频.视频聊天,已经完全融入了每个人的生活.Cisco 发布的最新报告中写道,到 2022 年,在移动互联网流量中,视频数据占 ...

  3. 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准

    一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...

  4. 音视频编解码技术之视频编码基本概念介绍

    视频压缩名字解释: 1.有损和无损压缩:在视频压缩中有损(Lossy )和无损(Lossless)的概念与静态图像中基本类似.无损压缩也即压缩前和解压缩后的数据完全一致.有损压缩意味着解压缩后的数据与 ...

  5. 【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  6. 【H.264/AVC视频编解码技术详解】二十三、帧间预测编码(1):帧间预测编码的基本原理

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  7. 【H.264/AVC视频编解码技术详解】二. 主流视频编码标准的发展

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  8. 【H.264/AVC视频编解码技术详解】三. H.264简介

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  9. 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

最新文章

  1. swift 通知中心 进入后台多久会通知用户关闭此功能
  2. python封装方法有几种_Python中的封装有什么作用?
  3. jboss中控制台jmx-console 登录的用户名和密码设置
  4. 学习笔记(二十)—— 网络编程
  5. HarmonyOS之sdkmgr命令的使用
  6. cannot access xxx的解决办法
  7. 大数据概论ppt_解读 | 货拉拉搬家大数据报告(30页PPT干货)
  8. Vue.js - Day5 - Webpack
  9. matlab实验5函数文件,实验五M文件和MATLAB设计技术总结.doc
  10. Windows YII2安装
  11. Java基础篇:如何使用continue语句
  12. 6步学会VS封装DLL
  13. X-Scan使用教程
  14. MySQL学习笔记.安全管理
  15. 蚂蚁金服开发文档中心
  16. 码支付源码 无授权—个人免签约支付系统二维码收款即时到账源码
  17. hadoop集群搭建完整教程,java电商项目面试技巧
  18. 2022Android各APP免费加固方案评估
  19. ‘gbk‘ codec can‘t decode byte 0xa4 in position 16433: illegal multibyte sequence
  20. k8s部署zabbix_基于k8s平台的Zabbix压力测试

热门文章

  1. Alfred+iTerm2+go2shell+XtraFinder工具组合,使用,破解,下载简单教程
  2. 问的多查的多的vue面试题整理不容错过,快看有没有你被问到的题目!
  3. servlet过滤器详解
  4. php 上取整函数是,PHP 取整函数参考
  5. 一、页面做完右侧留白
  6. 中国IT外包追赶印度机遇来临 外包业面临转型
  7. EVC中嵌汇编实验心得
  8. 什么是面向对象编程(OOP)
  9. python删除列表中字符串,在Python中从列表中删除字符串
  10. 补习系列(6)-SpringBoot 整合Shiro 一指禅