基于双目立体视觉原理的立体视频自动生成软件开发

2016-10-28 01:17洪志国王永滨石民勇
关键词:右路视差双目

洪志国,王永滨,石民勇

(中国传媒大学 理工学部计算机学院,北京 100024)



基于双目立体视觉原理的立体视频自动生成软件开发

洪志国,王永滨,石民勇

(中国传媒大学理工学部计算机学院,北京 100024)

面向三维场景、基于双目立体视觉原理的渲染是立体视频制作的常用方式之一,但因控制左右虚拟摄像机的位置和设置渲染参数等往往通过手动设置模式来完成,较好效果的立体视频需要重复“编辑场景”和“渲染”等过程,影响了立体视频制作的效率。为此,本文针对3DS Max场景文件、基于双目立体视觉原理实现了立体视频的自动生成:首先采用3DS Max内嵌的脚本语言(MaxScript)对3D场景进行预处理,自动添加模拟人的左眼虚拟摄像机和右眼虚拟摄像机,然后以左眼虚拟摄像机和右眼虚拟摄像机作为视点,通过命令行渲染方式生成左眼视域和右眼视域等两路视频,作为立体视频的原始素材。

立体视觉;脚本;3D;虚拟摄像机;渲染

1 引言

3D数字电影的制作通常包括实际拍摄和基于三维场景的渲染输出等方式。在实际拍摄方式下,可以基于3D摄像机进行视频采集,由2个摄像机分别记录下左右视角的图像数据,以模拟媒体[1]或数字媒体形式保存,然后通过立体播放设备来展示。2010年,随着由詹姆斯·卡梅隆执导的《阿凡达》的热映,3D技术逐渐引入到3D电影制作行业,该影片采用3D虚拟影像摄影系统和和虚拟摄像机,大量运用了CG相关技术,达到了逼真的效果[2]。After Effects等工具能实现从普通二维电影到3D电影的转换[3],但由于缺少独立的左路和右路等独立的视频源,观众在观看转换后的3D电影时缺少真实感和沉浸感。动漫爱好者可以基于三维场景设置模拟人眼的左路和右路虚拟摄像机,然后分别以左路摄像机和右路摄像机作为视域分别渲染生成左路视频和右路视频,通过立体播放器及相关显示设备来观看立体视频。然而要达到播放立体视频时的较好效果,场景制作者需要 “编辑场景”和“渲染”阶段的多次操作,影响了立体视频制作的效率。为此,如何能基于用户制作的普通三维模型,实现模拟人眼的左右虚拟摄像机的自动添加并渲染输出,达到立体视频的快速、自动生成是一个重要的研究话题。

本文针对3DS Max场景文件、基于双目立体视觉原理实现了立体视频的自动生成:首先采用3DS Max内嵌的脚本语言(MaxScript)对3D场景进行预处理,自动添加模拟人的左眼虚拟摄像机和右眼虚拟摄像机自动配置场景中视域的参数,然后以左眼虚拟摄像机和右眼虚拟摄像机作为视点通过命令行渲染方式,生成左眼视域和右眼视域等两路视频,作为立体视频资源的有益补充。

2 立体图像对获取原理

由于立体图像是在人的大脑视区中形成的,因此它与人类的立体视觉是密不可分[4]。为了产生逼真的立体效果,必须需要采用合适的双目系统的成像模型来生成立体图像。常用的模型有平行双目模型和汇聚双目模型,这两个模型均是在虚拟场景中设定两个虚拟视点,在各自的视点处生成各自的二维图像,但由于它们的视轴方向不同使得获取的立体图像对具有不同的性质。因为汇聚模型可以模拟人眼的辐辏,所以会更贴近人眼的双目视觉,我们主要依据汇聚双目模型。

立体图像对呈现出来的立体效果的好坏主要决定因素是视差。视差的呈现是在获取到立体图像对后通过图像对的合成展示出来的。视差又可以分为水平视差和垂直视差,研究表明水平视差是能产生强烈的立体感,而垂直视差不利于立体图像对的融合,甚至超过一定限度会引起观看者的不适[5]。因此,本文只考虑水平视差,即三维场景中一台虚拟摄像机的Z坐标与派生出左右两路摄像机的Z坐标保持一致。

