APP下载

基于LED 背景墙分时复用的摄影机注册跟踪方法

2024-02-06程绪琪赵建军

现代电影技术 2024年1期
关键词:背景墙角点位姿

程绪琪 赵建军 陈 军

1.北京电影学院中国电影高新技术研究院,北京 100088

2.北京电影学院影视技术系,北京 100088

1 引言

近年来,LED 显示、实时渲染、动作捕捉等多种技术相融合的LED 虚拟摄制,已成为电影虚拟摄制的新趋势。其利用LED 背景墙取代实景和蓝幕/绿幕,利用摄影机跟踪系统捕获真实摄影机的位姿,驱动实时渲染引擎中的虚拟摄影机同步运动,将透视正确的内视锥画面实时渲染到LED 背景墙上,以实现摄影机内视效拍摄。

摄影机跟踪系统是LED 虚拟摄制系统的关键组成部分,它利用计算机视觉(CV)、光学等相关技术,对真实摄影机的空间位置、运动姿态等外参,以及焦点、焦距、光圈等内参的变化进行记录,将数据同步传送至实时渲染引擎中的虚拟摄影机,使得内视锥能够产生跟摄影机运动一致的变化。在实际应用中,对于跟踪系统的要求往往强调定位精确度、稳定性、鲁棒性和用户创作的自由度[1]。

LED 虚拟摄制系统中常用的摄影机跟踪方案,需要依靠专用设备实现,并且会受到不同因素的干扰,例如遮挡、反光物、空间受限、动态环境光照等。在实际拍摄中,摄影师操作习惯、摄影机上装配的其他部件、现场置景、录音挑杆、遮扉柔光板等,会对跟踪设备造成遮挡,跟踪效果会受到不同程度的干扰。基于红外视觉的由外向内跟踪方案,如Vicon、Opti‐Track 等,架设在LED 背景墙上的红外摄像头一旦入画,就需要额外的后期处理进行移除,场地中的反光物、强光源等会对被动式标记点的识别产生干扰。基于红外激光的由外向内跟踪方案HTC Vive 目前支持的最大跟踪范围是由4 个基站围成的10m×10m 空间[2];需要借助外部反光标记的由内向外跟踪方案RedSpy,只有标记在视野范围内时才能够正常工作。基于双目视觉的由内向外跟踪方案Ncam,则需要定位用的双镜头所接收的场景中光线均匀,且有明显的分界线能够识别出物体的自然特征,动态环境光照会对其跟踪效果产生负面影响。行业需要探索一种更为简单可行的方式,以适应LED 虚拟摄制的不同需求。

本文提出了一种基于LED 背景墙分时复用的摄影机注册跟踪方法,无需额外的跟踪设备,而是充分利用已有设备LED 背景墙高刷新率的优势,以及二维码标识用于摄影机位姿估计较强的鲁棒性,在LED 背景墙上分时显示二维码标识与虚拟场景,利用计算机视觉相关原理对摄影机采集到的含有二维码标识的画面进行分析,计算出真实摄影机相对于LED 背景墙的位置及摄影机姿态信息,赋给虚拟摄影机进行内视锥的同步渲染,从而实现摄影机的注册与跟踪。

2 相关背景介绍

从流程来看摄影机跟踪可以概括为三个环节:标定、注册和跟踪。它们相互关联、紧密协作,共同维系着摄影机跟踪系统的运作。

2.1 标定

标定是指确定摄影机的焦点、焦距、光圈、镜头畸变等内参[3],保证虚拟摄影机的画面呈现能与真实摄影机相一致。LED 虚拟摄制中常用的摄影机标定,以棋盘格、对称圆形及非对称圆形特征图、ChA‐rUco 板等作为参考物,采集一定数量的图像,通过分析计算得到摄影机的内参,Calib.io 网站详细介绍了每种参考物的优缺点,以便根据实际需求选用合适的标定方法[4]。

2.2 注册

