一种基于深度图像的新视点合成方法与流程

文档序号:12497997阅读:273来源:国知局

本发明涉及图像处理、数值分析、三维重建、计算机科学等领域,尤其是一种用于双目摄像头新视点虚拟图像合成的基于深度图的渲染方法。



背景技术:

双目摄像头新视点虚拟图像合成是一种利用已有视点图像以及摄像机内外标定参数,对新视点处图像进行重构的技术。其主要的方法是结合摄像机标定参数,以及已有视点图像的深度信息,对相应的纹理图进行投影与重投影,构建出新视角处的图像。在构建新视点的过程中,会存在较多的问题,如新和成的图像会出现裂缝、空洞、重影、区域遮挡以及对象残缺等现象,这些问题的存在,影响了新视点图像的质量,对用户的交互产生了极大的影响。



技术实现要素:

为了克服现有的新视点图像合成过程中产生的各种影响图像质量的问题、实验效果较差、无法满足人眼观看效果的不足,本发明提出了一种消除各种影响图像质量的问题、实验效果良好、有效满足人眼观看效果的基于深度图像的新视点合成方法。

本发明所采用的技术方案如下所示:

一种基于深度图像的新视点合成方法,所述的视点合成方法包括以下步骤:

(1)对左右参考视点处的纹理图与深度图进行三维变换,变换过程如下:

1.1)将图像存储坐标系中的每一个像素点,结合相应的深度信息,投影到世界坐标系中:

PWi=(XWi,YWi,ZWi)T=(KiRi)-1iPi+KiRiCi),(i=l,r)

其中PWi={PWi=(XWi,YWi,ZWi)T|i=l,r}表示参考视点图像当前位置处的像素点在世界坐标系中的三维坐标,l和r分别表示左、右,XWi和YWi分别为世界坐标系中的横纵坐标,为深度,di为当前位置处深度图的灰度值,MinZi和MaxZi分别为当前帧对应的深度图像中的最小和最大灰度值,表示摄像机的内参矩阵,fxi={fxi∈R|i=l,r}和fyi={fyi∈R|i=l,r}分别为左右摄像机x方向与y方向上的焦距,R为实数,u0i={u0i∈R|i=l,r}和v0i={v0i∈R|i=l,r}分别为左右摄像机的主点在图像存储坐标系中的坐标,Ri={Ri∈R3×3|i=l,r}表示摄像机的旋转矩阵,R3×3表示维度3×3的实数域矩阵空间,λi={λi=Fi31XWi+Fi32YWi+Fi33ZWi+Fi34|i=l,r}为摄像机的齐次比例缩放因子,为投影矩阵,Ti={Ti∈R3×1|i=l,r}为摄像机的平移矩阵,Pi={Pi=(ui,vi,1)T|i=l,r}为参考视点的齐次图像存储坐标,ui={ui∈R|i=l,r}和vi={vi∈R|i=l,r}分别为当前像素点在图像存储坐标系中的横、纵坐标,Ci为摄像机的中心坐标;

对相应的深度图做同样的处理:

DWi=(XWi,YWi,ZWi)T=(KiRi)-1iDi+KiRiCi),(i=l,r)

其中DWi={DWi=(XWi,YWi,ZWi)T|i=l,r}表示参考视点深度图当前位置处的像素点在世界坐标系中的三维坐标,Di={Di=(u0i,v0i,1)T|i=l,r为参考视点深度图的齐次图像存储坐标;

1.2)将经过第一次投影得到的每一个点,结合目标新视点处虚拟摄像机的内外参数,以及深度信息,重新投影到新视点的图像平面坐标系中:

PNewi=(KNewiRNewiPWi-KNewiRNewiCNewi)/λNewi,(i=l,r)

其中PNewi=PNewi=(uNewi,vNewi,1)|i=l,r}为Pi在新视点处对应点的坐标,uNewi={uNewi∈R|i=l,r}和vNewi={vNewi∈R|i=l,r}分别为当前像素点在图像存储坐标系中的横、纵坐标,KNewi、RNewi、CNewi、λNewi表示新视点处虚拟摄像机的内参矩阵、旋转矩阵、中心坐标以及其次比例缩放因子;

对应的新视点深度图表示为:

DNewi=(KNewiRNewiDWi-KNewiRNewiCNewi)/λNewi,(i=l,r)

其中DNewi={DNewi=(uNewi,vNewi,1)|i=l,r}为Di在新视点处对应点的坐标;

(2)搜索左右参考视点深度图中对象的边缘,利用(1)中的方法,将边缘像素进行三维变换到新视点处,然后将新视点处对应的深度像素点抹去:

DNew_edgei=0,(i=l,r)

其中DNew_edgei为三维变换之后的对象边缘像素点;

(3)利用3×3的模板,对得到的深度图进行中值滤波,去除深度图像中的裂纹与细小漏洞,并将经过滤波之后的图像与经三维变换得到的深度图进行对比,标记出变化的像素点:

INewi=S(M(DNew_Imgi),DNew_Imgi),(i=l,r)

