发明名称 一种多视点视频编码中的运动和视差联合估计方法
摘要 本发明的一种多视点视频编码中的运动和视差联合估计方法,步骤如下:A.将相同视点相邻时刻图像对应块的视差矢量,运动矢量分别作为当前编码块视差矢量的初值;B.分别将初值和已编码相邻块的预测矢量作比较,据匹配误差最小化准则选取最优预测矢量作为该区域的搜索起始点;C.结合相邻图像运动矢量和视差矢量之间的几何关系,由前一次运动/视差估计得到候选矢量来进行下一次视差/运动估计,不断修正当前运动和视差矢量,直到得到当前编码块的最佳运动矢量和视差矢量。该方法只需一次搜索过程就能同时确定最佳运动矢量和视差矢量。与全搜索算法相比,本发明峰值信噪比下降不超过0.09dB,码率比特略有节省,码率变化在-14.20%~+0.60%之间,且节省90%以上的编码时间。
申请公布号 CN101600108A 申请公布日期 2009.12.09
申请号 CN200910088397.3 申请日期 2009.06.26
申请人 北京工业大学 发明人 贾克斌;邓智玭;刘鹏宇
分类号 H04N7/26(2006.01)I;H04N13/00(2006.01)I 主分类号 H04N7/26(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 代理人 刘 萍
主权项 1、一种多视点视频编码中的运动和视差联合估计方法,首先令具有k+1台从左至右排列的平行摄像机系统拍摄得到的多视点视频表示为{S0,S1,S2…Sk},每路视点包含n个时刻的图像帧,令视点St为当前视点,1≤i≤k,Si的参考视点为相邻的左视点Si-1和右视点Si+1,令视点Si中t时刻的帧为当前帧,T为当前帧和该路视点中的两个最相邻已编码帧之间的时间间隔,当前帧在时间方向的前向参考帧为视点Si中t-T时刻的已编码帧,当前帧在时间方向的后向参考帧为视点Si中t+T时刻的已编码帧,当前帧在视点方向的前向参考帧为视点Si-1中t时刻的已编码帧,当前帧在视点方向的后向参考帧为视点Si+1中t时刻的已编码帧,前向搜索是指当前帧通过参考前向参考帧进行前向运动和视差估计,后向搜索是指当前帧通过参考后向参考帧进行后向运动和视差估计,假设正在编码的块Pi,t为当前块,当前块已编码的左边块、上边块、右上块通称为当前块的相邻块,参考帧中与当前块位置相同的块称为对应块,当前块在参考帧中的最佳匹配块称为预测块,其特征在于:包括以下步骤:(1)判断当前帧是否为锚定帧,如果是锚定帧,则采用全搜索方法对该锚定帧中的所有块进行编码,并且保存每个块编码后的视差矢量DVt-T;如果当前帧为非锚定帧,则将当前帧视点方向参考帧的运动和视差矢量读入到缓存中,将该非锚定帧的第一个块作为当前块;(2)开始前向搜索,求取当前块的前向运动矢量和前向视差矢量,将relation1描述的相邻图像的运动矢量和视差矢量的关系MVi+DVt-T=DVt+MVi-1定义为Relation,其中,MVi为当前块的前向运动矢量,DVt为当前块的前向视差矢量,DVt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量;(3)将当前块在时间方向的前向参考帧中的对应块的前向视差矢量DVt-T设为当前块的前向视差矢量的初值;将当前块在视点方向的前向参考帧中的对应块的前向运动矢量MVi-1设为当前块的前向运动矢量的初值;(4)将当前块的前向运动矢量初值MVi-1和当前块的前向视差矢量初值DVt-T分别与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的前向运动矢量预测值pMVi0和当前块的前向视差矢量预测值pDVt0,并在pMVi0附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0,保存该最小率失真代价RDCostME0;在pDVt0附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0,保存该最小率失真代价RDCostDE0,其中,SAD按下式计算,<maths id="math0001" num="0001" ><math><![CDATA[ <mrow> <mi>SAD</mi> <mrow> <mo>(</mo> <mi>c</mi> <mo>,</mo> <mi>r</mi> <mrow> <mo>(</mo> <mi>mv</mi> <mo>)</mo> </mrow> <mo>)</mo> </mrow> <mo>=</mo> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>,</mo> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <msub> <mi>B</mi> <mn>1</mn> </msub> <mo>,</mo> <msub> <mi>B</mi> <mn>2</mn> </msub> </mrow> </munderover> <mo>|</mo> <mi>c</mi> <mo>[</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>]</mo> <mo>-</mo> <mi>r</mi> <mo>[</mo> <mi>i</mi> <mo>-</mo> <msub> <mi>mv</mi> <mi>x</mi> </msub> <mo>,</mo> <mi>j</mi> <mo>-</mo> <msub> <mi>mv</mi> <mi>y</mi> </msub> <mo>]</mo> <mo>|</mo> </mrow>]]></math></maths>SAD(c,r(mv))表示当前块和预测块的绝对误差和,c[i,j]表示当前块的像素值;r[i-mvx,j-mvy]表示预测块的像素值,B1,B2分别表示块的水平和垂直像素数,运动估计和视差估计的率失真代价按下式计算,RDCostME/DE=SAD(c,r(mv))+λ×R(mv-pred)mv=(mvx,mvy)T表示当前块相对于预测块的运动/视差矢量;pred=(predx,predy)T表示当前块的运动/视差矢量的预测值;码率R(mv-pred)表示编码运动/视差矢量的差值所需的比特数,λ表示拉格朗日乘子;(5)由上一步得到的运动/视差矢量来计算得到更准确的视差/运动矢量,由当前块Pi,t的位置和当前块的前向视差矢量DVt0相加得到当前块在视点方向的前向参考帧中的预测块Pi-1,t,即,Pi-1,t=Pi,t+DVt0,读取预测块Pi-1,t的前向运动矢量MVi-1,利用Relation描述的矢量关系,由pMVi1=DVt0+MVi-1-DVt-T得到一个新的当前块的前向运动矢量预测值pMVi1,其中,DVt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量,在pMVt1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1,保存该最小率失真代价RDCostME1;由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向的前向参考帧中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的视差矢量DVt-T,利用Relation描述的矢量关系,由pDVt1=MVi1+DVt-T-MVi-1得到一个新的当前块的前向视差矢量预测值pDVt1,其中,DVt-T为当前块在时间方向的前向参考帧中的对应块的前向视差矢量,MVi-1为当前块在视点方向的前向参考帧中的对应块的前向运动矢量,在pDVt1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1,保存该最小率失真代价RDCostDE1;(6)判断RDCostME1是否小于RDCostME0,RDCostDE1是否小于RDCostDE0,如果RDCostME1小于RDCostME0并且RDCostDE1小于RDCostDE0,则令DVt0=DVt1,MVi0=MVi1,RDCostME0=RDCostME1,RDCostDE0=RDCostDE1,跳转到步骤(5);否则,将MVi0,DVt0,RDCostME0,RDCostDE0保存为当前块的前向运动和视差估计结果;(7)比较前向运动矢量和前向视差矢量的率失真代价,选取率失真代价较小的作为前向搜索的最佳预测矢量;(8)开始后向搜索过程,首先判断当前帧是否有时间方向的后向参考帧,如果当前帧有时间方向的后向参考帧,则将relation2描述的相邻图像的运动矢量和视差矢量的关系定义为Relation,开始计算当前块的后向运动矢量和当前块的后向视差矢量;如果当前帧没有时间方向的后向参考帧,则将relation3描述的相邻图像的运动矢量和视差矢量的关系定义为Relation,跳转到步骤(14),开始计算当前块的后向视差矢量;其中,relation2如下式所示:DVt′+MVi+1′=MVi′+DVt+T′其中,MVi′为当前块的后向运动矢量,DVt′为当前块的后向视差矢量,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量;relation3如下式所示:DVt′+MVi+1=MVi+DVt-T′其中,MVi为当前块的前向运动矢量,DVt′为当前块的后向视差矢量,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量;(9)将当前块在时间方向的后向参考帧中的对应块的后向视差矢量DVt+T′设为当前块后向视差矢量的初值;将当前块在视点方向的后向参考帧中的对应块的后向运动矢量MVi+1′设为当前块后向运动矢量的初值;(10)将当前块的后向运动矢量初值MVi+1′和当前块的后向视差矢量初值DVt+T′分别与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的后向运动矢量预测值pMVi0′和当前块的后向视差矢量预测值pDVt0′,并在pMVi0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳运动矢量MVi0′,保存该最小率失真代价RDCostME0′;在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;(11)由上一步得到的运动/视差矢量来计算得到更准确的视差/运动矢量,由当前块Pi,t的位置和当前块的后向视差矢量DVt0′相加得到当前块在视点方向的后向参考帧中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的后向运动矢量MVi+1′,利用Relation描述的矢量关系,由pMVi1′=DVt0′+MVi+1′DVt+T′得到一个新的当前块的后向运动矢量预测值pMVi1′,其中,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量,在pMVi1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1′,保存该最小率失真代价RDCostME1′;由当前块Pi,t的位置和当前块的后向运动矢量MVi1′相加得到当前块在时间方向后向参考帧中的预测块Pi,t+T,即,Pi,t+T=Pi,t+MVi1′,读取预测块Pi,t+T的后向视差矢量DVt+T′,利用Relation描述的矢量关系,由pDVt1′=MVi1′+DVt+T′-MVi+1′得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt+T′为当前块在时间方向的后向参考帧中的对应块的后向视差矢量,MVi+1′为当前块在视点方向的后向参考帧中的对应块的后向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDE1′;(12)判断RDCostME1′是否小于RDCostME0′,RDCostDE1′是否小于RDCostDE0′,如果RDCostME1′小于RDCostME0′开且RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,MVi0′=MVi1′,RDCostME0′=RDCostME1′,RDCostDE0′=RDCostDE1′,跳转到步骤(11);否则,将MVi0′,DVt0 ′,RDCostME0′,RDCostDE0′保存为当前块的后向运动和视差估计结果;(13)比较后向运动矢量和后向视差矢量的率失真代价,选取率失真代价较小的作为后向搜索的最佳预测矢量,跳转到步骤(18);(14)将当前块在时间方向的前向参考帧中的对应块的后向视差矢量DVt-T′设为当前块后向视差矢量的初值;(15)将当前块的后向视差矢量初值DVt-T′与当前块的相邻块的预测矢量以及零矢量进行比较,选取使SAD值最小的矢量作为当前块的后向视差矢量预测值pDVt0′,在pDVt0′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的矢量作为该区域内的最佳视差矢量DVt0′,保存该最小率失真代价RDCostDE0′;(16)由当前块Pi,t的位置和当前块的后向视差矢量DVt0′相加得到当前块在视点方向的后向参考帧中的预测块Pi+1,t,即,Pi+1,t=Pi,t+DVt0′,读取预测块Pi+1,t的前向运动矢量MVi+1,利用Relation描述的矢量关系,由pMVi1=DVt0′+MVi+1-DVt-T′得到一个新的当前块的前向运动矢量预测值pMVi1,其中,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量,在pMVi1附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳运动矢量匹配,选取该区域内使率失真代价最小的运动矢量作为最佳运动矢量MVi1;由当前块Pi,t的位置和当前块的前向运动矢量MVi1相加得到当前块在时间方向前向参考帧中的预测块Pi,t-T,即,Pi,t-T=Pi,t+MVi1,读取预测块Pi,t-T的后向视差矢量DVt-T′,利用Relation描述的矢量关系,由pDVt1′=DVt-T′+MVi1-MVi+1得到一个新的当前块的后向视差矢量预测值pDVt1′,其中,DVt-T′为当前块在时间方向的前向参考帧中的对应块的后向视差矢量,MVi+1为当前块在视点方向的后向参考帧中的对应块的前向运动矢量,在pDVt1′附近设定一个至少2个像素的搜索窗口,在这个搜索窗口内进行最佳视差矢量匹配,选取使率失真代价最小的视差矢量作为该区域内的最佳视差矢量DVt1′,保存该最小率失真代价RDCostDE1′;(17)判断RDCostDE1′是否小于RDCostDE0′,如果RDCostDE1′小于RDCostDE0′,则令DVt0′=DVt1′,RDCostDE0′=RDCostDE1′,跳转到步骤(16);否则,将DVt0′作为后向搜索的最佳预测矢量;(18)根据前向搜索和后向搜索得到的结果,从中选取使率失真代价最小的矢量作为当前块的最优预测矢量,保存当前块的最佳编码信息,当前块的运动和视差估计过程结束;(19)判断当前帧中是否还有未编码块,如果当前帧中还有未编码块,则跳转到步骤(2),开始编码当前块的下一块;如果当前帧中所有块都编码完毕,则判断当前视点中是否还有未编码帧,如果当前视点中还有未编码帧,则跳转到步骤(1),开始编码当前帧的下一帧;如果当前视点的所有帧都编码完毕,则对当前视点的编码过程结束。
地址 100124北京市朝阳区平乐园100号