H.264量化反量化反变换过程
- 格式:pdf
- 大小:209.00 KB
- 文档页数:5
1. 简介为了进一步节省图像传输码率,需要对图像信用进行压缩,通常采用变换编码及量化来消除图像信号中的相关性及减小图像编码的动态范围。
变换编码将图像时域信号变换成频域信号,在频域中,图像信号能量大部分集中在低频区域,相对时域信号,码率有较大下降。
H.264对图像或预测残差采用4x4整数离散余弦变换技术,避免了以往标准中使用的通用8x8离散余弦变换、逆变换经常出现的失配问题。
量化过程根据图像的动态范围大小确定来量化参数,即保留了图像必要的细节,又可减少码流。
在图像编码中,变换编码和量化从原理上讲是相互独立的两个过程。
但在H.264中,将两个过程中的乘法运算合二为一,并进一步采用整数运算,较少编码的运算量,提高了图像压缩的实时性,这些措施对峰值信噪比(PSNR )影响很小,可以忽略不计。
H264的整数变换及量化过程如图1,其中,如果输入块是色度块或帧内16x16预测模式的亮度块,则将宏块中各4x4块的整数余弦变换的直流分量组合起来再进行Hadamard 变换,进一步压缩码率。
DCT 直流系数变换,内16x16预测模式下度块直流系数变换和图1 编码器中变换编码和量化过程2.离散变换H.264协议中的变换方式主要有3种:4x4残差变换(实际为整数DCT 变换);4x4亮度直流系数变换(16x16帧内模式下)(离散哈达玛变换);2x2色度直流系数变换(离散哈达玛变换)。
2.1 整数DCT 变换2.1.1 按理论推导,二维NxN 图像块的DCT 变换的公式实际为(公式1)由于A中的a, b, c都是实数,而图像块X中的元素都是整数,对实数的DCT,由于在解码端存在浮点数运算精度的问题,会造成解码后的数据的失配,进而引起漂移。
由于H.264中使用了较多的预测过程,甚至内部编码模式也依赖于空间预测。
因此H.264对预测漂移是十分敏感的,为此H.264对4x4 DCT中的A军阵进行了改造。
采用整数DCT技术,有效的减少了计算量,同时不损失图像的准确度。
•编码器的核心是基于运动补偿预测(motion compensated prediction, MCP)。
有两条数据通道:前向通道和重建通道。
在前向通道中,编码器的输入是帧Fn,每帧画面是以16×16像素大小的宏块为单位组成的,每个宏块分别进行帧内或帧间预测编码。
在图中,帧间预测的参考帧被限定为前一帧Fn’,但是实际上,参考帧的数量可以多达五帧。
•当前宏块减去其预测值P得到残差宏块Dn,Dn经过块变换和量化得到量化系数X,对量化变换系数进行重排序和熵编码,得到的系数以及一些用于解码的附加信息(例如宏块预测模式、量化步长、运动矢量信息等)经由网络抽象层NAL (network abstraction layer)进行传输和存储。
•在重建通道中,宏块量化系数X被解码,用于构建重建帧(用于做预测)。
如图所示,系数被反量化、反变换后,产生差值宏块Dn’(由于量化过程引入误差,Dn’与先前的Dn并不一致)。
预测宏块P与Dn’相加构成重建宏块uFn’。
再引入滤波器减小块效应失真,得到重建的Fn’。
在编码器中引入重建通道的目的是为了使编码器和解码器使用相同的参考帧来构成预测宏块P,否则,预测宏块P在编码器和解码器中将不一致,这将造成误差积累或编解码器间的“漂移(drifting)”。
H.264/A VC 学习之整数变换与量化一、整数变换(Transform)1、为什么进行变换空间图像数据通常是很难压缩的:相邻的采样点具有很强的相关性(相互关联的),而且能量一般平均分布在一幅图像中,从而要想丢掉某些数据和降低数据精度而不明显影响图像质量,就要选择合适的变换,方法,使图像易于被压缩。
2、H.264对变换的要求(与传统DCT 变换的区别)H.264变换是建立在DCT 的基础上但又与传统DCT 不同,表现在:①它是整数变换,其中所有的运算都是整数运算;②如果按照标准进行反变换,将不会产生解码端与编码端的误匹配问题;③核心运算部分只用到加法和移位,不需要乘除运算;④变换中系数的缩放被融入到量化器中。
在本篇的学习中,后面将会讲述整个变换与量化及反变换与反量化过程,从而对以上四点有一个清晰的理解。
3、为什么要进行整数变换传统的变换中,残差解码包含了漂移的可能性,即编码与解码的不匹配。
而漂移的原因是逆变换不完全是整数运算。
传统的设计与IDCT 浮点实现的精度有关。
一方面,精度的选择适应特殊结构的灵活性;但另一方面,这灵活性的代价是预测中引入了漂移。
在线性DCT 变换中,Hx X =)21cos[(2).(Nkn n N c n k H H kkn +==它的缺点就是是无理数,即在进行直接变换或者逆变换时,可能不能确实得到同样的返回数据。
),(n k H 因此,用一个有整数输入的正交矩阵来代替H 是合适的。
且可以采用蝶形算法减少加法和乘法次数。
图1蝶形算法在本篇后文对变换公式的推导可以看到进行整数变换的可能性。
4、整数变换的过程(1)输入为预测残差,输出为准备进行熵编码的数据;(2)对16x16的亮度分量的16个4x4块进行DCT变换后,将每个4x4块的DC系数(还没有经过量化)提取出来,组成一个4x4的luma DC块,进行4x4的Hadamard变换;(3)对8x8chroma分量(色度分量)的4个4x4块进行DCT变换后,也将每个4x4块的DC系数提取出来,组成一个2x2chroma DC块,对其进行2x2的Hadamard变换。
一种基于FPGA高性能H.264变换量化结构设计摘要:H.264作为最新的视频编码标准具有很高的压缩性能,对它的研究具有重要的意义。
根据H.264的变换量化算法设计一种基于FPGA的高性能变换量化处理结构,该结构采用流水线操作和分时复用技术。
结果显示,该设计既节省了资源,又保证了效率;能够同时处理整个4× 4块的全部16个残差输入数据,并在236个时钟内完成对1个宏块的残差数据从输入到反变换输出重建值的完整变换量化过程。
它的处理速度和性能大大提高,可用于硬件加速。
关键词:H.264;变换;量化;FPGA0 引言H.264高效的编码效率是以其高复杂性为代价的,因此制约了它在高分辨率、实时处理等方面的应用。
而FPGA器件采用流水控制策略和并行处理方式,可为H.264复杂的编码模块提供硬件加速引擎。
变换量化模块在H.264编码算法中被频繁调用。
因此研究在尽量合理控制其资源消耗的前提下,提高变换量化模块的工作频率及处理数据的吞吐量,并完成变换量化一系列完整功能的变换量化结构具有重要的实际意义,也成为当前研究的首要问题。
H.264.变换是基于DCT的,其全部采用整数DCT变换,这样就避免了正变换和反变换的失配问题,既不丢失解码精度,也适合于FPGA硬件实现。
1 算法原理及分析1.1 变换算法及分析H.264变换是整数DCT变换,该算法实现了编码端和解码端反变换之间的零匹配,从而减少了解码精度的丢失。
通常H.264变换编码以4×4块为单位,核心变换矩阵如下:当核心变换矩阵中a=1时,为DCT正向变换矩阵Cf,;若将DCT正向变换矩阵Cf,中所有的2变为1,并保持所有符号不变,则变成Hadamard变换矩阵Hi;若将以上矩阵中所有的2变为1,并使a=1/2,保持所有符号不变,则为DCT反向变换矩阵CTi。
1.2 量化算法及分析H.264的分级标量量化器支持多达52个量化步长Qstep,用量化参数QP进行索引。
H.264(JM12.2)解码流程理解版本: 1时间:2010.2-2010.3邮件:zjhzchen@主要包括以下两个方面:1.解码标准原理2.JM代码中的解码流程一、H.264解码标准解码器功能框图如下:解码器功能框图详细的解码流程如下:详细的解码流程二、JM12.2的解码主控流程解码总流程帧解码流程(decode one frame)解码一帧的流程读一个片(read_new_slice)解码IDR包括图像的帧号,计算POC,为存储图像分配空间,错误恢复的重设置解码IDR灵活移动宏块的初始化(FmoInit)1. mapUnitToSliceGroupMap变量mapUnitToSliceGroupMap的计算流程2. MbToSliceGroupMap函数NextMbAddress( n )的流程图像序列号的计算(decode_poc)参考帧列表的重排序(reorder_lists)解码一个片(decode_one_slice )为直接预测模式做一些准备工作:获取co_located 图像、计算mv_scale解码一个片熵解码:包括解出宏块类型、预测模式、MVD 、CBP 、残差(包括反量化操作)等反变换及运动补偿:反量化反变换、运动补偿、像素重构等写入各个8*8块的预测模式及运动向量到错误隐藏变量中保存相关的片参数计算宏块,块,像素的坐标;宏块结构语法元素的初始化;相邻块的可用性;以及滤波参数开始一个宏块(start_macroblock)开始一个宏块读一个宏块(read_one_macroblock)// intra frame将亮度块中的16个4*4块的预测模式设置为2(直接预测),运动向量置0宏块(也即P_Skip类型宏块)。
无残MVD。
直接利用预测MV得到像素预=像素预测值从NAL中读取运动矢量信息(readMotionInfoFromNAL)从NAL中读运动矢量信息从NAL中读取CBP以及残差信息(readCBPandCoeffsFromNAL)如果当前宏块不是帧内16*16或者I_PCM类型宏块则从码流中读取CBP从NAL中读取CBP和残差信息解码一个宏块(decode_one_macroblock)解码一个宏块的流程注:此处的解码包括预测信息,残差的反变换以及图像的重建将宏块的预测模式以及运动信息写入错误隐藏变量中(ercWriteMBMODEandMV)将预测模式和运动信息写到错误隐藏变量中退出图像(exit_picture)退出图像图像的去块滤波(DeblockPicture)图像的去块滤波图像的错误检测以及处理图像的错误检测以及处理store_picture到解码缓冲区(store_picture_in_dpb)IDR内存管理(idr_memory_management)IDR内存管理adaptive-内存管理控制(adaptive_memory_management)参考图像的自适应内存控制标记过程分配LongTermFrameIdx给一个短期参考图像插入图像到DPB(insert_picture_in_dpb)插入图像到DPBflush-DPB(flush_dpb)将DPBB.fs的参考标记置为0Flush-DPB。