BIO的相关总结

BIO(Bi-directional optical flow)双向光流   利用光流公式和梯度的概念来细化MV。这部分细化的梯度不用传输任何标记位给解码端。

传统的双向预测只是对于过去的一帧和未来的一帧进项加权作为预测,但是这个补偿的过程中,该块仍然会有一部分未补偿的运动信息(这句话是啥意思?怎么都理解不了),有时这部分未补偿的运动信息的尺寸小于最小的分割尺寸(导致无法再进行补偿的意思吗?)所以就需要一些方法来补偿这部分像素。

补偿这部分像素,如果不想继续分割且不用编码运动信息,那么就能够在该块的尺寸上进行像素级的运动补偿。BIO就是在这种情况下应用的。光流公式:

                                  BIO的相关总结

我们可以发现,这其中就有运动的偏移量Vx,Vy,这就是我们所需要的。I表示像素点处的光强,x,y表示空间点坐标。我们还需要对公式的应用做出几个假设:

    1.物体的运动是局部匀速的,那么就可以使用steady-motion的模型,如图:

                                                        BIO的相关总结

    2.假设在这段运动中,亮度也是局部不变的。那么就可以用刚才的光流公式了

    3.假设只有精细的运动不会被基于预测的标准块补偿。(不懂~)


然后呢,原始的双边预测补偿方式是(+1的原因是为了减小舍入误差):

                       BIO的相关总结

其实BIO主要就是想改这个公式的,可能觉得这些点(还有一个疑问,P是有分像素的吗?有这个疑问的原因是在一会求梯度的过程中产生的)的MV不够精确,所以想细化MV?

所以细化的话,就得给P0[i,j],P1[i,j]后面加一点东西。

对于刚才的steady-motion,求一下AB两点的差,用光流公式相减,其实感觉就用从两个参考图像的同位点和AB点的过程:

          BIO的相关总结

                               BIO的相关总结

还有一个问题:这里的公式,出现了两种形式,这两种其实感觉都对,区别只是里面的符号,后面之所以是加,是因为0和1的Vx和Vy是互为相反数的。而前面之所以是减,可能是把符号放进Vx中了吧?

这个公式delta其实就是我们要加到(1)式里面的东西。我们可以发现,有了刚才的假设,前两项相减是直接为0的。那么对于后面这一部分,我们只需要求出Vx和Vy,以及算出梯度,就完成细化了。

(我先记一下,怕以后忘了,我感觉为什么会有这个delta呢,可能就是因为AB点和当前块的点是不完全一样的,可能是因为运动的原因,所以导致整像素上的点可能一样,但是梯度,或者分像素上可能不一样?感觉这个说法怪怪的)

那么梯度怎么求解?根据提案,梯度的精确计算是不可能的,因为我们只知道整像素位置值(那为什么不插值呢?)。但是我们可以通过整像素的值去估计这个梯度,方法是用基于DCT的插值滤波器的构造中,可以用这个滤波器直接提供梯度分量,方法是:

            BIO的相关总结

这个累加的过程其实是为了避免过于简单的滤波器受噪声影响,所以是在一个小窗口内进行的。alpha是当前块的运动矢量,R是参考图像的整数位置的像素值,Fm(alpha)是直接提供梯度的滤波器。(说完了再想一下,说是构造出了梯度,其实就是直接用人家的梯度滤波器,做了个加权,结果到最后还是整数位置的梯度)

然后呢,现在有了两个梯度了,只要求Vx和Vy了,那么只需要做一个优化问题:

                                   BIO的相关总结

同样的,omiga是为了减少噪声影响而设置的一个窗口的。i撇和j撇都是窗口内的像素位置。这个优化问题可以这样求解:

BIO的相关总结

得到Vx和Vy后,就能够把delta加到1式上面了,有:

BIO的相关总结

最后经过实验发现,最好把原来的预测块和光流预测块加权起来:

BIO的相关总结

这样效果会比较好。

里面还有很多东西没解决,慢慢看吧。结合代码再看看有什么想法没。