注册是指将虚拟世界中的坐标原点、坐标系,与真实世界中的坐标原点、坐标系进行匹配[5],确保真实摄影机与LED 背景墙的距离,同虚拟摄影机与虚拟场景中LED 背景墙的距离完全相等。目前对于摄影机与LED 背景墙相对位置的注册还未有较为统一的成熟方案,在利用全站仪、激光扫描等方式获得LED 背景墙的三维模型后,定义摄影机跟踪系统的原点,测量该点到LED 背景墙的距离,再通过手眼标定[6]、人工测量,或者虚幻引擎(Unreal Engine,UE)镜头文件中计算节点偏移的算法[7],获得跟踪设备相对于摄影机光心的偏移,将跟踪设备的位姿数据转换为摄影机的实际位姿数据,完成注册。

2.3 跟踪

跟踪可以看作是动态注册,将采集到的摄影机空间位置信息X、Y、Z 和姿态信息横摇(Pan)、俯仰(Tilt)、横滚(Roll)六自由度的外参,与内参和时间码信息一起传送至虚拟摄影机,确保能够通过实时渲染引擎,在LED 背景墙上渲染出透视关系正确、运动效果完全一致的内视锥画面。从实现原理来看,摄影机跟踪系统可以分为由外向内跟踪和由内向外跟踪[8]。

2.3.1 由外向内跟踪

由外向内跟踪需要在拍摄区域架设多个红外摄像头或激光基站,共同围成一个空间,对安装在真实摄影机上的跟踪设备进行跟踪,从而得到摄影机位姿信息,常用的方案有Vicon、OptiTrack、HTC Vive等。由外向内跟踪可以通过在空间中架设更多的跟踪器来提高系统精度,扩大跟踪范围,但也会因此产生更多成本。此外跟踪设备被过多遮挡也会导致跟踪的丢失,具体到被动式标记点的摄影机跟踪系统还会受到拍摄场景中反光物体等的干扰。

2.3.2 由内向外跟踪

由内向外跟踪需要将基于视觉、惯性或混合式的传感器固定在摄影机上,利用算法实时计算出摄影机的位姿,常用的方案有Ncam、Airtrack、Mo‐Sys、RedSpy 等。由内向外跟踪体积较小方便携带,不需要外部架设,没有空间限制,但对于环境的可识别性要求较高,容易受到光线变化以及特征被遮挡的影响。

本文提出的基于LED 背景墙分时复用的摄影机注册跟踪方法属于由内向外跟踪,不需要额外的传感器,直接利用LED 背景墙分时显示二维码标识与虚拟场景,对摄影机采集到的含有二维码标识的画面进行处理,计算得到摄影机位姿信息。其原理相对简单,计算复杂度较低,对处理能力要求较低,具有较好的实时性和准确性;且能够应对复杂拍摄环境中的遮挡以及光线变化,具备较高的鲁棒性。

3 基于LED 背景墙分时复用的摄影机注册跟踪方法

本文提出的基于LED 背景墙分时复用的摄影机注册跟踪方法,具体流程如图1 所示,将同步锁相(Genlock)信号输送给LED 视频处理器、渲染主机、摄影机以保证它们帧相位的一致性,将它们的帧率也设置为一致,在LED 背景墙上分时显示二维码标识与虚拟场景,即一帧显示二维码标识,一帧显示虚拟场景,将摄影机采集到的画面实时传送回主机,对其中含有二维码标识的画面进行检测估计,将计算得到的摄影机位姿数据赋给虚拟摄影机用于虚拟场景中内视锥的正确渲染。

图1 分时复用摄影机跟踪流程图

本方法具体可分为以下几个模块:时码同步信号控制模块、二维码标识生成模块、实时渲染模块、LED 显示模块、摄影机模块、二维码标识检测估计模块、视频均匀抽帧模块。

3.1 时码同步信号控制模块

时码同步信号控制模块将同步信号发生器作为主时钟,提供Genlock 信号给LED 视频处理器、实时渲染主机以及摄影机,将三者的帧率设为同一值,确保LED 背景墙的帧率和帧相位、实时渲染引擎的帧率和帧相位、摄影机的帧率和帧相位全部统一,避免拍摄LED 背景墙时产生扫描线等问题[9]。

3.2 二维码标识生成模块

二维码标识即方形基准标识,例如AprilTag、AR‐Tag、ARToolKit、ArUco 等,算法计算成本较低且可以在较远距离检测到标识[10],可用于跟踪、识别、定位等任务。