3 基于3D场景的立体图像对获取

3.13DS Max中摄像机的参数设置

在三维场景已经建好的情况下,需要通过复杂的公式计算完成“景物坐标系→世界坐标系→图像坐标系”的坐标转换,并据此在计算机监视器上生成立体图像对[6]。3DS Max提供摄像机对象可以简化上述坐标转换的过程,首先对场景中的物体进行坐标变化,再进行透视投影。如果以场景中的某一摄像机为原始位置,分别在其左右创建一个与自身相同的摄像机,且让这两个摄像机间的距离等于瞳间距,再对其分别进行渲染,就能生成立体图像对了。设瞳间距为6.5cm的情况下,在3DS Max中采用系统单位设置,将单位设置为mm(毫米),并进一步计算出左右两路摄像机的位置。

为了简化基于场景中默认相机派生出左右两路摄像机的计算,同时考虑基于双目立体视觉原理,我们假设摄像机的类型为目标摄像机。在3DS Max软件环境新建1个名称为Camera001的目标摄像机,在透视图窗口查看的效果如图1所示。

图1 创建目标摄像机在透视图窗口的效果图 

我们进一步可以在如图2所示的“按名称选择”的对象窗口中看到,场景中已自动生成了“Camera001”和“Camera001.Target”等2个目标对象。

选择3DS Max的MAXScript菜单新建一个MAXScript脚本文件,在该新建脚本窗口中分别输入“MYMCamera001.pos”、“MYMCamera001.Target.pos”并执行,可以查看到“Camera001”和“Camera001.Target”等2个目标对象的位置分别为[-1.52098,-54.8888,0]和[24.709,35.2392,0]。由此可见,目标摄像机Camera001的视线在场景中表现为从源点[-1.52098,-54.8888,0]到目标点[24.709,35.2392,0]的向量。

图2 “按名称选择”的对象窗口 

在3DS Max场景制作和编辑过程中,需要设置合适的视野(FOV)和镜头(Lens)便于对场景中目标对象的展示。

3.2左右两路目标摄像机位置的计算公式

在已经建好的三维场景中,对选定的目标摄像机的视图进行立体效果的呈现需要依据汇聚模型。在原目标摄像机的左右分别创建两个与原摄像机相同的目标摄像机,并且使这两个摄像机间的距离,即基线长度等于瞳间距,用于模拟人的双眼。让新创建的左摄像机、右摄像机与原摄像机的目标点相同遵循汇聚模型的视线汇聚原则。

由于垂直视差不利于图像对的合成,且在大于一定限度时会给观看者带来不适。为此,我们在设置左右目标摄像机的位置时应避免垂直视差的出现,只考虑水平视差。经验证,要保证生成的立体图像对不会产生垂直视差,需要原场景中出现在立体图像对中的点在图像对中处于同一水平位置。为此新增的左右目标摄像机的Z坐标与原目标摄像的Z坐标相同。

图3为3DS Max场景中的左右目标是相机位置计算原理图,其中投影面与XOY面垂直。O为场景文件中的一个目标摄像机,坐标为(xo,yo,zo),L与R分别是创建在摄像机O的两侧的两个与O完全相同的目标摄像机,设其坐标分别为(xl,yl,zl)和(xr,yr,zr)。T为摄像机O的目标点,坐标为(xt,yt,zt),同时也是摄像机L与R的目标。

图3 L与R位置计算原理图 

(xt-xo)(xl-xo)+(yt-to)(yl-yo)=0

(xl-xo)2+(yl-yo)2=(S/2)2

(xo,yo,zo)与(xt,yt,zt)已知,可以通过获取摄像机O与目标点T的坐标得到。

为此,我们在3DS Max场景中获取立体图像对以真实世界中成人的平均瞳间距(约65mm)为基线长度设置。

3.3生成左右两路摄像机的MaxScript脚本流程

本文称场景中待参照的目标摄像机为基准摄像机,下同。以目标摄像机Camera1为基础,当采用双目立体视觉原理创建左右两路摄像机时,需要考虑汇聚模型的约束条件。设创建的左右两路摄像机名称为CamL和CamR,瞳间距为65mm。

(1)基于基准摄像机计算左右路摄像机参数的方法

