离散余弦变换系数的量化控制方法和量化装置
技术领域
本发明涉及视频编码技术,特别涉及一种离散余弦变换(Discrete CosineTransform,DCT)系数的量化控制方法、以及一种DCT系数的量化装置。
背景技术
DCT系数是由视频图像数据中亮度(Y)分量计算得到的频率数据,用于表征视频图像数据的光照强度变化情形。如图1所示,每个DCT系数为一个8×8的矩阵,8列元素从左到右依次对应水平方向上逐渐升高的光照强度变化频率,8行元素从上至下依次对应竖直方向上逐渐升高的光照强度变化频率,在每个8×8的矩阵中,第一行第一列的元素为1个直流(DC)分量(如图1中阴影块所示),其对应水平方向和竖直方向最低的光照强度变化频率,而其余63个元素均为交流(AC)分量(如图1中空白块所示)。
其中,水平方向上逐渐升高的光照强度变化频率所导致的黑白像素分布状态,由图2a~图2d顺序示出;竖直方向上逐渐升高的光照强度变化频率所导致的黑白像素分布状态,由图3a~图3d顺序示出。
对于普通常见的场景,63个AC分量中的高频AC分量一般较弱;另外,人的视觉特性决定了人眼对高频的成分敏感度较低。因此,对于现有技术通常会对63个AC分量采取一些措施来去除或大幅减弱高频AC分量,而不会导致被人眼察觉。
如图4所示,在每个8×8矩阵的DCT系数中,A11为DC分量、A12~A88为AC分量,相应地,对于同一帧图像中所有8×8矩阵的DCT系数A11~A88,采用同一个8×8矩阵的量化表、并利用该量化表中的对应量化系数Q11~Q88分别对8×8矩阵的DCT系数A11~A88进行量化处理,得到量化后的8×8矩阵的DCT系数B11~B88,Bij=round(Aij/Qij)、i取1~8、j取1~8、round()表示取整,且在量化后的8×8矩阵的DCT系数中,B11为量化后的DC分量、B12~B88为量化后的AC分量。其中,作为除数的量化系数Q11~Q88通常全为非0值,如果有任意Qij为0,则会产生除0报错、导致量化处理失败。
例如,利用量化表对8×8矩阵的DCT系数进行量化处理,该量化表中对应高频AC分量的量化系数都比较大,那么,经量化后的8×8矩阵DCT系数中,63个AC分量中的高频AC分量的取值就会多数为0、甚至全部等于0,假定8×8矩阵中最后1行、最后1列的最高频AC分量A88为40,其对应的量化系数Q88为99,则在量化完之后该AC分量A88的取值会变为40/99=0.404,四舍五入取整后得到的B88即变为0。
此后,再对量化后的DCT系数B11~B88进行编码后即可传输。
在编码过程中,对于1个DC分量可以按照预设的DC分量哈夫曼表进行编码,而对于63个AC分量,则依据预设的AC分量哈夫曼表、并从DC分量开始按照之字形扫描顺序依次进行编码,即从最低频AC分量开始扫描至最高频的AC分量结束,如图5所示,折线箭头表示之字形扫描路径,而表示AC分量的空白块中的序号,则标识了该AC分量在之字形扫描中的顺序,当然,图5所示的之字形扫描仅仅是举例说明,现有技术中还可以采用其他方式。
按照之字形扫描顺序对63个AC分量编码的流程如图6所示:
步骤600,设置参数K,用于表示当前扫描到的AC分量顺序、并设置K的初始值为0;设置参数R,用于表示连续扫描到但未进行编码的取值为0的AC分量个数、并设置R的初始值为0。
步骤601,扫描到下一个AC分量,令K=K+1。
步骤602,判断第K个AC分量的取值ZZ(K)是否为0,如果是,则执行步骤603,否则执行步骤606。
步骤603,判断当前扫描到的取值为0的AC分量是否为最后一个、即K是否等于63,如果是,则执行步骤605,否则执行步骤604。
步骤604,暂不对当前扫描到的取值为0的AC分量进行编码,并对连续扫描到但未进行编码的取值为0的AC分量个数进行累加,令R=R+1,然后返回至步骤601。
步骤605,按照之字形扫描的最后一个AC分量的取值为0,即63个AC分量是以取值为0的AC分量为结尾,按照AC分量哈夫曼表,在最后1个AC分量的取值为0时,只要最后一个AC分量之前的连续若干AC分量的取值也均为0,则将结尾处连续的所有取值为0的AC分量统一编码为1个块结束(End Of Block,EOB)码字,然后结束流程。
假设,63个AC分量中,最后6个AC分量的取值顺序为:非零的任意值、0、0、0、0、0,则末尾处连续出现的5个0编码为1个EOB码字。
步骤606,当前扫描到的AC分量取值ZZ(K)为非零值,判断该取值非零的AC分量之前是否有多于15个连续的取值为0的AC分量未进行编码,即R是否大于15,如果是,则执行步骤607,否则执行步骤608。
步骤607,按照AC分量哈夫曼表,将连续16个取值为0的AC分量统一编码为1个零持续长度(Zero Run Length,ZRL)码字,并从记录的连续扫描到但未进行编码的取值为0的AC分量个数减去16,即令R=R-16,然后返回步骤606循环操作、直至取值非零的AC分量之前的连续取值为0的AC分量个数不足16个。
假设,前31个AC分量取值均为0、即R=31,第32个则为非0,则先将前16个AC分量统一编码为1个ZRL码字、并令R=31-16=15,剩余第17~31个取值为0的AC分量个数不足16个,从而经步骤606再判断后即可执行步骤608。
步骤608,取值非零的AC分量之前的连续取值为0的AC分量个数不足16个,将该取值非零的AC分量与之前不足16个的连续取值为0的AC分量统一编码为一个对应码字,然后执行步骤609。
步骤609,当前扫描到的取值非零的AC分量之前少于16个连续取值为0的AC分量,已在步骤608与当前扫描到的取值非零的AC分量一同编码,因而对记录的连续扫描到但未进行编码的取值为0的AC分量个数清零,即令R=0,然后执行步骤610。
步骤610,判断当前扫描到的取值非零的AC分量是否为最后一个,如果是,则结束本流程,否则返回步骤601。
至此,本流程结束。
上述流程虽然能够实现对63个AC分量的编码,但却存在如下问题:
如前所述,量化处理后的DCT系数中,对应越高的光照强度变化频率的AC分量的取值越有可能是0,那么,之字形扫描63个AC分量通常是以多个连续0结尾,因此,每组DCT系数编码后的结果中都会包含EOB码字;而且,量化处理后的DCT系数中,63个AC分量的取值多数为0、甚至全部等于0,因此,每组DCT系数编码后的结果中除了DC分量的码字之外,很有可能只包含EOB码字。
由此,对连续组若干量化后的DCT系数编码得到的码流数据中,基本上会近似周期性地交替出现DC分量的码字和EOB码字;进一步,对于一种极端的情况,即连续若干组量化后的DCT系数中,63个AC分量取值都为0,对连续若干量化后的DCT系数进行编码所得到的码流中,就会仅仅交替出现DC分量的码字和EOB码字,那么参见图7a,如果这些组的DC分量都相同,则会在码流中出现某种周期性规律。
此外,考虑图像中存在类似天空的这样一种亮度均匀的场景,可能同一帧图像的多组8×8矩阵DCT系数完全相同,因此这多组8×8矩阵DCT系数经过DCT变换、量化后得到的DC分量、AC分量都完全相同(未必63个AC分量都为0),那么参见图7b,得到的DC分量码字和AC分量的非零码字也都完全一致,从而也会在码流中出现某种周期性规律。
这样,码流数据具有基本固定的周期性规律,而对于具有周期性规律的码流数据来说,其在电器设备间传输时,例如在通过USB接口从摄像头芯片至PC机等电器设备之间的传输时,会导致码流数据传输的电磁干扰(Electromagnetic Interference,EMI)频谱中具有大量的离散峰值,即导致较强的EMI产生。
发明内容
有鉴于此,本发明提供了一种DCT系数的量化控制方法、以及一种DCT系数的量化装置,能够降低DCT系数编码后的码流数据所产生的EMI。
本发明提供的一种DCT系数的量化控制方法,将当前帧图像所对应的量化表中至少一个对应交流AC分量对应的量化系数设置为0,并利用至少一个量化系数为0的量化表对该帧图像的每个DCT系数进行量化处理,其中,
对于取值不为0的量化系数所对应的DC分量或AC分量,计算DCT系数中对应直流DC分量或AC分量与该量化系数的商、并对商取整,得到取值不为0的量化系数所对应DC分量或AC分量量化后的取值;
对于取值为0的量化系数所对应的AC分量,产生量化取值范围内的随机数,并将该随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
当前帧图像所对应的量化表中被设置为0的量化系数仅为一个。
当前帧图像所对应的量化表中,仅最后一个AC分量所对应的量化系数被设置为0。
当前帧图像所对应的量化表中,随机选择的一个AC分量所对应的量化系数被设置为0。
在得到所有取值不为0的量化系数所对应DC分量和AC分量量化后的取值之后,针对取值为0的量化系数所对应的AC分量产生量化取值范围内的随机数、并将产生的随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
本发明提供的一种DCT系数的量化装置,包括:
量化表存储单元,存储有每一帧所对应的量化表;
量化表设置单元,将当前帧图像所对应的量化表中至少一个对应交流AC分量对应的量化系数设置为0;
量化处理单元,利用至少一个量化系数为0的量化表对该帧图像的每个DCT系数进行量化处理,其中,
对于取值不为0的量化系数所对应的DC分量或AC分量,计算DCT系数中对应直流DC分量或AC分量与该量化系数的商、并对商取整,得到取值不为0的量化系数所对应DC分量或AC分量量化后的取值;
对于取值为0的量化系数所对应的AC分量,产生量化取值范围内的随机数,并将该随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
量化表设置单元仅将当前帧图像所对应的量化表中一个AC分量对应的量化系数设置为0。
量化表设置单元仅将当前帧图像所对应的量化表中最后一个AC分量所对应的量化系数设置为0。
量化表设置单元仅在当前帧图像所对应的量化表中随机选择一个AC分量、并对随机选择的一个AC分量所对应的量化系数设置为0。
量化处理单元顺序包括:
量化计算子单元,对所有取值不为0的量化系数所对应DC分量和AC分量进行量化处理,并令取值为0的量化系数所对应的AC分量量化后的取值为待定;
随机赋值子单元,在得到所有取值不为0的量化系数所对应DC分量和AC分量量化后的取值之后,针对量化后取值待定的取值为0的量化系数所对应的AC分量产生量化取值范围内的随机数、并将产生的随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
由上述技术方案可见,本发明将同一帧图像所对应的量化表中至少一个AC分量对应的量化系数设置为0,并利用至少一个量化系数为0的量化表对帧图像的每个DCT系数进行量化处理,且对于取值为0的量化系数所对应的AC分量,并不是按照传统处理方式那样产生除0报错,而是产生量化结果范围内的随机数、并将该随机数赋值为对应AC分量量化后的取值,从而通过使DCT系数中量化后的AC分量取值具有随机性来破坏量化后的连续DCT系数经编码后得到的码字周期性规律,从而能够降低DCT系数编码后的码流数据所产生的EMI。
附图说明
图1为现有DCT系数的8×8矩阵示意图;
图2a~图2d为随着水平方向光照强度变化频率逐渐升高的所导致的黑白像素分布状态示意图;
图3a~图3d为随着竖直方向光照强度变化频率逐渐升高的所导致的黑白像素分布状态示意图;
图4为现有对DCT系数的8×8矩阵进行量化处理的示意图;
图5为现有对DCT系数的8×8矩阵进行之字形扫描的示意图;
图6为现有对DCT系数中AC分量编码方法的流程示意图;
图7a为现有对DCT系数编码得到的一种码流数据示意图;
图7b为现有对DCT系数编码得到的一种码流数据示意图;
图8a为基于本发明实施例中量化处理方式得到的一种码流数据示意图;
图8b为基于本发明实施例中量化处理方式得到的另一种码流数据示意图;
图8c为基于本发明实施例中量化处理方式得到的又一种码流数据示意图;
图9为本发明实施例对DCT系数的8×8矩阵进行量化处理的一种最佳方式示意图;
图10为本发明实施例中量化装置的一种示例性结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明实施例中DCT系数的量化控制方法,通过使DCT系数中量化后的AC分量取值具有随机性来破坏量化后的连续DCT系数经编码后得到的码字周期性规律,从而降低DCT系数编码后的码流数据所产生的EMI。
具体说,将当前帧图像所对应的量化表中至少一个AC分量对应的量化系数设置为0,并利用至少一个量化系数为0的量化表对该帧图像的每个DCT系数进行量化处理,其中,
对于取值不为0的量化系数所对应的DC分量或AC分量,计算DCT系数中对应DC分量或AC分量与该量化系数的商、并对商取整,得到对应DC分量或AC分量量化后的取值;
对于取值为0的量化系数所对应的AC分量,并不是按照传统处理方式那样产生除0报错,而是产生量化结果范围内的随机数、并将该随机数赋值为对应AC分量量化后的取值。
这样,对于连续多组DCT系数中63个AC分量以多个连续0结尾的情况:
如果设置为0的量化系数为结尾处AC分量所对应的量化系数,则会使得连续多组DCT系数结尾处AC分量本应为0的量化后取值会变为量化结果范围内的任意随机数,因而参见图8a,就使得连续多组DCT系数编码后的码字中除了DC分量的码字之外,能够随机性地出现EOB码字和不同的非零码字,从而能够破坏连续DCT系数经编码后得到的码字周期性规律;
如果设置为0的量化系数为非结尾处AC分量所对应的量化系数,则即便连续多组DCT系数编码后的码字中均出现EOB码字,但由于非结尾处AC分量量化后的取值为量化结果范围内的任意随机数,因而参见图8b,就能够使得连续多组DCT系数编码后的码字中除了DC分量码字和EOB码字之外,还在DC分量码字和EOB码字之间随机性地***了不同的非零码字,从而也能够破坏连续DCT系数经编码后得到的码字周期性规律。
而对于连续多组DCT系数完全相同的情况,无论设置为0的量化系数为哪个AC分量对应的量化系数,均会使得连续多组完全相同的DCT系数经量化处理后变为互不相同,因而参见图8c,就能够使得这多组DCT系数经编码后得到的码字不会完全一致,从而能够破坏连续DCT系数经编码后得到的码字周期性规律。
在量化处理之后的编码完成后,至少一个量化系数为0的量化表也需要发送给解码端,并由解码端对码流中各码字解码后,利用至少一个量化系数为0的该量化表对解码得到的DCT系数进行反量化处理,得到DCT系数中各分量的真实值A’ij=Bij×Qij。
那么,对于取值未被设置为0的Qij来说,其对应的AC分量反量化处理得到的真实值A’ij能够真实反映图像中的亮度信息;
而对于取值被设置为0的Qij来说,其对应的Bij一定为随机数,因此,取值被设置0的Qij所对应的AC分量反量化处理得到的真实值A’ij就一定会为0,那么,对于编码端前量化后的取值本就应当为0的AC分量来说,其对应的量化系数Qij被设置为0不会为图像质量带来任何损失,但对于编码端前量化后的取值不应为0的AC分量来说,其对应的量化系数Qij被设置为0就对图像质量带来一定的损失。
因此,为了减少设置为0的量化系数可能对图像质量带来的损失,应当尽可能少地设置取值为0的量化系数。考虑到只要有一个量化系数的取值被设置为0即可使DCT系数中量化后的AC分量取值具有随机性,而设置为0的量化系数数量越多则仅仅是使得随机性越高,因而一种较佳的实现方式是仅将当前帧图像所对应的量化表中的一个AC分量对应的量化系数设置为0。
更佳地,在仅设置一个AC分量对应的量化系数为0时,考虑到DCT系数中最后一个AC分量通常就应当被量化为0,因此,参见图9,为了将设置为0的量化系数可能对图像质量带来的损失降为最低,可以将当前帧图像的量化表中对应最后一个AC分量A88的量化系数Q88设置为0,针对后续所有帧图像,也均可以将对应量化表中最后一个AC分量A88对应的量化系数Q88设置为0。
当然,由于一个设置为0的量化系数所可能导致的图像损失会很小,因此,也可不固定地将每帧图像的量化表中对应最后一个AC分量的量化系数设置为0,而是可以分别从每个当前帧图像的量化表中随机选择一个AC分量对应的量化系数并设置为0。
此外,在量化过程中通常利用量化表同时对DCT系数中的所有分量进行量化处理,因而在这种情况下,可以先对所有取值不为0的量化系数所对应DC分量和AC分量进行量化处理,而令取值为0的量化系数所对应的AC分量量化后的取值为待定,然后,在得到所有取值不为0的量化系数所对应DC分量和AC分量量化后的取值之后,再针对取值为0的量化系数所对应的AC分量产生量化取值范围内的随机数、并将产生的随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
以上,是对本发明实施例中DCT系数的量化控制方法的详细说明,下面,再对本发明实施例中DCT系数的量化装置进行说明。
图10为本发明实施例中量化装置的一种示例性结构示意图。如图10所示,本实施例中的DCT系数的量化装置包括:
量化表存储单元1001,存储有每一帧所对应的量化表;
量化表设置单元1002,将当前帧图像所对应的量化表中至少一个对应交流AC分量对应的量化系数设置为0;
量化处理单元1003,利用至少一个量化系数为0的量化表对该帧图像的每个DCT系数进行量化处理,其中,
对于取值不为0的量化系数所对应的DC分量或AC分量,计算DCT系数中对应直流DC分量或AC分量与该量化系数的商、并对商取整,得到取值不为0的量化系数所对应DC分量或AC分量量化后的取值;
对于取值为0的量化系数所对应的AC分量,产生量化取值范围内的随机数,并将该随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
在编码端对如图10所示装置得到的量化后的DCT系数进行编码后,还需要将至少一个量化系数为0的量化表与码流数据一起发送给解码端,并由解码端对码流中各码字解码后,利用至少一个量化系数为0的该量化表对解码得到的DCT系数进行反量化处理,得到DCT系数中各分量的真实值A’ij=Bij×Qij。
那么,对于取值未被设置为0的Qij来说,其对应的AC分量反量化处理得到的真实值A’ij能够真实反映图像中的亮度信息;
而对于取值被设置为0的Qij来说,其对应的Bij一定为随机数,因此,取值被设置0的Qij所对应的AC分量反量化处理得到的真实值A’ij就一定会为0,那么,对于编码端前量化后的取值本就应当为0的AC分量来说,其对应的量化系数Qij被设置为0不会为图像质量带来任何损失,但对于编码端前量化后的取值不应为0的AC分量来说,其对应的量化系数Qij被设置为0就对图像质量带来一定的损失。
因此,为了减少设置为0的量化系数可能对图像质量带来的损失,应当尽可能少地设置取值为0的量化系数。考虑到只要有一个量化系数的取值被设置为0即可使DCT系数中量化后的AC分量取值具有随机性,而设置为0的量化系数数量越多则仅仅是使得随机性越高,因而一种较佳的实现方式是,量化表设置单元1002仅将当前帧图像所对应的量化表中一个AC分量对应的量化系数设置为0。
更佳地,在仅设置一个AC分量对应的量化系数为0时,考虑到DCT系数中最后一个AC分量通常就应当被量化为0,因此,为了将设置为0的量化系数可能对图像质量带来的损失降为最低,量化表设置单元1002仅将当前帧图像所对应的量化表中最后一个AC分量所对应的量化系数设置为0。
当然,由于一个设置为0的量化系数所可能导致的图像损失会很小,因此,量化表设置单元1002也可不固定地将每帧图像的量化表中对应最后一个AC分量的量化系数设置为0,而是仅在当前帧图像所对应的量化表中随机选择一个AC分量、并对随机选择的一个AC分量所对应的量化系数设置为0。
此外,在量化过程中通常利用量化表同时对DCT系数中的所有分量进行量化处理,因而在这种情况下,量化处理单元1003可以顺序包括:
量化计算子单元1003a,先对所有取值不为0的量化系数所对应DC分量和AC分量进行量化处理,并令取值为0的量化系数所对应的AC分量量化后的取值为待定;
随机赋值子单元1003b,在量化计算子单元1003a得到所有取值不为0的量化系数所对应DC分量和AC分量量化后的取值之后,针对量化后取值待定的取值为0的量化系数所对应的AC分量产生量化取值范围内的随机数、并将产生的随机数赋值为取值为0的量化系数所对应的AC分量量化后的取值。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。