以开源跨平台计算机视觉库OpenCV 提供的ArUco 标识[11]为例(图2),它由外部的黑色边框和内部的二进制矩阵组成,其黑色边框用于在图像中快速检测到标识,边框的四个角点能够提供足够的对应关系来计算摄影机的位姿,识别速度快,但即使在亚像素[12]细化后,角点精度也不太高;其内部二进制矩阵的大小由标识大小决定,例如6×6 大小的标记就由36 位二进制数组成二进制矩阵,二进制矩阵与标识的ID 一一对应,不同的ID 可用于错误检测和自动纠正,因此具有很强的鲁棒性,在部分遮挡时一样可以实现检测[13]。

图2 ArUco 标识示例

ArUco 标识的生成可以通过编写C++/Python 代码调用OpenCV[14]库、虚幻引擎(UE)的Led Wall Cali‐bration 插件[15],以及在线生成网站(例如calib.io[16]、chev.me[17]等)来实现。其中,字典作为生成标识所需要的重要参数,是指特定应用中使用到的标识集合,常见命名为DICT_nXn_m,n 代表标识的大小(包括4×4、5×5、6×6、7×7),m 代表标识的数量(包括50、100、250、1000)。字典的选择要与LED 背景墙的物理面积、分辨率与面板数量等相匹配,如果LED 背景墙规模较大面板数量较多时,则可以选择每隔一定数量的面板生成一个标识。若是每隔一个面板生成一个标识,便组成了ArUco 加棋盘格(Chessboard)的ChArUco 标识(图3)[18],棋盘格的每个角点周围都有两个黑色方格,在亚像素细化后能够具备非常高的角点精度,因此ChArUco 既能继承ArUco 抗遮挡的优越性,又能提高角点精度。

图3 ChArUco 标识

3.3 实时渲染模块

实时渲染模块接收时码同步信号控制模块发出的Genlock 信号,将二维码标识与虚拟场景作为两种不同的显示状态,在实时渲染引擎中循环切换,输出至LED 显示模块。同时虚拟摄影机继承二维码标识检测估计模块获得的真实摄影机的位姿信息,实现虚拟场景中内视锥的渲染,使其能够符合真实摄影机的运动,拥有正确的透视关系。

3.4 LED 显示模块

LED 显示模块接收时码同步信号控制模块发出的Genlock 信号,接收实时渲染模块得到的渲染画面,控制每颗LED 灯珠独立发光进行LED 背景墙上二维码标识与虚拟场景的分时显示。

3.5 摄影机模块

摄影机在接收时码同步信号控制模块发出的Genlock 信号、设定帧率与系统统一的同时,要将采集到的画面实时流送到实时渲染引擎中,以供二维码标识检测估计模块使用。摄影机拍摄得到二维码标识画面与摄影机内视效画面分时显示的序列,传递至视频均匀抽帧模块提取所需的摄影机内视效画面。

3.6 二维码标识检测估计模块

对流送到实时渲染引擎中的摄影机采集到的画面进行检测,分析其中含有二维码标识的画面,计算得到真实摄影机的位姿信息,同时将得到的位姿赋给实时渲染引擎中的虚拟摄影机,用于内视锥的实时渲染。

二维码标识检测估计的原理步骤包括:

(1)将拍摄到的图像转为灰度图,采用局部自适应阈值方法提取轮廓。通过算法进行轮廓提取与多边形拟合,抛弃无法近似为四顶点的多边形;

(2)提取二进制图像区域并获得其中的信息,具体包括:计算单应性矩阵消除投影;基于灰度直方图对图像阈值分割得到二值化图像;将二值化图像划分为规则网格,为其分配0 或1(黑色为0,白色为1),直到检测到全0的边界为止;

(3)将二进制图像绕中心旋转四次,与字典中所有的标识一一比对,以确定哪些是标识哪些是环境的一部分;

(4)对标识的边缘采用线性回归,计算交点,即角点位置;通过算法迭代使角点的重投影误差最小化[19];确定四个角点的顺序,通过角点的图像坐标求解PnP(Perspective‐n‐Point)问题计算出标识在相机坐标系下的rvec旋转向量和tvec 平移向量;

