发明名称 一种2.5D视频到多视点3D视频中虚拟视点综合和空洞的修补方法
摘要 本发明公开了一种2.5D单视点视频到多视点3D视频中虚拟视点综合和空洞的修补方法,其包括以下步骤:步骤1):对参考视点彩色图像和参考视点深度图从左右边界对外进行纹理和结构延伸;步骤2):最左边虚拟视点综合和最右边虚拟视点综合以及内部空洞修复;步骤3):中间虚拟视点综合(双向DIBR);步骤4):把参考视点和左右两边的虚拟视点结合在一起形成多视点3D视频。本发明方法快速且高效。
申请公布号 CN103209334B 申请公布日期 2015.01.28
申请号 CN201310086829.3 申请日期 2013.03.18
申请人 中山大学 发明人 陈弟虎;陈敏;庞志勇;桂海田
分类号 H04N13/00(2006.01)I;H04N15/00(2006.01)I 主分类号 H04N13/00(2006.01)I
代理机构 广州新诺专利商标事务所有限公司 44100 代理人 张玲春
主权项 一种2.5D单视点视频到多视点3D视频中虚拟视点综合和空洞的修补方法,其特征在于,包括以下步骤:步骤1):对参考视点彩色图像和参考视点深度图从左右边界对外进行纹理和结构延伸;步骤2):最左边虚拟视点综合和最右边虚拟视点综合以及内部空洞修复;所述步骤2)具体包括:21):以参考视点作为中间视点,将经过边界扩展修复的参考视点使用DIBR技术渲染到最左边虚拟视点和最右边虚拟视点,得到最左边虚拟视点的扩展彩色图像和最右边虚拟视点的扩展彩色图像以及对应的扩展深度图,此时扩展彩色图像大小和边界扩展修复后的参考视点彩色图像等大,对前面的两个扩展彩色图像从边界去掉和上述边界扩展区域等宽的像素,得到和参考视点彩色图像等大的最左边虚拟视点的彩色图像和最右边虚拟视点的彩色图像;对前面的两个扩展深度图从边界去掉和上述边界扩展区域等宽的像素,得到和参考视点深度图等大的最左边虚拟视点的深度图和最右边虚拟视点的深度图;22):对虚拟视点的深度图做前后景标志,定义dflag(i,j)表示深度图前后景标志图像中点(i,j)的前后景标志值;逐行检测每一个空洞,假设点(i,h)为空洞的最左边像素点,点(i,k)为空洞的最右边像素点,提取像素点(i,h‑1)的深度值并设为depthL,提取像素点(i,k+1)的深度图值并设为depthR,如果depthL大于depthR,则dflag(i,h)设为1,dflag(i,k)设为0,如果相反,则dflag(i,h)设为0,dflag(i,k)设为1,对于其他未设置的点如果点(i,j)的深度图值为0,则dflag(i,j)=0,如果点(i,j)深度图值大于0,则dflag(i,j)=1,保存深度图前后景标志图像;23):使用基于深度图的快速行进修补算法填补虚拟视点的彩色图像的内部空洞,具体包括:2301):根据虚拟视点的彩色图像制作二值修复模板,对二值修复模板内的每一个像素点(i,j)设置三个值,I、f和T,I(i,j)表示点(i,j)的像素值,f(i,j)表示点(i,j)的标志,f(i,j)为outside表示空洞外面,f(i,j)为narrowband表示空洞的边界,f(i,j)为inside表示空洞内部,narrowband和inside都表示是待修复区域,T(i,j)表示点(i,j)到空洞边界的距离,在outside,T和I都已知,在narrowband,T和I未知但是待更新,在inside,T和I都未知;设IV(i,j)为虚拟视点的彩色图像中点(i,j)的像素值,如果虚拟视点的彩色图像中点(i,j)的IV(i,j)为0,则二值修复模板中I(i,j)为0,否则I(i,j)为1;2302):在二值修复模板中,若I(i,j)=0,说明该点在待修复区域内,令f(i,j)=inside,T(i,j)=10<sup>6</sup>;2303):若I(i,j)=1,说明该点在待修复区域外,令f(i,j)=outside,T(i,j)=0;2304):若I(i,j)=0,前后景标志图像中dflag(i,j)=1,且点(i,j)的四邻域中存在点(x,y)满足I(x,y)=1,令f(i,j)=narrowband,T(i,j)=0;2305):将f值为narrowband的点放入一个栈中,它们按照T值从小到大顺序排列;2306):从栈中选择具有最小T值的点,设为(x<sub>min</sub>,y<sub>min</sub>);2307):对虚拟视点的彩色图像中点(x<sub>min</sub>,y<sub>min</sub>)根据公式(1)修补,并且在二值修复模板中更新f(x<sub>min</sub>,y<sub>min</sub>)为outside,把点(x<sub>min</sub>,y<sub>min</sub>)从栈点集中删除;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>I</mi><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><munder><mi>&Sigma;</mi><mrow><mi>q</mi><mo>&Element;</mo><msub><mi>B</mi><mi>&epsiv;</mi></msub></mrow></munder><mi>w</mi><mrow><mo>(</mo><mi>p</mi><mo>,</mo><mi>q</mi><mo>)</mo></mrow><mo>[</mo><mo>/</mo><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>+</mo><mo>&dtri;</mo><mo>/</mo><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mrow><mo>(</mo><mi>p</mi><mo>-</mo><mi>q</mi><mo>)</mo></mrow><mo>]</mo></mrow><mrow><munder><mi>&Sigma;</mi><mrow><mi>q</mi><mo>&Element;</mo><mi>B&epsiv;</mi></mrow></munder><mi>W</mi><mrow><mo>(</mo><mi>P</mi><mo>,</mo><mi>Q</mi><mo>)</mo></mrow></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000585505440000021.GIF" wi="1566" he="269" /></maths>其中,w(p,q)=dir(p,q)×dst(p,q)×lev(p,q),<img file="FDA0000585505440000022.GIF" wi="609" he="175" /><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>dst</mi><mrow><mo>(</mo><mi>p</mi><mo>,</mo><mi>q</mi><mo>)</mo></mrow><mo>=</mo><mfrac><msup><msub><mi>d</mi><mn>0</mn></msub><mn>2</mn></msup><msup><mrow><mo>|</mo><mo>|</mo><mi>p</mi><mo>-</mo><mi>q</mi><mo>|</mo><mo>|</mo></mrow><mn>2</mn></msup></mfrac><mo>,</mo><mi>lev</mi><mrow><mo>(</mo><mi>p</mi><mo>,</mo><mi>q</mi><mo>)</mo></mrow><mo>=</mo><mfrac><msub><mi>T</mi><mn>0</mn></msub><mrow><mo>(</mo><mn>1</mn><mo>+</mo><mo>|</mo><mi>T</mi><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>-</mo><mi>T</mi><mrow><mo>(</mo><mi>q</mi><mo>)</mo></mrow><mo>|</mo><mo>)</mo></mrow></mfrac><mo>;</mo></mrow>]]></math><img file="FDA0000585505440000023.GIF" wi="1205" he="238" /></maths>修复算法主要是采用领域内参考像素的加权平均值,领域则采用4领域法,即像素周围以4为半径的区域;其中,w(p,q)为加权系数,N(p)是T的梯度方向,在程序中d0、T0取值为1,‖p‑q‖是p点与q点的距离值;dir(p,q)是p点法线方向上的像素q对p点的影响;dst(p,q)表示q点和p点之间距离对修补p点的影响;lev(p,q)考虑的是等值线方向上的像素q对修补p点的影响;2308)将(x<sub>min</sub>,y<sub>min</sub>)的邻域点(x<sub>min+1</sub>,y<sub>min</sub>),(x<sub>min‑1</sub>,y<sub>min</sub>),(x<sub>min</sub>,y<sub>min+1</sub>)和(x<sub>min</sub>,y<sub>min‑1</sub>)中f值为inside的点加入到heap中;2309):由公式(2)所示的Eikonal方程的差分形式更新邻域点的T值;[(T<sub>ij</sub>‑T<sub>xmin</sub>)<sup>+</sup>]<sup>2</sup>+[(T<sub>ij</sub>‑T<sub>ymin</sub>)<sup>+</sup>]<sup>2</sup>=1          (2)其中,<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>T</mi><mrow><mi>x</mi><mi>min</mi></mrow></msub><mo>=</mo><mi>min</mi><mrow><mo>(</mo><msub><mi>T</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>j</mi></mrow></msub><mo>,</mo><msub><mi>T</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn><mo>,</mo><mi>j</mi></mrow></msub><mo>)</mo></mrow><mo>,</mo><msub><mi>T</mi><mrow><mi>y</mi><mi>min</mi></mrow></msub><mo>=</mo><mi>min</mi><mrow><mo>(</mo><msub><mi>T</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>T</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>)</mo></mrow><mo>,</mo><msup><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>+</mo></msup><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>x</mi><mo>,</mo><mi>x</mi><mo>></mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn><mo>,</mo><mi>x</mi><mo>&le;</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>;</mo></mrow>]]></math><img file="FDA0000585505440000031.GIF" wi="1301" he="158" /></maths>2310):转步骤2305);2311):当栈中无新的像素加入时,说明待修复区域已经填充好,结束循环;步骤3):采用双向DIBR进行中间虚拟视点综合;所述步骤3)具体包括:31)左边中间虚拟视点构建及32)右边中间虚拟视点构建;其中,31)左边中间虚拟视点构建具体包括:对于最左边虚拟视点与作为中间视点的参考视点之间的的每一个左虚拟视点V(x,y),先使用参考视点进行3D渲染到此左虚拟视点,得到左虚拟视点的主图像v<sub>1</sub>(x,y);然后对最左边的虚拟视点进行3D渲染到此左虚拟视点,得到左虚拟视点的辅助图像v<sub>2</sub>(x,y);最终,通过公式(3)得到左虚拟视点V(x,y),即对左虚拟视点的主图像中的空洞,寻找虚拟视点的辅助图像中相对应位置的像素进行填充;<img file="FDA0000585505440000032.GIF" wi="1444" he="180" />32)右边中间虚拟视点构建具体包括:对于最右边虚拟视点与作为中间视点的参考视点之间的的每一个右虚拟视点V(x,y),先使用参考视点进行3D渲染到此右虚拟视点,得到右虚拟视点的主图像v<sub>1</sub>(x,y);然后对最右边的虚拟视点进行3D渲染到此右虚拟视点,得到右虚拟视点的辅助图像v<sub>2</sub>(x,y);最终,通过公式(4)得到右虚拟视点V(x,y),即对右虚拟视点的主图像中的空洞,寻找右虚拟视点的辅助图像中的相对应位置的像素值进行填充;<img file="FDA0000585505440000033.GIF" wi="1519" he="179" />步骤4):把参考视点和左右两边的虚拟视点结合在一起形成多视点3D视频。
地址 510275 广东省广州市海珠区新港西路135号中山大学物理科学与工程技术学院