这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » [原创] “H.264的编码端为什么要有一个重构路径?”之我见。

共4条 1/1 1 跳转至

[原创] “H.264的编码端为什么要有一个重构路径?”之我见。

菜鸟
2005-11-01 18:51:46     打赏

2解码端:最终数据=残差的反变换结果值+预测值=(编码端原图-编码端预测)+基于重构得到的数据

试想如果编码端的采用前一帧原图做参考,那么在编码端:编码端预测=前一帧原图
则在这样的情况下解码端的最终数据=残差的反变换结果值+预测值=(编码端原图-编码端预测)+基于重构得到的数据=(编码端原图-前一帧原图)+基于重构得到的数据
从这里可以看出,一部分是前帧原图,另一部分是重构得到的数据,很明显不适配

而如果编码端采用重构,那么在编码端:编码端预测=基于重构得到数据
则在这样的情况下解码端的最终数据=残差的反变换结果值+预测值=(编码端原图-编码端预测)+基于重构得到的数据=(编码端原图-基于重构得到数据)+基于重构得到的数据=编码端原图(不考虑量化失真)

总的说来,编码端采用原图也可以做。但是我个人估计(因为没做验证)采用原图做之后解码端得到的最终数据因为存在上述不适配问题,其解码出的效果反而不如编码端使用重构的效果好。

其实也就是数据适配的问题。因为解码端的“预测值”那一部分必然是解码端基于前一帧的重构得到的,所以就决定了解码端“残差反变换结果”那一部分(也就等于编码端残差)在编码端的时候也必须是基于重构前一帧得到,但如果直接通过原图得到就产生了数据失配。而数据失配的结果是难以预料和控制的。

[align=right][color=#000066][此贴子已经被作者于2005-11-1 13:56:33编辑过][/color][/align]



关键词: 原创     H.264     编码     为什么     有一个     重构     路径    

菜鸟
2005-11-14 00:12:00     打赏
2楼
大家反过来想一个问题:在解码端的数据由两部分组成,一部分是预测值,一部分是通过变换系数做反变换以及反量化后得到的值。既然第二部分是由码流解码得到的,就与解码端通过重构预测出来的值没有关系(请注意,我始终说的是解码端)。那么既然第二部分值与解码端通过重构预测出来的值(也就是第一部分值)没有关系,那么与解码端到底是用原图像解码还是用重构图像来解码又有什么关系呢?

所以现在就要回头去看编码端了。因为在编码端变换系数是通过原图像减去前一帧图像的预测值得到的变换系数,然后把变换系数编入码流。在解码端从码流中取出来然后反变换反量化后的值就和编码端编入码流的变换系数完全一致。那么这个时候再加上解码端对前一帧图像预测出来的值(这个值理论上就等于编码端对前一帧图像的预测值)就完成了解码。而这时解码出来的值理想情况下就与编码端的原图一致(不考虑量化失真)。

而如果试想,如果在编码端的变换系数是通过原图减去前一帧图像的原图得到。然后把得到的变换系数编入码流。在解码端从码流中取出来然后反变换反量化后的值也一样和编码端编入码流的变换系数完全一致。但是这个时候要加的第一部分值却不可能是原图,而仍然是解码端对前一帧图像预测出来的值(这个值就与编码端编码时候用的预测值不一样了:因为编码端编码时候用的预测值是前一帧图像的原图)。于是这两部分值相加的结果无论如何都不可能与编码端的原图一致了。这就是数据失配问题!

你们说的解码端不可能使用原图也没有错,但那只是表面现象。实际的原因是数据失配问题!


菜鸟
2005-11-16 21:52:00     打赏
3楼

蓝风车 13:53:29
我只想说的是,实际的编码器就不能使用原图做参考
否则,会引起错误漂移

——他的这个说法应该是对编码端为什么要有个重构路径的真正解释。我的那个解释只是我的理解。但是我写这么多的中心思想只是想说明:编码端没有重构路径一样可以解码!


菜鸟
2005-12-18 19:45:00     打赏
4楼

It is said in the white paper that "the reconstruction path in the encoder is to ensure that both encoder and decoder use identical reference frames to create the rediction P. If this is not the case, then the predictions P in encoder and decoder will not be identical, leading to an increasing error or “drift” between the encoder and decoder." 个人觉得楼主的这个表达式“解码端的最终数据=残差的反变换结果值+预测值=(编码端原图-编码端预测)+基于重构得到的数据=(编码端原图-基于重构得到数据)+基于重构得到的数据=编码端原图(不考虑量化失真)”让我这初学者豁然开朗。解码器输出是残差+重构,编码器输入当然也应等于残差+重构,从而使得输入=输出。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]