(5)通过旋转向量和平移向量进一步计算得到摄影机在世界坐标系下的位姿信息。

3.7 视频均匀抽帧模块

由于摄影机拍摄得到的素材是二维码标识画面与摄影机内视效画面分时显示的,因此需要进行均匀抽帧,分离出所需要的摄影机内视效画面,这一操作可以通过OpenCV、FFmpeg[20],或者Python 的de‐code库[21]等相关代码来实现,也可以在剪辑软件中实现,以DaVinci Resolve 为例,将时间线的帧率设为拍摄素材帧率的一半,导入拍摄素材,变速处理选择最近帧即可。

4 具体实现方案

本文在实验环境下对提出的基于LED 背景墙分时复用的摄影机注册跟踪方法进行了实现,具体操作如下:

4.1 设置整个系统的时码与同步

如果成片所需要的帧率为nFPS,则可以利用时码同步器作为整个系统的时间码与Genlock 信号的总控制来源,Timecode 时码与Genlock 信号均设置为2nFPS,将它们分三路信号接入LED 视频处理器、实时渲染主机以及摄影机,本实验中将帧率统一在60FPS。

4.2 获取实时渲染引擎显示内容

(1)搭建虚拟场景

LED 虚拟摄制的虚拟场景可以通过三维建模得到,也可以通过全景图像采集获得。本实验利用UE所提供的nDisplay 模板项目作为虚拟场景,新建nDisplay 配置,添加与LED 背景墙物理尺寸与位置相一致的网格体,进行相关设置得到正确的输出映射。

(2)生成ArUco 标识

本实验使用的LED 背景墙是由12×8 共96 块洲明UGN2.6 面板组成的平面,每块面板物理尺寸为250mm×250mm,分辨率为96×96,整面背景墙的物理尺寸为3m×2m,分辨率为1152×768。在UE 中启用Led Wall Calibration 插件,ArUco 生成选项窗口的各项参数设置如下:纹理宽度和高度分别填1152 和768,ArUco 字典选用DICT_5X5_100,起始ID 设为1,Place Modulus 放置模数设为1。最终生成96 个ArUco 标识,如图4 所示,ID 为1 到96,这样每块LED面板上都会显示一个ArUco 标识用于检测估计,从而加强系统抗遮挡的能力。

图4 标识生成结果

4.3 设置实时渲染引擎显示方式

利用UE 进程中每帧调用的简单事件Event Tick,以及能在两个执行输出间切换的FlipFlop 节点,对ArUco 标识的可见性进行循环往复的改变。因为系统统一帧率为60FPS,这样在一秒钟内,一帧显示ArUco 标识,一帧显示虚拟场景,各交替显示30帧。

4.4 设置LED 背景墙显示方式

利用Switchboard 启动nDisplay,实现LED 背景墙上ArUco 标识与虚拟场景的分时显示,如图5所示。

图5 LED 背景墙两种显示状态

4.5 设置摄影机拍摄与输出

将摄影机信号通过SDI 线输出至采集卡,在UE中启用Media Framework Utilities 插件,和本实验用采集卡所对应的Blackmagic Media Player 插件,新建媒体束,选择与摄影机分辨率、帧率相一致的信号源,将摄影机画面实时流送至UE 内部。

4.6 二维码标识的检测与估计

(1)标定

在对摄影机进行位姿估计前,应先对摄影机的焦距、光圈、对焦,以及镜头畸变等内参进行标定,具体操作可以在UE 中新建镜头文件,使用棋盘格作为参考物从不同角度拍摄多张图像,计算得到上述内参。

(2)位姿估计

UE5.0 引入了开源跨平台计算机视觉库OpenCV作为内置插件,并添加了新的蓝图节点,可用于棋盘格跟踪和ArUco 标识跟踪,本实验便利用OpenCV ArUco Detect Markers 节点对摄影机进行位姿估计,具体蓝图如图6 所示。将能够获取媒体束材质的变量作为OpenCV ArUco Detect Markers 节点的输入,从而对摄影机画面中的ArUco 标识进行检测;检测字典选择5×5,字典大小选择100,与生成ArUco 标识时选用的字典保持一致;测量LED 背景墙上单个ArUco标识的边长(以米为单位)填入标识长度中;根据标定环节得到的镜头文件将对应数字填入镜头畸变参数中;勾选位姿估计以保证该节点能输出每个标识相对于摄影机的位姿信息。图7 展示了实际运行过程中该节点输出数组的具体内容,包括检测到的标识总数,每个标识的ID、4个角点的位置、标识坐标系到相机坐标系的旋转平移缩放数据。

