从下象棋的角度来类比浅析H.264中的像素残差和运动矢量残差

来源:互联网 发布:易语言自动按键源码 编辑:程序博客网 时间:2024/04/30 06:49

      我酷爱下象棋,经常沉迷其中,不好啊,最近下定决心,尽量少下象棋. 现从下象棋的角度来类比浅析H.264中的像素残差和运动矢量残差.

     第一帧: 双方把象棋摆放好,准备开始下,这个画面就是第一帧; (对应IDR帧)

     第二帧: 红方走“炮二平五”,那么这个画面为第二帧;           (对应P帧)

  

     编码端:两个象棋高手(比如洪智和许银川)在某五星级酒店下象棋,解说员就是编码器,要对这个比赛进行现场报道;

     解码端:广大棋迷(比如本人)就是解码器,要理解解说员说到了哪一步.

 

     先抛开H.264的具体情况不管,我们来玩象棋.

 

     解说员:各位棋迷朋友,大家准备好了,象棋比赛开始,请各位棋迷朋友把象棋恢复到最原始状态.

     棋迷:    在自己家里拿一副象棋,把象棋摆好,成最原始状态.

     那么,第一帧就由编码端传到了解码端,显然是成功的.

 

     解说员:洪智走了一步“炮二平五”.

     棋迷    :把二路的炮移到了五路.

      那么,第二帧就编码端传到了解码端,显然是成功的. 仔细想一下,解说员并没说第二帧的状态啊,他只说“炮二平五”啊,这个“炮二平五”实际上就相当于运动矢量,在用运动矢量进行补偿后,可以认为第二帧减去第一帧的结果为0,也就是说,第二帧和第一帧没有设么区别,就隔一个运动矢量.解说员不需要麻烦地说每个棋子的位置,只需要说第二帧与第一帧的变化在什么地方就可以了,编码端和解码端都省时省力,何乐而不为呢?这就实现所所谓的去冗余,从而压缩了所需要传输的数据量.

 

      在象棋这个例子中,第二帧减去第一帧(此处指运动矢量补偿后的第一帧)的结果为0,那么这个结果实际上就是对应的就是H.264中的像素残差,这个“炮二平五”对应H.264中的运动矢量.

 

     回到H.264中有:

     原始像素 - 预测像素(运动矢量补偿得到预测像素) = 像素残差

 

     那么什么是运动矢量残差呢?运动矢量残差就是两个运动矢量相减后得到的矢量(运动矢量残差),这个运动矢量残差最终会写进码流,至于为什么要引入运动矢量残差,这个很简单,就不多废话了, 具体可以H.264相关资料(下面仅仅给出示意的公式)

    运动矢量残差(mvd) = 运动矢量(mv) - 预测的运动矢量(mvp)

 

    啰嗦一句:万万不可混淆像素残差和运动矢量残差. 少下象棋,多干正事, 最后附上王阳明大哲人的著名诗句,以此自勉:

    象棋终日乐悠悠,苦被严亲一旦丢。
    兵卒坠河皆不救,将军溺水一齐休。  
 马行千里随波去,象入三川逐浪游。
    炮响一声天地震,忽然惊起卧龙愁。

 

     

   

原创粉丝点击