帧内和帧间压缩有损在哪里?
来源:10-6 H264无损压缩及编解码处理流程

慕妹3585395
2024-04-06
老师说10-4 帧内压缩技术 和 10-5 帧间压缩技术是有损的。但是通过视频内容,没看明白有损在哪里。
下面是综合了一下网上的其他资料:
在H.264编码过程中,完整的视频编码流程包含了以下几个核心环节:
1 宏块分割与预测: (无损)
- 对于I帧(帧内预测),编码器对图像进行宏块分割,并对每个宏块采用不同的帧内预测模式进行预测。
- 对于P帧和B帧(帧间预测),首先进行运动估计,计算每个宏块相对于参考帧的运动矢量+残差值。
2 计算残差值:(无损)
- 宏块预测+残差值:预测宏块与原始宏块相减,得到的是帧内预测的残差值,这个过程是差分运算来实现的,理论上是无损的。
- 运动矢量+残差值: 预测宏块与原始宏块相减,得到的是帧间预测的残差值,这个过程是差分运算来实现的,理论上是无损的。
3 变换编码:(有损)
- DCT变换: 接下来,对计算得到的残差值进行离散余弦变换(DCT变换)或整数变换,将残差信号从空间域转换至频域
- DCT变换本身是无损的,但是DCT系数采用了量化处理,所以会对数据进行粗略化处理。
4 量化:(有损)
- 量化: 变换后的系数经过量化处理,即将高频系数近似取整,以降低数据精度和数量。这个步骤是为了显著减少数据量,但它同时也是整个编码过程中最主要的有损来源,因为量化过程会导致部分图像细节的丢失。
5 熵编码:(无损)
- 熵编码: 量化后的系数按特定规则重新排列(如熵编码前的符号编码或Zigzag扫描等),随后使用霍夫曼编码或算术编码等熵编码技术,对数据进行高效压缩。熵编码根据数据的统计特性进行无损压缩,解码时能完全恢复原始量化系数,故此过程视为无损。
所以总结一下:在H.264编码过程中,宏块预测、计算残差值和熵编码这三个步骤在理想情况下被认为是无损的,而DCT变换后的量化环节则为有损处理,它直接影响了编码压缩率及最终重建图像的质量。
我知道这个资料和老师说的不一样,请老师可以具体再指出一下细节吗?还是我对视频教程中的部分内容有误解。
写回答
1回答
-
1. 宏块分割与预测是有损的,因为宏块的划分是近似值,当进行宏块划分时,就注定了会将宏块内部分一些细节丢掉,比如忽略了图像中细节的曲线和不规则边界;2. 计算残差值本身是无损的,但在量化时是有损的,也就是说计算出的残差数据在进行编码时,为了提高压缩率,并不是将残差全部保留下来,而是丢掉了很多数据,当进行解码时,会将丢了很多数据的残差补回去,这样就与原来的帧不一样了;3.后面的 DCT和量化是有损的这个没问题,对应视频中H264编码流程中的T(DCT)和Q(量化),这块的描述确实是有问题;4. 再后面的reorder和entropy encode指的是VLC/CABAC,这块是无损的, 也就是你上边的第5点,它们是熵编码。
112024-04-07
相似问题