图6 OpenCV ArUco Detect Markers 节点的使用

图7 OpenCV ArUco Detect Markers 节点的输出

由于UE 中每个标识在世界坐标系中的位置已知,因此利用OpenCV ArUco Detect Markers 节点输出的标识坐标系到相机坐标系的旋转平移缩放数据,便可以反算得到摄影机的位姿信息。需要说明的是,由于直接得到的旋转数据是以四元数的形式表示的,所以要先通过Break OpenCV ArUco Detect Markers 节点得到位姿后,继续Break Transform 拆分变换,才可以得到欧拉角描述下的Roll、Pitch、Yaw 旋转数据,它们分别对应摄影机的Roll、Tilt、Pan,且其中的Yaw 和Roll 数值是以180°(‐180°)为基准的,需要经过一定的换算才可以得到摄影机的旋转数据。利用标识在世界坐标系中的位置数据和平移数据的差确定一个点,再利用Rotate Vector 节点将该点绕标识进行三次旋转,便得到了摄影机的X、Y、Z 位置数据。将得到的摄影机旋转数据和位置数据赋给nDis‐play 配置中的ICVFX Camera,便可实现摄影机跟踪,图8 为真实摄影机画面与检测估计得到的虚拟摄影机画面的一组对照。

图8 真实摄影机画面(上)、虚拟摄影机画面(下)

4.7 视频均匀抽帧

本实验选用FFmpeg 对摄影机拍摄得到的视频进行均匀抽帧,抽取原视频的双数帧输出为新视频的代码为:

ffmpeg ‐i Input.mov ‐vf "select=mod(n,2)" ‐vsync 0 Output.mov

如果要抽取单数帧,将"select=mod(n,2)"改为"select=not(mod(n,2))"即可,图9 展示了均匀抽帧后的结果。

图9 均匀抽帧后的视频

5 测试与分析

为探究本文提出的基于LED 背景墙分时复用的摄影机注册跟踪方法的实用性,特针对决定该方法性能的二维码标识检测估计模块设计了准确性实验,并对其鲁棒性进行分析。在摄影机画面上对检测到的标识进行可视化,显示其角点、外边框、ID 及坐标轴,利用Print String 节点显示虚拟摄影机的位置数据,利用镜头试拍录制器录制虚拟摄影机的运动效果,从而能够以直观目测加以数据支撑的方式进行实验。

5.1 数据预处理

在正式测试开始之前,发现摄影机的位置数据会出现如图10所示相差过大且时间上毫无规律的抖动,其原因在于前文所提到的ArUco 标识的角点精度不如棋盘格,在检测过程中对角点附近像素的判定不确切,导致OpenCV ArUco Detect Markers 节点输出的旋转平移数据出现异常值,被后续计算过程放大造成明显抖动。

图10 数据抖动

针对上述问题,选择对标识进行适当放大,每2×2 块LED 面板放置一个标识,并对数据采用限幅均值滤波法进行处理。先将相邻帧之间OpenCV ArUco Detect Markers 节点输出的数据限制在某个差值之内,如超出该差值则当前帧的数据无效,再向前取有效的固定数量帧的数据,对它们进行算术平均运算作为当前帧的数据,如此便能有效减弱数据抖动(图11)。

图11 处理后的数据

5.2 准确性测试

准确性指的是多次测量平均值与真值相符合的程度,能够反映测量过程中偶然误差的大小。对于准确性测试,本实验选取了摄影机在实际拍摄应用中常见的运动状态,对它们的跟踪数据进行分析。图12 展示了摄影机静止约一分钟状态下的曲线,出现关键帧的地方表示这一帧的位置较上一帧出现差异,直线表示位置不变,其中关键帧与基准直线所代表的摄影机位置间最大相差约2cm,这一数值对于实际拍摄应用中摄影机距LED 背景墙的距离而言,其影响可以忽略不计。图13 展示了摄影机在与LED背景墙垂直和水平两个方向上移动时的曲线,图14则展示了摄影机进行横摇和俯仰运动时的曲线,它们均符合摄影机的运动特征,过程中出现的波动表示本方案在算法上还有很大提升空间,未来仍需进一步研究优化。