1)读取基准摄像机起始点的pos(空间位置)、基准摄像机目标点的pos;

2)左路摄像机起始点的空间坐标CamL.pos和右路摄像机起始点的空间坐标CamR.pos由公式(1)计算得到;

本论文对六种数字信号调制识别技术进行研究,包括幅度键控调制(ASK),相移键控调制(PSK),频移键控调制(FSK)。使用MATLAB软件仿真,对随机二进制信号进行识别,从检测信号里分别得到了2ASK、4ASK、2PSK、4PSK、2FSK、4FSK信号。添加高斯噪声来模拟信号中带有的噪声,然后需要对调制信号进行识别,识别算法采用了高阶累积量理论,并详细介绍了高阶累积量的定义与公式,然后对各个调制过的信号的高阶累积量进行计算,先计算二阶、四阶、六阶累积量的值以后,再把各计算值的比值作为特征参数来识别数字信号。

3)新生成的左路摄像机目标点、右路摄像机目标点的空间坐标和基准摄像机目标点的空间坐标保持相同,即:

CamL.Target.pos=Camera001.Target.pos

CamR.Target.pos=Camera001.Target.pos

(2)生成左右两路摄像机的MaxScript脚本流程

根据公式(1)编写了MaxScript脚本,实现了基于目标摄像机的位置和属性自动生成左右两路摄像机。设待处理的3D场景中目标相机名称为CameraTarget,运行该脚本后将自动生成名称为CamL和CamR的左右两路摄像机。其中,NumFrames是场景中时间轴的设置参数,即总帧数;i为循环变量,初始值为0。该脚本的处理流程如图4所示。

如图4所示,该脚本的流程主要步骤如下:

1)载入场景;

2)读取基准摄像机的名称,新建左路目标摄像机和右路目标摄像机。其中左路目标摄像机和右路目标摄像机在类型、镜头等基本参数设置上和基准摄像机保持一致;

3)逐帧执行“(1)基于基准摄像机计算左右路摄像机参数的方法”循环体,直至计算到该场景的最后1帧;

4)导出左右两路摄像机的名称到配置文件;

5)将增加了左右两路摄像机的当前场景另存为新的场景文件。

图4 生成左右两路摄像机的MaxScript脚本流程 

3.4渲染生成左右两路视频

3DS Max提供了两种常用的渲染方式:第一种是人工方式打开该工具在菜单中点击“渲染”按钮;第二种方式是基于命令行的渲染应用程序。第二种方式无需启动3DS Max带界面的应用程序,可用于动漫场景的批处理渲染和大规模的应用部署。在3DS Max 安装目录的“3dsmaxcmd.exe”是3ds Max提供的命令行渲染应用程序,通过设置相关渲染参数可以实现对指定场景文件的渲染输出。

为了增强程序的可移植性,适用于3DS Max软件不同版本的渲染,需要通过查找注册表[7]获取3DS Max的安装路径,然后通过命令行方式实现渲染输出。

对指定3D场景文件,支持渲染参数的命令行渲染格式如下:

MaxCommand=3dsmaxcmd.exe-continueonerror-osaveName-cam:cam-start:framestart-end:frameend-w:width-h:heightSourceName;

为了尽可能地减少用户与程序的交互性和因缺少第三方插件或贴图文件而造成的程序终止情况,可以增加“-continueonerror”命令来增强渲染计算程序的健壮性,从而更为有效的确保渲染的正常运行,确保即使缺少第三方插件或者贴图文件依然继续执行渲染程序而不会终止;“o”参数指定渲染输出文件的路径及名称;“cam”参数指定选择作为视域的摄像机名称;“start”参数指定渲染的起始帧;“end” 参数指定渲染的结束帧;“w”参数指定渲染输出图片序列/视频的水平像素值;“h” 参数指定渲染输出图片序列/视频的垂直像素值;“SourceName”表示渲染源文件的路径及名称。

以3D场景“D:RenderingHouse.max”为例,不指定“cam”参数时,将对指定相机或默认视域执行渲染计算。通过输入命令行“C:Program FilesAutodesk3ds Max 2011>3dsmaxcmd.exe -continueonerror -o D:Rendering Output enderhouse001.jpg -start:10 -w:1024 -h:768 D:RenderingHouse.max”即可顺利实现渲染。整个渲染过程如图5所示。