其中INewi为被标记的像素点,M为3×3的中值滤波函数,DNew_Imgi为通过步骤(1)和步骤(2)处理后得到的新视点处的深度图,S为比较标记函数,用于比较两幅图像,并标记出变化的像素点;

(4)修补因为三维变换而产生的裂缝,修补过程如下:

4.1)对被标记的像素点进行反向投影,投影到原先的参考视点处:

PINewi=W(INewi),(i=l,r)

其中,PINewi表示由反向投影得到的新视点图像中,裂纹处的像素点,W表示步骤(1)描述的三维变换;

4.2)再将初始参考纹理图中的像素值,赋给新视点图像中,与被标记像素点坐标相同的像素;

(5)利用经过步骤(4)处理后得到的新视点图像,对图像遮挡区域的空洞进行插值:

PIn_Img=IN(PNew_Imgl,PNew_Imgr)

其中,PIN_Img为经过插值之后的新视点纹理图,PNew_Imgl表示由左参考图像经过步骤(1)-(4)的所有处理之后得到的新视点纹理图,PNew_Imgr表示由右参考图像经过步骤(1)-(4)的所有处理之后得到的,同一视点处的新视点纹理图,IN为插值函数;

(6)调用OpenCV库函数中Telea提出的inpaint方法,对残留的空洞进行修复,得到最终的新视点图像:

PNew_Img=inpaint(PIn_Img)

其中inpaint为OpenCV库函数,PNew_Img为最终获得的新视点纹理图像。

进一步,所述步骤(2)中,寻找对象边缘像素点的步骤如下:

其中,PImg表示参考图像,D表示参考视点的深度图,Td为自定义阈值,经实验验证,一般取最大深度值的1/4,当像素点满足上式时,表示该点为重影边缘。

更进一步,步骤(3)中的比较标记函数S的处理过程包括以下步骤:

3.1)对比中值滤波前后的深度图中的每一个像素点的灰度值;

3.2)记录灰度值不相同的像素点的坐标。

再进一步,所述步骤4.2)中,修补裂缝的过程如下:

利用4.1)中得到的标记点坐标,选取初始参考纹理图中标记点位置的像素值,赋给新视点图像中对应的标记像素点,剩余位置的像素点保持不变:

其中PNew_Imgi为新视点处经过裂缝修补之后的纹理图,PImgi为参考纹理图,PONew_Imgi为经过步骤(1)和步骤(2)处理之后得到的新视点纹理图,mark表示当前像素点是否被标记,mark为1时表示当前点为被标记点。

更进一步,所述步骤(5)中,IN插值函数的表达式如下:

其中为比重参数,TNew_t、Tl_t和Tr_t分别为新视点、左参考视点以及右参考视点在摄像机坐标系中的平移向量,Oi={Oi(u,v)|i=l,r}表示图像在(u,v)处有无空洞,若存在空洞则为1,表达式如下:

其中Zi={Zi(u,v)|i=l,r}为新视点在(u,v)处的深度值,Th为阈值。

本发明的有益效果体现在:本发明采用了三维变换法去除了重影轮廓,采用了反向投影法,有效消除了新视点深度图中的裂缝,采用了左右左右视点插值法,填补了遮挡区域,并使用OpenCV库中的inpaint方法,有效填补了残余空洞,实验效果良好,生成的新视点图像满足人眼观看效果。

具体实施方式

下面对本发明做进一步说明。

一种基于深度图像的新视点合成方法,所述的视点合成方法包括以下步骤:

(1)对左右参考视点处的纹理图与深度图进行三维变换,变换过程如下:

1.1)将图像存储坐标系中的每一个像素点,结合相应的深度信息,投影到世界坐标系中:

其中PWi={PWi=(XWi,YWi,ZWi)T|i=l,r}表示参考视点图像当前位置处的像素点在世界坐标系中的三维坐标,1和r分别表示左、右,XWi和YWi分别为世界坐标系中的横纵坐标,为深度,di为当前位置处深度图的灰度值,MinZi和MaxZi分别为当前帧对应的深度图像中的最小和最大灰度值,表示摄像机的内参矩阵,fxi={fxi∈R|i=l,r}和fyi={fyi∈R|i=l,r}分别为左右摄像机x方向与y方向上的焦距,R为实数,u0i={u0i∈R|i=l,r}和v0i={v0i∈R|i=l,r}分别为左右摄像机的主点在图像存储坐标系中的坐标,Ri={Ri∈R3×3|i=l,r}表示摄像机的旋转矩阵,R3×3表示维度3×3的实数域矩阵空间,λi={λi=Fi31XWi+Fi32YWi+Fi33ZWi+Fi34|i=l,r}为摄像机的齐次比例缩放因子,为投影矩阵,Ti={Ti∈R3×1|i=l,r}为摄像机的平移矩阵,Pi={Pi=(ui,vi,1)T|i=l,r}为参考视点的齐次图像存储坐标,ui={ui∈R|i=l,r}和vi={vi∈R|i=l,r}分别为当前像素点在图像存储坐标系中的横、纵坐标,Ci为摄像机的中心坐标;