图12 静止状态曲线

图13 垂直移动(左)、水平移动(右)

图14 横摇(上)、俯仰(下)

5.3 鲁棒性分析

鲁棒性指的是系统存在随机干扰时仍保持其性能的不敏感性。因为二维码标识内部的二进制矩阵具有唯一可识别性,每个标识之间都相互独立,只要拍摄画面中能有一个完整的标识,便可以利用其世界坐标以及四个角点的位置计算出摄影机的位姿信息,因此本方法能够应对拍摄现场灯光器械、道具置景等带来的局部遮挡问题,具备较强的鲁棒性。

本文提出的基于LED 背景墙分时复用的摄影机注册跟踪方法,其优势在于:(1)较强的鲁棒性,能适应实际拍摄中复杂的环境变化,在遮挡众多时依然能够保证摄影机跟踪工作的正常进行;(2)无需在拍摄场地架设额外的红外摄像头、激光基站等,无需在摄影机上安装反光点、传感器、鱼眼镜头等额外的跟踪设备,也无需测量跟踪设备到摄影机光心的偏移,仅依靠摄影机拍得的画面,就能够计算出摄影机相对于LED 背景墙的位姿信息,简化了LED 虚拟摄制的构成,降低了成本。

本方法也存在一定的局限性:(1)当改变景深导致摄影机采集到的标识变模糊时,也会出现部分标识检测不到甚至标识完全检测不到的情况,最终导致跟踪失效,比如图15 中原本含有4 个完整的标识,却仅能检测到1个来维持跟踪,因此本方法更适用于成像器件较小、景深较大的设备,这在一定程度上限制了影像创作的自由度;(2)摄影机拍得的画面需要进行进一步的抽帧才能得到最终的摄影机内视效画面;(3)LED 背景墙分时复用所造成的高频闪烁可能会对现场主创人员带来感官不适,可以通过调节标识的整体亮度来减弱这种不适,但无法消除不适。

图15 景深外的模糊现象所带来的部分标识无法检测

6 总结

本文提出的基于LED 背景墙分时复用的摄影机注册跟踪方法,是LED 虚拟摄制系统中摄影机跟踪方案的有效补充,在LED 背景墙上分时显示二维码标识与虚拟场景,对其中的二维码标识画面进行检测估计,计算出真实摄影机的位姿信息传递给虚拟摄影机,渲染出透视关系正确、运动与真实摄影机相匹配的内视锥画面。本方法充分利用了LED 背景墙高刷新率的优势,抛开了各种产品级的跟踪设备,将摄影机的高效跟踪从依赖专用设备转变成依赖算法,减少了遮挡对跟踪效果带来的负面影响,同时减少了LED 虚拟摄制系统的硬件支出,简化了LED 虚拟摄制系统的构成。

摄影机跟踪系统作为LED 虚拟摄制系统的关键组成之一,是连接真实世界与虚拟世界的桥梁。本文所设计的实现方案,在准确性等性能上仍然有很大的提升空间,在使用上还有一些限制,未来将继续改进,与已有系统取长补短,在实际拍摄中根据应用场景选用合适的摄影机跟踪系统,持续推动LED 虚拟摄制的发展应用,为电影创作提供更多的可能性。

猜你喜欢

背景墙角点位姿
电视背景墙装修的常见误区
基于FAST角点检测算法上对Y型与X型角点的检测
室内背景墙及材料的设计与分类
基于边缘的角点分类和描述算法
基于共面直线迭代加权最小二乘的相机位姿估计
基于CAD模型的单目六自由度位姿测量
基于圆环模板的改进Harris角点检测算法
曼妙唯美梦想家 8个超美沙发背景墙
小型四旋翼飞行器位姿建模及其仿真
客厅背景墙设计攻略