图5 通过命令行方式实现渲染 

如前所述,“camL ”和“camR”是“3.3生成左右两路摄像机的MaxScript脚本流程”部分创建的左右眼摄像机的名称,为此,参照上述命令行代码,分别在“3dsmaxcmd.exe”命令后添加“-cam camL”、“-cam camR”,同时指定渲染输出文件为“C:TestHandV.avi”、“C:TestHandP.jpg”,可实现对左右两路视频或图片序列的渲染输出。

查看文件保存的路径C:TestHandP.jpg,找到渲染出来的三个左路图像序列与三个右路图像序列,名称格式分别为HandEyePL000×和HandEyePR000×,如图6所示。

图6 Test文件夹中生成的图像序列 

查看文件保存的路径C:TestHandV.avi,找到渲染出来的左路与右路视频,名称分别为HandVL.avi和HandVR.avi,如图7所示。

图7 Test文件夹中生成的视频 

4 结论

本文基于双目立体视觉原理,针对3D场景采用Max Script脚本预处理生成了模拟人眼的左右两路摄像机,设计了立体视频的自动生成方案,并进一步分别以左右两路摄像机作为视域进行了渲染输出,渲染输出模拟人眼的左右两路视频,作为3D立体视频的有益补充。

[1]李伟,孙军,王兴东,孙思慧.基于集群计算的3D数字电影制作方案设计[J].电视技术,2011,08:45-48.[2]仉雨平.浅谈电影《阿凡达》中科技技术的运用[J].2010,08:77.

[3]肖康.浅析制作3D 电影的技术方法[J].数字技术与应用,2011,08:185.

[4]李志永.立体视觉基础[J].现代电影技术,2011,01:52-55.

[5]蔡辉跃,张健,曹雪虹.基于光线跟踪的虚拟场景立体图像对视差研究[J].南京工程学院学报(自然科学版),2012,04:17-24.

[6]杨珺,王继成,刘然.立体图像对的生成[J].计算机应用,2007,09:2106-2109.

[7]倪显利.注册表及其管理类的开发和设计[J].电脑编程技巧与维护,2010,05:38-47.

(责任编辑:马玉凤)

Development of Binocular Stereo Vision Principle-Based Software of Automatically Creating Stereoscopic Videos

HONG Zhi-guo,WANG Yong-bin,SHI Min-yong

(School of Computer,Faculty of Science and Engineering,Communication University of China,Beijing,100024)

Binocular Stereo Vision Principle-based rendering is a frequently-used way of creating three-dimension scene-oriented stereoscopic videos.However,the operations of controlling the positions of left camera and right,setting rendering parameters often require being setup manually.Consequently,generating stereoscopic videos with better effect needs repetitive procedures of editing scenes and rendering which affects the efficiency of making stereoscopic videos.For this,in the paper based on binocular stereo vision Principle,the software of creating stereoscopic videos automatically for 3DS Max-made scene file is developed.Firstly,the three-dimension scene is preprocessed with MaxScript i.e.the embedded language of 3DS Max,which adds left virtual camera and right virtual one by simulating human’s left eye and right one.Furthermore,two videos of field of vision of left eye and right one are created via command-line rendering by taking left virtual camera and right virtual one as the viewpoints respectively.These videos are the origin materials of stereoscopic videos.

stereo vision;script;3D;virtual camera;rendering

2015-12-18

国家科技支撑计划课题(2012BAH37F02);中国传媒大学优秀中青年教师培养工程(YXJS201508);中国传媒大学理工科规划项目(3132015XNG1504)

洪志国(1977-),男(汉族),湖北黄冈人,中国传媒大学副教授,博士.E-mail:hongzhiguo@cuc.edu.cn

TP311.1

A

1673-4793(2016)03-0012-06

猜你喜欢
右路视差双目
左路和右路
霜 降 苏美玲
基于视差优化的立体匹配网络
基于自适应窗的立体相机视差图优化方法研究
视差边缘优化的SGM 密集深度估计算法∗
基于双目测距的卡尔曼滤波船舶轨迹跟踪
基于分割树的视差图修复算法研究
基于双目视觉图像的长度测量方法
左路和右路
一种双目立体视觉相机标定方法