对相应的深度图做同样的处理:

DWi=(XWi,YWi,ZWi)T=(KiRi)-1iDi+KiRiCi),(i=l,r)

其中DWi={DWi=(XWi,YWi,ZWi)T|i=l,r}表示参考视点深度图当前位置处的像素点在世界坐标系中的三维坐标,Di={Di∈(u0i,v0i,1)T|i=l,r}为参考视点深度图的齐次图像存储坐标;

1.2)将经过第一次投影得到的每一个点,结合目标新视点处虚拟摄像机的内外参数,以及深度信息,重新投影到新视点的图像平面坐标系中:

PNewi=(KNewiRNewiPWi-KNewiRNewiCNewi)/λNewi,(i=l,r)

其中PNewi={PNewi=(uNewi,vNewi,1)|i=l,r}为Pi在新视点处对应点的坐标,uNewi={uNewi∈R|i=l,r}和vNewi={vNewi∈R|i=l,r}分别为当前像素点在图像存储坐标系中的横、纵坐标,KNewi、RNewi、CNewi、λNewi表示新视点处虚拟摄像机的内参矩阵、旋转矩阵、中心坐标以及其次比例缩放因子;

对应的新视点深度图表示为:

DNewi=(KNewiRNewiDWi-KNewiRNewiCNewi)/λNewi,(i=l,r)

其中DNewi=DNewi=(uNewi,vNewi,1)|i=l,r}为Di在新视点处对应点的坐标;

(2)搜索左右参考视点深度图中对象的边缘,利用(1)中的方法,将边缘像素进行三维变换到新视点处,然后将新视点处对应的深度像素点抹去:

DNew_edgei=0,(i=l,r)

其中DNew_edgei为三维变换之后的对象边缘像素点;

寻找对象边缘像素点的过程如下:

其中,PImg表示参考图像,D表示参考视点的深度图,Td为自定义阈值,经实验验证,一般取最大深度值的1/4,当像素点满足上式时,表示该点为重影边缘;

(3)利用3×3的模板,对得到的深度图进行中值滤波,去除深度图像中的裂纹与细小漏洞,并将经过滤波之后的图像与经三维变换得到的深度图进行对比,标记出变化的像素点:

INewi=S(M(DNew_Imgi),DNew_Imgi),(i=l,r)

其中INewi为被标记的像素点,M为3×3的中值滤波函数,DNew_Imgi为通过步骤(1)和步骤(2)处理后得到的新视点处的深度图,S为比较标记函数,用于比较两幅图像,并标记出变化的像素点;

所述比较标记函数S的处理过程包括以下步骤:

3.1)对比中值滤波前后的深度图中的每一个像素点的灰度值;

3.2)记录灰度值不相同的像素点的坐标;

(4)修补因为三维变换而产生的裂缝,修补过程如下:

4.1)对被标记的像素点进行反向投影,投影到原先的参考视点处:

PINewi=W(INewi),(i=l,r)

其中,PINewi表示由反向投影得到的新视点图像中,裂纹处的像素点,W表示步骤(1)描述的三维变换;

4.2)再将初始参考纹理图中的像素值,赋给新视点图像中,与被标记像素点坐标相同的像素;

修补裂缝的过程如下:利用4.1)中得到的标记点坐标,选取初始参考纹理图中标记点位置的像素值,赋给新视点图像中对应的标记像素点,剩余位置的像素点保持不变:

其中PNew_Imgi为新视点处经过裂缝修补之后的纹理图,PImgi为参考纹理图,PONew_Imgi为经过步骤(1)和步骤(2)处理之后得到的新视点纹理图,mark表示当前像素点是否被标记,mark为1时表示当前点为被标记点;

(5)利用经过步骤(4)处理后得到的新视点图像,对图像遮挡区域的空洞进行插值:

PIn_Img=IN(PNew_Imgl,PNew_Imgr)

其中,PIn_Img为经过插值之后的新视点纹理图,PNew_Imgl表示由左参考图像经过步骤(1)—(4)的所有处理之后得到的新视点纹理图,PNew_Imgr表示由右参考图像经过步骤(1)—(4)的所有处理之后得到的,同一视点处的新视点纹理图,IN为插值函数;

IN插值函数的表达式如下:

其中为比重参数,TNew_t、Tl_t和Tr_t分别为新视点、左参考视点以及右参考视点在摄像机坐标系中的平移向量,Oi={Oi(u,v)|i=l,r}表示图像在(u,v)处有无空洞,若存在空洞则为1,表达式如下:

其中Zi={Zi(u,v)|i=l,r}为新视点在(u,v)处的深度值,Th为阈值;

(6)调用OpenCV库函数中Telea提出的inpaint方法,对残留的空洞进行修复,得到最终的新视点图像:

PNew_Img=inpaint(PIn_Img)

其中inpaint为OpenCV库函数,PNew_Img为最终获得的新视点纹理图像。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1