基于单目图像及深度图像渲染的立体图像对生成方法
技术领域
本发明涉及立体图像对生成的技术领域,更具体地,涉及一种基于单目图像及深度图像渲染的立体图像对生成方法。
背景技术
虚拟制作可以让人们完全沉浸在一个人造的虚拟现实的环境中并与环境中的虚拟物体和人进行交互。立体显示技术是在虚拟环境中构建现实的三维空间的虚拟现实技术,是虚拟现实的一种实现方式。
生成立体图像对是立体显示技术主要研究方向之一,此技术是基于双眼视差的原理。双眼视差是指人利用双眼观察时左眼获取的图像和右眼获取的图像存在的水平像位差,大脑通过经验从左右眼的二维视差图像中提取到各个物体的深度信息,人眼在观察同一物体时会产生左右视差,参见如图1所示的投影视角,左眼视角和右眼视角的差异被称为屏幕视差,该视差使得立体物体投影到左右眼中,经过大脑处理后呈现出立体图像。计算机视觉将双眼视差定义为两个图像之间相似特征的坐标差异。
目前,立体图像对的生成方法主要分为两种,基于几何变换和基于深度学习的方法。其中,基于几何的新视点图像生成方法首先估计对象的近似三维(Three Dimensional,3D)结构,其次对输入图像中的像素进行图像变换以生成新图像,这种方法要求以某种方式估算3D结构,限制了图像生成算法的灵活性,同时由于此方法对没有适当视觉内容的地方需要使用各种类型的纹理进行填孔,这导致了生成的立体图像对效果不佳。基于深度学习的方法将图像合成看成是一个深度学习的问题,通常在训练时尝试构建对象类的参数模型,其次在测试阶段将模型与输入图像共同使用以生成新视点图像,这种方法需要尝试构建对象的参数模型,通过卷积神经网络学习估算得到的新视点图像通常过于模糊,而通过合成RGBD光场的方法生成新视点图像对硬件要求较严苛。尤其是面对单目图像时,单目图像缺乏立体信息,这些传统的新视点视图生成算法存在计算量大和实时性差等问题,在基于单目图像的立体图像对生成,挑战更大。
基于深度图像的渲染是3D空间中的图形变换技术,即三维图像变换(3D ImageWarping)技术,是从静止或运动的彩色图像以及相关的每像素深度信息合成场景的虚拟视图的过程,通过参考视点RGB数据和深度数据获取新视点数据。当前,大型3D显示技术主要是通过两路数据的叠加,然而,想要实现全景3D所需要的数据量远大于两路数据,这将对传输数据设备产生较高的要求。基于深度图像的渲染技术可以忽略数据传输,直接在显示端合成所需的视点数据。
发明内容
为解决单目图像缺乏立体信息、传统立体图像对生成算法计算量大和实时性差的问题,本发明提出一种基于单目图像及深度图像渲染的立体图像对生成方法,克服单目图像本身存在的缺陷,生成立体图像对,计算量小。
为解决上述问题,本申请采用的技术方案为:
一种基于单目图像及深度图像渲染的立体图像对生成方法,包括以下步骤:
S1:以原始的单目RGB图像作为左眼视图,基于左眼视图估计出深度图像,将深度图像的像素表示的深度值转换为对应的视差值;
S2:根据视差值进行像素移动,生成新视点视图,对生成的新视点视图进行基于边界信息孔洞的填充,得到最终的新视点视图,将最终的新视点视图作为右眼视图,与左眼视图形成立体图像对。
优选地,在步骤S1中,构建深度学习神经网络模型并进行预训练,将左眼视图作为预训练好的深度学习神经网络模型的输入,预测估计出左眼视图的深度图像。
优选地,在步骤S1中,在步骤S1中,将深度图像的像素表示的深度值转换为对应的视差值的过程为:
S11:形成基于深度图像的渲染坐标系,将深度图像的图像点从二维图像坐标系转换至三维空间坐标系;
S12:构建三维坐标系中深度图像3D空间点的仿射变换表达式,基于仿射变换表达式,形成仿射视差方程;
S13:利用仿射视差方程,将深度图像的像素表示的深度值转换为对应的视差值。
优选地,在步骤S11中,基于深度图像的渲染坐标系包括像素坐标系、图像坐标系和三维空间坐标系,像素坐标系和图像坐标系均为二维图像坐标系,三维空间坐标系采用相机坐标系;
设C为相机中心,c为成像平面中心,Z为与像平面相交的主轴,得到深度图像的图像点在三维空间坐标系与二维图像坐标系的中心投影对应关系表达式:
其中,表示深度图像中图像点的图像坐标,/>表示深度图像中图像点的相机坐标,/>和/>均为设置偏移参数;/>和/>均表示焦距;
将中心投影对应关系表达式转换为齐次坐标的形式:
得到相机的内参矩阵K,表达式为:
利用旋转量R和平移量t调节深度图像的图像点从二维图像坐标系转换至三维空间坐标系的过程,则:
其中,R和t拼接组成相机的外参矩阵,表示深度图像的图像点的世界坐标。
通过上述技术手段,考虑图像从三维空间中生成后可能发生缩放,首先对像素坐标进行等比缩放,利用相机内参矩阵对图像点进行2D到3D坐标的转换,且相机内参是固定不变的,最后利用外参矩阵完成三维坐标映射,实现三维图像变换。
优选地,在步骤S12中,设三维坐标系中深度图像的任一3D空间点表示为M,M在两个视角的投影分别为m和,当世界坐标系与其中一个视角的相机坐标系重合时,两个视角透视投影方程分别为:
其中,、/>和/>是分别是M、m和/>对应的齐次表示,/>表示成比例相等,A和/>分别表示两个视角的相机内参矩阵,D为矩阵,由旋转量R和平移量t组成,P n表示归一化透视投影矩阵;
从世界坐标系变换到另一个视角的相机坐标系时,得到三维坐标系中深度图像3D空间点的仿射变换表达式:
其中,Z表示空间点M在两个相机中的一个相机深度图像素对应的深度值;将代入/>中,得到仿射视差方程的表达式为:
其中,表示空间点M在两个相机中的另一个相机深度图像素对应的深度值。
优选地,在步骤S2之前,还包括:对深度图像进行预处理,过程为:基于边缘的深度滤波器对深度图像进行预处理,设定深度滤波器窗口大小以扫描深度图,设阈值为T,在窗口大小内判断选中的深度图像的像素深度值与周围像素点的深度值差值的平均值,若平均值大于T,则选中的深度图像的像素点为前景与背景边缘的像素点,利用深度滤波器对该像素点进行平滑处理;若平均值小于等于T,则选中的深度图像的像素点为非边缘像素点,不需要进行像素处理。
通过上述技术手段,减少新视点图像中由深度值的不连续所产生的空洞数量,并且保留图像信息,减少了图像的失真,使最终生成的新视点图像更自然。
优选地,在步骤S2中,根据视差值进行像素移动时,满足:
其中,U表示视差值,表示像素的深度值,d表示人眼到屏幕的距离,e表示人眼之间的瞳距。
优选地,从像素的深度值获取视差值后,进行视差检查,确定像素移动的位置后,若正在移动的像素所要移动的位置上已有其他像素,即前景像素和背景像素发生了遮挡,则该位置当前的像素将被舍弃,同时填入正在移动的像素,正在移动的像素所要移动的位置上为空,则将直接将该像素填入此位置;
同时,检查当前像素的深度值对应的视差值是否大于先前处理的像素的深度值对应的视差值,若是,则在像素移动的右侧创建孔洞,使用已处理的背景像素替换孔洞进行孔洞的填充,在像素移动的左侧出现像素重叠,生成新视点视图。
优选地,对生成的新视点视图进行基于边界信息孔洞的填充的步骤为:
S21:确定生成的新视点视图孔洞所在的位置,同时对孔洞的像素编号并确定个数;
S22:扫描新视点视图中的孔像素,确定孔的边缘;
S23:对孔的边缘像素进行插值,插值公式为:
其中,Z表示像素点的深度值,N表示孔边缘像素存在值的像素个数;
S24:对插值后的孔边缘像素的深度值从小到大排序,设置深度值阈值,将深度值小于深度值阈值的像素保留,将深度值大于等于深度值阈值的像素作为孔像素,利用背景像素填充;
S25:对整个新视点视图进行不断遍历,直至孔洞全部填充完毕。
通过上述技术手段,生成更完整准确的新视点视图以作为右眼视图,提高立体图像对生成效果。
优选地,步骤S22的过程具体为:
根据新视点视图视差的不同,利用不同大小的窗口进行扫描,当扫描到的像素所在的窗口中同时存在孔像素和正常像素,则该像素位于孔边缘。
与现有技术相比,本发明技术方案的有益效果是:
本发明提出一种基于单目图像及深度图像渲染的立体图像对生成方法,针对单目图像缺乏立体信息、当前立体图像对生成方法计算量大和实时性差等问题,以原始的单目RGB图像作为左眼视图,基于左眼视图估计出深度图像,将深度图像的像素深度值转换为对应的视差值,根据对应深度图的三维信息,从原视图获取新视点视图,并对于像素移动所产生的像素空洞,进行基于边界信息孔洞的填充,生成最终完整的右眼视图,实现了基于单幅图像的立体图像对生成。
附图说明
图1表示本发明背景技术中提出的立体视觉的左右视差投影示意图;
图2表示本发明实施例中提出的基于单目图像及深度图像渲染的立体图像对生成方法的流程示意图;
图3表示本发明实施例中提出的单目RGB图像对应的深度图像示意图;
图4表示本发明实施例中提出的像素处理过程的示意图;
图5表示本发明实施例中提出的基于边界信息孔洞的填充流程图;
图6表示利用本申请提出的方法生成新视点图像的示意图;其中,原始单目RGB图像为简单几何物体、半透明物体和复杂边缘物体的绿幕原始图像;
图7表示利用本申请提出的方法生成新视点图像的另一示意图;其中,原始单目RGB图像为室外场景图像、室内场景图像及复杂场景图像。
具体实施方式
附图仅用于示例性说明,不能理解为对本申请的限制;
为了更好地说明本实施例,附图某些部位会有省略、放大或缩小,并不代表实际尺寸;
对于本领域技术人员来说,附图中某些公知内容说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明;
附图中描述位置关系的仅用于示例性说明,不能理解为对本申请的限制;
实施例1如图2所示,本实施例提出了一种基于单目图像及深度图像渲染的立体图像对生成方法,参见图2,该述方法包括以下步骤:
S1:以原始的单目RGB图像作为左眼视图,基于左眼视图估计出深度图像,将深度图像的像素表示的深度值转换为对应的视差值;
S2:根据视差值进行像素移动,生成新视点视图,对生成的新视点视图进行基于边界信息孔洞的填充,得到最终的新视点视图,将最终的新视点视图作为右眼视图,与左眼视图形成立体图像对。
在本实施例中,采用单目RGB图像为绿幕下含两人的情景图,以该图作为左眼视图,构建深度学习神经网络模型并进行预训练,将左眼视图作为预训练好的深度学习神经网络模型的输入,预测估计出左眼视图的深度图像如图3所示,本实施例中的深度学习神经网络模型如采用CNN-based网络,用的是一个Multi-scale的网络,这里的Multi-scale不是现在网络中Multi-scale features的做法,而是分为两个scale的网络来做DepthMap的估计,分别是Global Coarse-Scale Network和Local Fine-Scale Network。前者是AlexNet,来得到一个低分辨率的Coarse的Depth Map,再用后者去refine前者的输出得到最后的refined depth map。
在本实施例中,将深度图像的像素深度值转换为对应的视差值的过程为:
S11:形成基于深度图像的渲染坐标系,将深度图像的图像点从二维图像坐标系转换至三维空间坐标系;
S12:构建三维坐标系中深度图像3D空间点的仿射变换表达式,基于仿射变换表达式,形成仿射视差方程;
S13:利用仿射视差方程,将深度图像的像素表示的深度值转换为对应的视差值。
基于深度图像的渲染坐标系包括像素坐标系、图像坐标系和三维空间坐标系,像素坐标系和图像坐标系均为二维图像坐标系,而基于深度图像的渲染需要将图像点从成像平面投影到三维空间中,因此需要进行二维图像坐标系到三维空间坐标系的转换。在本实施例中,三维空间坐标系采用相机坐标系,并且与相机成像模型紧密联系。应用最广泛的成像模型为针孔相机模型,该模型描述了三维空间中的点在图像平面上投影的数学关系,其中图像坐标所在的平面与相机成像平面重合,假设三维空间中任意一点P在成像平面上的投影为P1,并且相机坐标的XY平面与成像平面平行,得到二维图像坐标系与三维相机坐标系之间的位置关系。
设C为相机中心,c为成像平面中心,Z为与像平面相交的主轴,得到深度图像的图像点在三维空间坐标系与二维图像坐标系的中心投影对应关系表达式:
其中,表示深度图像中图像点的图像坐标,/>表示深度图像中图像点的相机坐标,/>和/>均为设置偏移参数;/>和/>均表示焦距;
将中心投影对应关系表达式转换为齐次坐标的形式:
得到相机的内参矩阵K,表达式为:
利用旋转量R和平移量t调节深度图像的图像点从二维图像坐标系转换至三维空间坐标系的过程,则:
其中,R和t拼接组成相机的外参矩阵,表示深度图像的图像点的世界坐标。在本实施例中,R为3*3大小的旋转矩阵,t为3*1的平移矩阵。
由上述转换可得像素坐标到世界坐标的投影关系为:
其中,s为缩放因子。考虑图像从三维空间中生成后可能发生缩放,首先对像素坐标进行等比缩放,利用相机内参矩阵对图像点进行2D到3D坐标的转换,且相机内参是固定不变的,最后利用外参矩阵完成三维坐标映射,实现三维图像变换。
设三维坐标系中深度图像的任一3D空间点表示为M,M在两个视角的投影分别为m和,当世界坐标系与其中一个视角的相机坐标系重合时,两个视角透视投影方程分别为:
其中,、/>和/>是分别是M、m和/>对应的齐次表示,/>表示成比例相等,A和/>分别表示两个视角的相机内参矩阵,D为矩阵,由旋转量R和平移量t组成,P n表示归一化透视投影矩阵;
从世界坐标系变换到另一个视角的相机坐标系时,得到三维坐标系中深度图像3D空间点的仿射变换表达式:
其中,Z表示空间点M在两个相机中的一个相机深度图像素对应的深度值;将代入/>中,得到仿射视差方程的表达式为:
其中,表示空间点M在两个相机中的另一个相机深度图像素对应的深度值。定义了在同一3D场景中,两个视角的视图的对应点之间的深度相关。
实施例2在RGB图像中前景物体的边缘深度值和背景的深度值不同或者不连续,此时进行像素移动会导致新视点图像中产生多余的空洞。因此,在本实施例中,在步骤S2之前,还包括:对深度图像进行预处理,过程为:基于边缘的深度滤波器对深度图像进行预处理,设定深度滤波器窗口大小(本实施例中使用3*3大小的窗口)以扫描深度图,设阈值为T,在窗口大小内判断选中的深度图像的像素深度值与周围像素点的深度值差值的平均值,若平均值大于T,则选中的深度图像的像素点为前景与背景边缘的像素点,利用深度滤波器对该像素点进行平滑处理;若平均值小于等于T,则选中的深度图像的像素点为非边缘像素点,不需要进行像素处理。通过预处理,减少新视点图像中由深度值的不连续所产生的空洞数量,并且保留图像信息,减少了图像的失真,使最终生成的新视点图像更自然。
在步骤S2中,根据视差值进行像素移动时,满足:
其中,U表示视差值,表示像素的深度值,d表示人眼到屏幕的距离,e表示人眼之间的瞳距。
在本实施例中,从像素的深度值获取视差值后,使用查找表LUT进行视差检查,确定像素移动的位置后,若正在移动的像素所要移动的位置上已有其他像素,即前景像素和背景像素发生了遮挡,则该位置当前的像素将被舍弃,同时填入正在移动的像素,正在移动的像素所要移动的位置上为空,则将直接将该像素填入此位置;
同时,检查当前像素的深度值对应的视差值是否大于先前处理的像素的深度值对应的视差值,若是,则在像素移动的右侧创建孔洞,使用已处理的背景像素替换孔洞进行孔洞的填充,在像素移动的左侧出现像素重叠,生成新视点视图。
图4表示上述描述的像素处理过程的示意图,包括像素孔洞以及像素重叠的示意图,在整幅图像中不断重复上述步骤,直到所有像素处理完成,在本实施例中,从左眼视图中生成右眼视图,大部分孔洞出现在移动像素的右侧,而像素重叠则出现在移动像素的左侧。
实施例3虽然经过深度图像预处理步骤,但是由于像素移动生成的新视点图像仍然会存在少许的孔,大约1-4像素的大小,这些孔洞通常属于在原始参考图像中不存在的信息,而且容易被忽略。这类孔洞的产生是由于前景物体遮挡了背景物体,像素移动时被遮挡像素出现在图像中,但由于原始图像中没有该像素的信息而导致的背景像素信息缺失,所以此部分的空洞需要利用背景物体的像素进行填充。本实施例对生成的新视点视图进行基于边界信息孔洞的填充,以生成更完整准确的新视点视图以作为右眼视图,提高立体图像对生成效果。基于边界信息孔洞的填充流程参见图5,具体步骤为:
S21:确定生成的新视点视图孔洞所在的位置,同时对孔洞的像素编号并确定个数;
S22:扫描新视点视图中的孔像素,确定孔的边缘;具体为:
根据新视点视图视差的不同,利用不同大小的窗口进行扫描,当扫描到的像素所在的窗口中同时存在孔像素和正常像素,则该像素位于孔边缘。
S23:对孔的边缘像素进行插值,插值公式为:
其中,Z表示像素点的深度值,N表示孔边缘像素存在值的像素个数;
S24:对插值后的孔边缘像素的深度值从小到大排序,设置深度值阈值,将深度值小于深度值阈值的像素保留,将深度值大于等于深度值阈值的像素作为孔像素,利用背景像素填充;
S25:对整个新视点视图进行不断遍历,直至孔洞全部填充完毕。
利用基于边界信息填充的算法进行图像修复时,前景物体距离相机越远,前景像素和背景像素的深度值越接近,而像素移动的距离越小;前景物体距离相机越近,前景像素和背景像素深度值差异越大,而像素移动的距离越大。当物体与相机相隔越远,前景像素与背景像素的深度差异越模糊,会造成像素移动重叠时,前景像素不能完全覆盖背景像素而导致前景像素丢失的问题,而当物体与相机相隔越近,前景像素移动距离越远,会造成像素填充面积过大而导致局部区域模糊。
如表1所示,当人物在深度100cm左右的PSNR和SSIM指标要比在深度150cm左右高,修复的效果也较好。
表1
图6表示利用本申请提出的方法生成新视点图像的示意图;其中,原始单目RGB图像为简单几何物体、半透明物体和复杂边缘物体的绿幕原始图像;在图6中,自上而下依次为简单物体1、简单物体2、半透明物体、复杂边缘物体,可以看出,对于包含简单的几何物体、半透明物体和边缘复杂的物体的绿幕图像,利用本实施例提出的方法均能获取效果较好的新视点视图。
图7表示利用本申请提出的方法生成新视点图像的另一示意图;图7对应的原始单目RGB图像为室外场景图像、室内场景图像及复杂场景图像。利用本申请提出的方法生成新视点图像时,在图7中,按图片展示顺序,从左到右分别是深度图像、填充修复前新视点视图和填充修复后新视点视图,更具体的,在图7中,自上向下的三行图片分别是代表室外场景图像生成新视点图像的过程图、室内场景图像生成新视点图像的过程图及复杂场景图像生成新视点图像的过程图,其中,对于第一行图片,自左向右,依次分别代表室外场景图像的深度图像、室外场景图像的填充修复前新视点视图及室外场景图像的填充修复后新视点视图;对于第二行图片,自左向右,依次分别代表室内场景图像的深度图像、室内场景图像的填充修复前新视点视图及室内场景图像的填充修复后新视点视图;对于第三行图片,自左向右,依次分别代表复杂场景图像的深度图像、复杂场景图像的填充修复前新视点视图及复杂场景图像的填充修复后新视点视图。
显然,本发明的上述实施例仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。