发明内容
本发明要解决的技术问题是提供一种生成立体图像的方法和系统,可更简单方便地得到一幅或者一幅以上与源图有视差的图像。
为解决上述技术问题,本发明提供了一种生成立体图像的方法,包括:
接收从一幅以上的图像中截取的对象,将所述截取的对象放置于背景图像中,得到第一平面图像;
根据待生成的第二平面图像对应的视点的位置和第一平面图像中每个对象的期望深度,确定与所述第二平面图像上的第一像素对应的第一平面图像的第二像素;用所述第二像素的颜色值填充所述第一像素的颜色值,得到所述第二平面图像。
进一步地,得到所述第二平面图像后,合并所述第一平面图像和第二平面图像,生成立体图像,或者合并两个以上视点分别对应的第二平面图像,生成立体图像。
进一步地,所述根据待生成的第二平面图像对应的视点的位置和第一平面图像中每个对象的期望深度,确定与所述第二平面图像上的第一像素对应的第一平面图像的第二像素;用所述第二像素的颜色值填充所述第一像素的颜色值,得到所述第二平面图像的步骤包括:
接收所述第一平面图像中每个对象的期望深度值;
根据所述期望深度值以及所述第一平面图像中每个像素的颜色值,生成所述第一平面图像对应的深度图;
根据待生成的第二平面图像对应的视点的位置、所述第二平面图像上第一像素的位置,以及所述第二平面图像与所述深度图的深度关系,得到所述第一像素在所述深度图上的对应位置的像素,将所述对应位置的像素的颜色值作为所述第一像素的颜色值,重复本步骤,得到所述第二平面图像上每个像素的颜色值。
进一步地,所述第一平面图像中每个像素的颜色值根据以下信息获得:所述截取的对象上每个像素的颜色值、背景图像的颜色值,以及对象的放置关系。
进一步地,所述第一平面图像中每个对象的期望深度值采用以下设置方法中的任意一种进行设置:线性设置、圆形设置、等高线设置、局部点选设置。
进一步地,所述根据所述期望深度值以及所述第一平面图像中每个像素的颜色值,生成所述第一平面图像对应的深度图,包括:
所述第一平面图像对应的深度图包含第一平面图像中每个像素的颜色值以及每个像素的期望深度,其中每个像素的颜色值为第一平面图像中对应像素的颜色值,每个像素的深度值根据所述像素所在对象的期望深度值确定。
进一步地,所述第二平面图像与所述深度图的深度关系由所述第二平面图像的深度决定,所述第二平面图像的深度和最大深度的深度差与所述最大深度的比值范围在0~1之间。
进一步地,所述根据待生成的第二平面图像对应的视点的位置、所述第二平面图像上第一像素的位置,以及所述第二平面图像与所述深度图的深度关系,得到所述第一像素在所述深度图上的对应位置的像素,将所述对应位置的像素的颜色值作为所述第一像素的颜色值的步骤包括:
确定一绝对运算区域,该区域内第一平面图像对应的深度图中的像素与所述第二平面图像中的像素的位置一一对应;
在所述绝对运算区域内,确定所述第二平面图像对应的视点到所述第一像素的向量或向量延长线与所述深度图的首个交点,将所述交点对应的像素的颜色值作为所述第一像素的颜色值。
进一步地,所述绝对运算区域包含一行像素或者多行像素。
为解决上述技术问题,本发明还提供了一种生成立体图像的系统,包括:
第一装置,用于接收从一幅以上的图像中截取的对象,将所述截取的对象放置于背景图像中,得到第一平面图像;
第二装置,用于根据待生成的第二平面图像对应的视点的位置和第一平面图像中每个对象的期望深度,确定与所述第二平面图像上的第一像素对应的第一平面图像的第二像素,用所述第二像素的颜色值填充所述第一像素的颜色值,得到所述第二平面图像。
进一步地,所述系统还包括第三装置,其用于在得到所述第二平面图像后,合并所述第一平面图像和第二平面图像,生成立体图像,或者合并两个以上视点分别对应的第二平面图像,生成立体图像。
进一步地,所述第二装置还包括期望深度值获取模块、深度图生成模块和视点图像生成模块,其中:
所述期望深度值获取模块,用于接收所述第一平面图像中每个对象的期望深度值;
所述深度图生成模块,用于根据所述期望深度值以及所述第一平面图像中每个像素的颜色值,生成所述第一平面图像对应的深度图;
所述视点图像生成模块,用于重复以下操作得到所述第二平面图像上每个像素的颜色值:根据待生成的第二平面图像对应的视点的位置、所述第二平面图像上第一像素的位置,以及所述第二平面图像与所述深度图的深度关系,得到所述第一像素在所述深度图上的对应位置的像素,将所述对应位置的像素的颜色值作为所述第一像素的颜色值。
进一步地,所述深度图生成模块根据以下信息获得所述第一平面图像中每个像素的颜色值:所述截取的对象上每个像素的颜色值、背景图像的颜色值,以及对象的放置关系。
进一步地,所述期望深度值获取模块还用于采用以下设置方法中的任意一种设置所述第一平面图像中每个对象的期望深度:线性设置、圆形设置、等高线设置、局部点选设置。
进一步地,所述第一平面图像对应的深度图包含第一平面图像中每个像素的颜色值以及每个像素的期望深度;
所述深度图生成模块采用以下方式生成所述第一平面图像对应的深度图:
将所述第一平面图像对应的深度图中每个像素的颜色值为第一平面图像中对应像素的颜色值;所述深度图中每个像素的深度值根据所述像素所在对象的期望深度值确定。
进一步地,所述第二平面图像与所述深度图的深度关系由所述第二平面图像的深度决定,所述第二平面图像的深度和最大深度的深度差与所述最大深度的比值范围在0~1之间。
进一步地,所述视点图像生成模块包括运算区域确定单元、颜色值确定单元,其中:
所述运算区域确定单元,用于确定一绝对运算区域,该区域内第一平面图像对应的深度图中的像素与所述第二平面图像中的像素的位置一一对应;
所述颜色值确定单元,用于在所述绝对运算区域内,确定所述第二平面图像对应的视点到所述第一像素的向量或向量延长线与所述深度图的首个交点,将所述交点对应的像素的颜色值作为所述第一像素的颜色值。
进一步地,所述绝对运算区域包含一行像素或者多行像素。
本发明实施例通过对任意图像进行分割,获得图像上的物体对象,然后在背景上设置该一个或多个物体对象的位置及深度,最后通过计算生成具有视差的两幅或者多幅具有视差的图像,从而替代了现有的获得三维图像的方法,操作更简单,且无需昂贵的费用。
具体实施方式
本发明采用的生成立体图像的方案包括:
步骤一、接收从一幅以上的图像中截取的对象,将所述截取的对象放置于背景图像中,得到第一平面图像;
步骤二、根据待生成的第二平面图像对应的视点的位置和第一平面图像中每个对象的期望深度,确定与所述第二平面图像上的第一像素对应的第一平面图像的第二像素;用所述第二像素的颜色值填充所述第一像素的颜色值,得到所述第二平面图像。
采用上述方法不仅计算方便,还可以有效避免空洞,且立体感好。
用户可根据需要设置待生成的第二平面图像的数量,例如可以是2幅或者是4幅或者是9幅等。
上述对象可能是一个物体也可能是一片区域。例如可以是一个杯子、一栋楼或者是一片天空等。
优选地,在得到第二平面图像后,可合并该第一平面图像和第二平面图像,生成立体图像,或者合并两个以上视点分别对应的第二平面图像,生成立体图像。或者也可以不合并,直接输出与第一平面图像有视差的图。例如以九宫格形式输出。
上述步骤二具体包括:
1、接收所述第一平面图像中每个对象的期望深度值;
所述期望深度可以是用户为该第一平面图像中每个对象预设的。如果第一图像中的对象包含深度特征,则用户仅需设置该对象与第一平面图像上其他对象的深度关系即可。第一平面图像中每个对象的期望深度值可以采用以下设置方法中的任意一种进行设置:线性设置、圆形设置、等高线设置、局部点选设置。每个对象的期望深度可以是一个固定值也可以是一个深度范围。
2、根据该期望深度值以及第一平面图像中每个像素的颜色值,生成该第一平面图像对应的深度图;
第一平面图像中每个像素的颜色值是根据以下信息获得:所述截取的对象上每个像素的颜色值、背景图像的颜色值,以及对象的放置关系。对象的放置关系包括对象间的放置关系以及对象与背景的放置关系。
具体地,第一平面图像对应的深度图包含第一平面图像中每个像素的颜色值以及每个像素的期望深度,其中每个像素的颜色值为第一平面图像中对应像素的颜色值,每个像素的深度值根据该像素所在对象的期望深度值确定。
3、根据待生成的第二平面图像对应的视点的位置、所述第二平面图像上第一像素的位置,以及所述第二平面图像与所述深度图的深度关系,得到所述第一像素在所述深度图上的对应位置的像素,将所述对应位置的像素的颜色值作为所述第一像素的颜色值,重复本步骤,得到所述第二平面图像上每个像素的颜色值。
上述第二平面图像与深度图的深度关系由该第二平面图像的深度决定,该第二平面图像的深度和最大深度的深度差与所述最大深度的比值范围在0~1之间,可由用户设置,也可以采用系统默认值,优选为[0.2,0.4]。最大深度通常范围为[0,255],通常为255。
步骤3具体包括:
1)确定一绝对运算区域,该区域内第一平面图像对应的深度图中的像素与第二平面图像中的像素的位置一一对应;
2)采用以下方法确定在绝对运算区域内第二平面图像中第一像素的颜色值:确定第二平面图像对应的视点到第一像素的向量或向量延长线与深度图的首个交点,将该交点对应的像素的颜色值作为所述第一像素的颜色值。
上述绝对运算区域包含一行像素或者多行像素(如像素面)。根据绝对运算区域的不同,具体可分为以下两种计算方法:
方法A
绝对运算区域包含一像素行时,则生成的该第一平面图像对应的深度图为一深度曲线,该深度曲线上的像素与第二平面图像中的像素一一对应。第二平面图像中某行L上某像素点P的颜色值通过以下方法得到:确定预设视点到P点的向量或向量延长线与深度曲线的首个交点P’,确定该深度曲线上点P’对应像素的颜色值为所述P点的颜色值。
方法B
绝对运算区域包含多行像素,即一像素面,则生成的该第一平面图像对应的深度图为一深度曲面,该深度曲面中的像素与第二平面图像中的像素一一对应;第二平面图像中某行L上某像素点P的颜色值可参照方法A获得。
上述方法A和方法B均可通过构建数学模型来实现,区别在于方法A以线为单位构建平面数学模型,方法B以面为单位构建立体数学模型。方法B较方法A略复杂,且,方法B中由于视点的投影位置通常在视觉深度曲面的中心位置,因此在确定视点对应的待生成图像的颜色值时可能产生一定的视差。
实现上述方法的系统参见图1,包括:
第一装置,用于接收从一幅以上的图像中截取的对象,将所述截取的对象放置于背景图像中,得到第一平面图像;
第二装置,用于根据待生成的第二平面图像对应的视点的位置和第一平面图像中每个对象的期望深度,确定与所述第二平面图像上的第一像素对应的第一平面图像的第二像素,用所述第二像素的颜色值填充所述第一像素的颜色值,得到所述第二平面图像。
优选地,该系统还包括第三装置,其用于在得到所述第二平面图像后,合并所述第一平面图像和第二平面图像,生成立体图像,或者合并两个以上视点分别对应的第二平面图像,生成立体图像。
优选地,该第二装置还包括期望深度值获取模块、深度图生成模块和视点图像生成模块,其中:
所述期望深度值获取模块,用于接收所述第一平面图像中每个对象的期望深度值;
所述深度图生成模块,用于根据所述期望深度值以及所述第一平面图像中每个像素的颜色值,生成所述第一平面图像对应的深度图;
所述视点图像生成模块,用于重复以下操作得到所述第二平面图像上每个像素的颜色值:根据待生成的第二平面图像对应的视点的位置、所述第二平面图像上第一像素的位置,以及所述第二平面图像与所述深度图的深度关系,得到所述第一像素在所述深度图上的对应位置的像素,将所述对应位置的像素的颜色值作为所述第一像素的颜色值。
优选地,该深度图生成模块根据以下信息获得所述第一平面图像中每个像素的颜色值:所述截取的对象上每个像素的颜色值、背景图像的颜色值,以及对象的放置关系。
优选地,所述期望深度值获取模块还用于采用以下设置方法中的任意一种设置所述第一平面图像中每个对象的期望深度:线性设置、圆形设置、等高线设置、局部点选设置。
优选地,所述第一平面图像对应的深度图包含第一平面图像中每个像素的颜色值以及每个像素的期望深度;所述深度图生成模块采用以下方式生成所述第一平面图像对应的深度图:将所述第一平面图像对应的深度图中每个像素的颜色值为第一平面图像中对应像素的颜色值;所述深度图中每个像素的深度值根据所述像素所在对象的期望深度值确定。
优选地,所述视点图像生成模块包括运算区域确定单元、颜色值确定单元,其中:
所述运算区域确定单元,用于确定一绝对运算区域,该区域内第一平面图像对应的深度图中的像素与所述第二平面图像中的像素的位置一一对应;
所述颜色值确定单元,用于在所述绝对运算区域内,确定所述第二平面图像对应的视点到所述第一像素的向量或向量延长线与所述深度图的首个交点,将所述交点对应的像素的颜色值作为所述第一像素的颜色值。该绝对运算区域可以包含一行像素或者可以包含多行像素。
下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意合成。
实施例1
本实施例以所有对象均从一幅原始图像中获得为例进行说明。如图2所示,包括以下步骤:
第一步:加载原始图像,获得原始图像的基本信息;
原始图像的基本信息包括:图像的尺寸(长和宽),图像中每个像素的颜色值(RGB值)。
第二步:根据用户选择的对象,对原始图像进行分割,将用户选择的一个或两个以上对象从该原始图像中分离出来,并单独存储;
优选采用图像分割算法(或称抠图算法)对原始图像进行分割。具体分割的方式很多,例如可以采用特定的形状模型进行分割,比如:长方形、圆形等;也可以采用一些算法进行智能的分割,如均值漂移算法、最小割/最大流算法等。
如果需要分离多个对象,通常一次分割一个对象,通过多次运行图像分割算法,分离出多个对象。将所有要分离的对象都分割出来后再执行第三步。
第三步:接收从原始图像中截取的对象,将该些对象放置于背景图像中,得到第一平面图像;
放置的位置关系对后续的立体显示的深度层次(三维显示时的凸凹层次)也会产生影响。位于上层的对象较位于下层的对象从视觉上更加凸出。
第一平面图像中每个像素的颜色值根据所截取的对象上每个像素的颜色值、背景图像的颜色值,以及对象的放置关系来决定,从视点可见的对象和/或背景的颜色值共同组成第一平面图像的颜色值。
上述背景图像可以是一幅新的图像,或者可以是原始图像,还可以是经过立体处理后得到的图像。
本步骤中,将对象放置于背景图像中时,可根据用户设置的对象的位置信息来进行放置即位置的设置。采用此种方式,用户可以自行设置三维显示时各对象的放置关系,给用户较大的自由度,用户体验较好。
第四步:接收第一平面图像中每个对象的期望深度值,根据该期望深度值以及第一平面图像中每个像素的颜色值,生成第一平面图像对应的深度图;
第一平面图像中每个对象的期望深度值可由用户预设置或者由系统进行设置。例如,放置后的各对象不能覆盖住背景图像,则需要设置露出的背景图像部分的深度,用户可自行设置或者由系统采用默认设置,如设置为深度最深。通过直接对待生成第二平面图像上各对象设置深度避免了现有技术中构建三维模型方案较复杂的弊端。
为了更好的体现出立体效果,优选将对象的深度值设置为一个深度范围,该深度范围根据场景内对象的远近程度设定。第一平面图像中每个对象的期望深度值可采用以下设置方法中的任意一种进行设置:线性设置、圆形设置、等高线设置、局部点选设置。
下面对几种设置方法分别进行介绍
●线性设置:
如图3所示,设定一深度设置区301,在该区域中,设Ps为起点(start),起点的深度为Vs,Pe为终点(end),终点的深度为Ve。设起点和终点间线段PsPe上任一点Px的深度为Vx,则Vx=Vs+(Dsx/Dse)*Vse,其中,Dsx为点Ps到点Px的距离,Dse为点Ps到点Pe的距离,Vse=Ve-Vs。并且在该深度设置区内,该Px所在的垂直于线段PsPe的线段(如图中302)上所有点的深度值均为Vx。该深度设置区范围横向范围可通过起点和终点确定,纵向范围的初始大小可采用系统默认,也可由用户手动调整。
●圆形设置:
如图4所示,设定一圆形深度设置区401,在该区域中,设Ps为起点(start),起点的深度为Vs,Pe为终点(end),终点的深度为Ve,且半径为PsPe的圆上任一点的深度值均为Ve。设起点和终点间线段PsPe上任一点Px的深度为Vx,则Vx=Vs+(Dsx/Dse)*Vse,其中,Dsx为点Ps到点Px的距离,Dse为点Ps到点Pe的距离,Vse=Ve-Vs。并且在该深度设置区内,该Px所在的半径为PsPx的圆(如图中402)上任一点的深度值均为Vx。该深度设置区范围大小通过起点和终点的位置确定。
●等高线设置:
等高线是一条由用户点选的插值点组成的样条曲线。用户可通过鼠标的点击点选插值点,插值点之间用样条曲线连接。如图5所示,线501和线502为两条等高线,线501上所有点的深度为V1,线502上所有点的深度为V2,线501上任意一点Ps的法线与线502交于点Pe,则线段PsPe上任一点Px的深度为:Vx=V1+(Dsx/Dse)*Vse,其中,Dsx为点Ps到点Px的距离,Dse为点Ps到点Pe的距离,Vse=V2-V1。如果Ps的法线与线2无交点,则暂不处理,继续计算有交点的点。当所有能计算的点计算完毕后,再对无法计算深度的点采用加权平均的方式设置深度,比如可以采用3*3或5*5或者更大的高斯模板进行加权平均计算。
●局部点选设置:
局部点选的作用是对图像上的点的深度进行局部调整,例如,在采用该方式设置深度时,对用户选择的点进行深度的增加或减少,增加或减少的幅度d为系统预设,也可以由用户进行修改,例如d=5,而距离该点P的距离为r处的点(见图6)的深度增加或减少dr=k*d/r,其中k为加权参数,可以根据实际情况取值,例如k=0.3。
根据用户设定的深度进行深度设置,实施起来更加简单、容易实现,无需制作三维场景,无需进行测量,且用户不但可以根据喜好设置图片内容,还可以根据自己的需要设置深度,能够获得非常好的用户体验。
第五步:根据待生成的第二平面图像对应的视点的位置、第二平面图像上第一像素的位置,以及第二平面图像与深度图的深度关系,得到第一像素在深度图上的对应位置的像素,将对应位置的像素的颜色值作为第一像素的颜色值,重复本步骤,得到第二平面图像上每个像素的颜色值,即得到该视点对应的第二平面图像。
每个视点对应的第二平面图像均与第一平面图像有视差。多个视点各自对应的第二平面图像合成后即可得到立体图像,或者将第一平面图像和第二平面图像合成后也可得到立体图像。
以方法A为例说明立体处理的过程:
图7中,L1和L2对应第一平面图像的某一行M,其中L1表示该M行上每个像素的颜色值,L2表示该M行上每个像素的深度值,L1和L2共同组成第一平面图像的深度图。通过深度坐标来表示L1、L2以及待生成的第二平面对应像素行,如图7所示,在本实施例中L1的深度为0;L2的深度由L2上各像素的深度值决定,图7所示L2曲线形状仅为示例;L3为待生成第二平面图像上对应第一平面图像像素的像素行,也就是说L3上每一像素与L1上每一像素一一对应;L4为最大深度(本实施例中为255)。L3的深度位置由以下参数决定:L3到L4的深度与L1到L4的深度(即最大深度)的比值范围在0-1之间,优选为[0.2,0.4]。
图中的视距为左右视点到L3的距离。
L3上某像素点P1的颜色值通过以下方法得到:确定视点(左视点或者右视点)到P1点的向量或向量延长线与L2的首个交点,该交点对应像素在L1上的颜色值即为该视点对应的第二平面图像上P1点的颜色值。图中P11为根据上述方法确定的左视点对应的第二平面图像中P1点的颜色值,P1r为根据上述方法确定的右视点对应的第二平面图像中P1点的颜色值;P21为根据上述方法确定的左视点对应的第二平面图像中P2点的颜色值,P2r为根据上述方法确定的右视点对应的第二平面图像中P2点的颜色值。
用上述方法可以逐行确定某视点对应的第二平面图像上的颜色值,进而获得整幅该视点对应的待生成的第二平面图像。
上述实例以两个视点为例进行说明,为了获得更好的立体效果,也可以设置多个视点,例如在上述左右视点的基础上增加左左视点和右右视点,重复上述方法,分别生成左左视点和右右视点对应的待生成图像,利用四个视点对应的待生成图像生成最终的立体图像。
实施例2
本实施例为采用上述方法生成立体图像的应用实例。若要生成图8的立体图像,可采用以下步骤:
步骤201,分别分割出天空、山川和海水,分别保存为不同的图层;
步骤202,导入背景图像;
在本实施例中,背景图像为原始图像。
步骤203,分别将步骤201中分割出的天空、山川和海水放置于背景图像中;
步骤204,分别设置天空、山川和海水的期望深度;
在本实施例中,设置天空的期望深度范围为:255~0,255距离视点最近,为白色,0距离视点最远,为黑色。考虑海水离视点最近,而山的尽头才是天空,水的深度加山的深度才等于天空的深度,因此设置海水的期望深度范围为255~80,山的期望深度范围为:80~0。设置完期望深度后,体现在平面图上如图9所示。
步骤205,采用方法A分别生成左右视点对应的第二平面图像,如图10所示。
为了方便对比将左右视点对应的两幅图显示在同一附图中,其中左边的图为左视点对应的第二平面图像,右边的图为右视点对应的第二平面图像。
步骤206,将左右视点分别对应的第二平面图像合成为立体图像。
本步骤可采用现有技术实现,本文不再赘述。基于使用者的多种需要,在得到左右视点对应的第二平面图像后,也可不执行步骤206。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。