程緒琪 趙建軍 陳 軍
1.北京電影學院中國電影高新技術研究院,北京 100088
2.北京電影學院影視技術系,北京 100088

近年來,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 背景墻的位置及攝影機姿態信息,賦給虛擬攝影機進行內視錐的同步渲染,從而實現攝影機的注冊與跟蹤。
從流程來看攝影機跟蹤可以概括為三個環節:標定、注冊和跟蹤。它們相互關聯、緊密協作,共同維系著攝影機跟蹤系統的運作。
標定是指確定攝影機的焦點、焦距、光圈、鏡頭畸變等內參[3],保證虛擬攝影機的畫面呈現能與真實攝影機相一致。LED 虛擬攝制中常用的攝影機標定,以棋盤格、對稱圓形及非對稱圓形特征圖、ChA‐rUco 板等作為參考物,采集一定數量的圖像,通過分析計算得到攝影機的內參,Calib.io 網站詳細介紹了每種參考物的優缺點,以便根據實際需求選用合適的標定方法[4]。
注冊是指將虛擬世界中的坐標原點、坐標系,與真實世界中的坐標原點、坐標系進行匹配[5],確保真實攝影機與LED 背景墻的距離,同虛擬攝影機與虛擬場景中LED 背景墻的距離完全相等。目前對于攝影機與LED 背景墻相對位置的注冊還未有較為統一的成熟方案,在利用全站儀、激光掃描等方式獲得LED 背景墻的三維模型后,定義攝影機跟蹤系統的原點,測量該點到LED 背景墻的距離,再通過手眼標定[6]、人工測量,或者虛幻引擎(Unreal Engine,UE)鏡頭文件中計算節點偏移的算法[7],獲得跟蹤設備相對于攝影機光心的偏移,將跟蹤設備的位姿數據轉換為攝影機的實際位姿數據,完成注冊。
跟蹤可以看作是動態注冊,將采集到的攝影機空間位置信息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 背景墻分時顯示二維碼標識與虛擬場景,對攝影機采集到的含有二維碼標識的畫面進行處理,計算得到攝影機位姿信息。其原理相對簡單,計算復雜度較低,對處理能力要求較低,具有較好的實時性和準確性;且能夠應對復雜拍攝環境中的遮擋以及光線變化,具備較高的魯棒性。
本文提出的基于LED 背景墻分時復用的攝影機注冊跟蹤方法,具體流程如圖1 所示,將同步鎖相(Genlock)信號輸送給LED 視頻處理器、渲染主機、攝影機以保證它們幀相位的一致性,將它們的幀率也設置為一致,在LED 背景墻上分時顯示二維碼標識與虛擬場景,即一幀顯示二維碼標識,一幀顯示虛擬場景,將攝影機采集到的畫面實時傳送回主機,對其中含有二維碼標識的畫面進行檢測估計,將計算得到的攝影機位姿數據賦給虛擬攝影機用于虛擬場景中內視錐的正確渲染。

圖1 分時復用攝影機跟蹤流程圖
本方法具體可分為以下幾個模塊:時碼同步信號控制模塊、二維碼標識生成模塊、實時渲染模塊、LED 顯示模塊、攝影機模塊、二維碼標識檢測估計模塊、視頻均勻抽幀模塊。
時碼同步信號控制模塊將同步信號發生器作為主時鐘,提供Genlock 信號給LED 視頻處理器、實時渲染主機以及攝影機,將三者的幀率設為同一值,確保LED 背景墻的幀率和幀相位、實時渲染引擎的幀率和幀相位、攝影機的幀率和幀相位全部統一,避免拍攝LED 背景墻時產生掃描線等問題[9]。
二維碼標識即方形基準標識,例如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 標識
實時渲染模塊接收時碼同步信號控制模塊發出的Genlock 信號,將二維碼標識與虛擬場景作為兩種不同的顯示狀態,在實時渲染引擎中循環切換,輸出至LED 顯示模塊。同時虛擬攝影機繼承二維碼標識檢測估計模塊獲得的真實攝影機的位姿信息,實現虛擬場景中內視錐的渲染,使其能夠符合真實攝影機的運動,擁有正確的透視關系。
LED 顯示模塊接收時碼同步信號控制模塊發出的Genlock 信號,接收實時渲染模塊得到的渲染畫面,控制每顆LED 燈珠獨立發光進行LED 背景墻上二維碼標識與虛擬場景的分時顯示。
攝影機在接收時碼同步信號控制模塊發出的Genlock 信號、設定幀率與系統統一的同時,要將采集到的畫面實時流送到實時渲染引擎中,以供二維碼標識檢測估計模塊使用。攝影機拍攝得到二維碼標識畫面與攝影機內視效畫面分時顯示的序列,傳遞至視頻均勻抽幀模塊提取所需的攝影機內視效畫面。
對流送到實時渲染引擎中的攝影機采集到的畫面進行檢測,分析其中含有二維碼標識的畫面,計算得到真實攝影機的位姿信息,同時將得到的位姿賦給實時渲染引擎中的虛擬攝影機,用于內視錐的實時渲染。
二維碼標識檢測估計的原理步驟包括:
(1)將拍攝到的圖像轉為灰度圖,采用局部自適應閾值方法提取輪廓。通過算法進行輪廓提取與多邊形擬合,拋棄無法近似為四頂點的多邊形;
(2)提取二進制圖像區域并獲得其中的信息,具體包括:計算單應性矩陣消除投影;基于灰度直方圖對圖像閾值分割得到二值化圖像;將二值化圖像劃分為規則網格,為其分配0 或1(黑色為0,白色為1),直到檢測到全0的邊界為止;
(3)將二進制圖像繞中心旋轉四次,與字典中所有的標識一一比對,以確定哪些是標識哪些是環境的一部分;
(4)對標識的邊緣采用線性回歸,計算交點,即角點位置;通過算法迭代使角點的重投影誤差最小化[19];確定四個角點的順序,通過角點的圖像坐標求解PnP(Perspective‐n‐Point)問題計算出標識在相機坐標系下的rvec旋轉向量和tvec 平移向量;
(5)通過旋轉向量和平移向量進一步計算得到攝影機在世界坐標系下的位姿信息。
由于攝影機拍攝得到的素材是二維碼標識畫面與攝影機內視效畫面分時顯示的,因此需要進行均勻抽幀,分離出所需要的攝影機內視效畫面,這一操作可以通過OpenCV、FFmpeg[20],或者Python 的de‐code庫[21]等相關代碼來實現,也可以在剪輯軟件中實現,以DaVinci Resolve 為例,將時間線的幀率設為拍攝素材幀率的一半,導入拍攝素材,變速處理選擇最近幀即可。
本文在實驗環境下對提出的基于LED 背景墻分時復用的攝影機注冊跟蹤方法進行了實現,具體操作如下:
如果成片所需要的幀率為nFPS,則可以利用時碼同步器作為整個系統的時間碼與Genlock 信號的總控制來源,Timecode 時碼與Genlock 信號均設置為2nFPS,將它們分三路信號接入LED 視頻處理器、實時渲染主機以及攝影機,本實驗中將幀率統一在60FPS。
(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 標識生成結果
利用UE 進程中每幀調用的簡單事件Event Tick,以及能在兩個執行輸出間切換的FlipFlop 節點,對ArUco 標識的可見性進行循環往復的改變。因為系統統一幀率為60FPS,這樣在一秒鐘內,一幀顯示ArUco 標識,一幀顯示虛擬場景,各交替顯示30幀。
利用Switchboard 啟動nDisplay,實現LED 背景墻上ArUco 標識與虛擬場景的分時顯示,如圖5所示。

圖5 LED 背景墻兩種顯示狀態
將攝影機信號通過SDI 線輸出至采集卡,在UE中啟用Media Framework Utilities 插件,和本實驗用采集卡所對應的Blackmagic Media Player 插件,新建媒體束,選擇與攝影機分辨率、幀率相一致的信號源,將攝影機畫面實時流送至UE 內部。
(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 真實攝影機畫面(上)、虛擬攝影機畫面(下)
本實驗選用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 均勻抽幀后的視頻
為探究本文提出的基于LED 背景墻分時復用的攝影機注冊跟蹤方法的實用性,特針對決定該方法性能的二維碼標識檢測估計模塊設計了準確性實驗,并對其魯棒性進行分析。在攝影機畫面上對檢測到的標識進行可視化,顯示其角點、外邊框、ID 及坐標軸,利用Print String 節點顯示虛擬攝影機的位置數據,利用鏡頭試拍錄制器錄制虛擬攝影機的運動效果,從而能夠以直觀目測加以數據支撐的方式進行實驗。
在正式測試開始之前,發現攝影機的位置數據會出現如圖10所示相差過大且時間上毫無規律的抖動,其原因在于前文所提到的ArUco 標識的角點精度不如棋盤格,在檢測過程中對角點附近像素的判定不確切,導致OpenCV ArUco Detect Markers 節點輸出的旋轉平移數據出現異常值,被后續計算過程放大造成明顯抖動。

圖10 數據抖動
針對上述問題,選擇對標識進行適當放大,每2×2 塊LED 面板放置一個標識,并對數據采用限幅均值濾波法進行處理。先將相鄰幀之間OpenCV ArUco Detect Markers 節點輸出的數據限制在某個差值之內,如超出該差值則當前幀的數據無效,再向前取有效的固定數量幀的數據,對它們進行算術平均運算作為當前幀的數據,如此便能有效減弱數據抖動(圖11)。

圖11 處理后的數據
準確性指的是多次測量平均值與真值相符合的程度,能夠反映測量過程中偶然誤差的大小。對于準確性測試,本實驗選取了攝影機在實際拍攝應用中常見的運動狀態,對它們的跟蹤數據進行分析。圖12 展示了攝影機靜止約一分鐘狀態下的曲線,出現關鍵幀的地方表示這一幀的位置較上一幀出現差異,直線表示位置不變,其中關鍵幀與基準直線所代表的攝影機位置間最大相差約2cm,這一數值對于實際拍攝應用中攝影機距LED 背景墻的距離而言,其影響可以忽略不計。圖13 展示了攝影機在與LED背景墻垂直和水平兩個方向上移動時的曲線,圖14則展示了攝影機進行橫搖和俯仰運動時的曲線,它們均符合攝影機的運動特征,過程中出現的波動表示本方案在算法上還有很大提升空間,未來仍需進一步研究優化。

圖12 靜止狀態曲線

圖13 垂直移動(左)、水平移動(右)

圖14 橫搖(上)、俯仰(下)
魯棒性指的是系統存在隨機干擾時仍保持其性能的不敏感性。因為二維碼標識內部的二進制矩陣具有唯一可識別性,每個標識之間都相互獨立,只要拍攝畫面中能有一個完整的標識,便可以利用其世界坐標以及四個角點的位置計算出攝影機的位姿信息,因此本方法能夠應對拍攝現場燈光器械、道具置景等帶來的局部遮擋問題,具備較強的魯棒性。
本文提出的基于LED 背景墻分時復用的攝影機注冊跟蹤方法,其優勢在于:(1)較強的魯棒性,能適應實際拍攝中復雜的環境變化,在遮擋眾多時依然能夠保證攝影機跟蹤工作的正常進行;(2)無需在拍攝場地架設額外的紅外攝像頭、激光基站等,無需在攝影機上安裝反光點、傳感器、魚眼鏡頭等額外的跟蹤設備,也無需測量跟蹤設備到攝影機光心的偏移,僅依靠攝影機拍得的畫面,就能夠計算出攝影機相對于LED 背景墻的位姿信息,簡化了LED 虛擬攝制的構成,降低了成本。
本方法也存在一定的局限性:(1)當改變景深導致攝影機采集到的標識變模糊時,也會出現部分標識檢測不到甚至標識完全檢測不到的情況,最終導致跟蹤失效,比如圖15 中原本含有4 個完整的標識,卻僅能檢測到1個來維持跟蹤,因此本方法更適用于成像器件較小、景深較大的設備,這在一定程度上限制了影像創作的自由度;(2)攝影機拍得的畫面需要進行進一步的抽幀才能得到最終的攝影機內視效畫面;(3)LED 背景墻分時復用所造成的高頻閃爍可能會對現場主創人員帶來感官不適,可以通過調節標識的整體亮度來減弱這種不適,但無法消除不適。

圖15 景深外的模糊現象所帶來的部分標識無法檢測
本文提出的基于LED 背景墻分時復用的攝影機注冊跟蹤方法,是LED 虛擬攝制系統中攝影機跟蹤方案的有效補充,在LED 背景墻上分時顯示二維碼標識與虛擬場景,對其中的二維碼標識畫面進行檢測估計,計算出真實攝影機的位姿信息傳遞給虛擬攝影機,渲染出透視關系正確、運動與真實攝影機相匹配的內視錐畫面。本方法充分利用了LED 背景墻高刷新率的優勢,拋開了各種產品級的跟蹤設備,將攝影機的高效跟蹤從依賴專用設備轉變成依賴算法,減少了遮擋對跟蹤效果帶來的負面影響,同時減少了LED 虛擬攝制系統的硬件支出,簡化了LED 虛擬攝制系統的構成。
攝影機跟蹤系統作為LED 虛擬攝制系統的關鍵組成之一,是連接真實世界與虛擬世界的橋梁。本文所設計的實現方案,在準確性等性能上仍然有很大的提升空間,在使用上還有一些限制,未來將繼續改進,與已有系統取長補短,在實際拍攝中根據應用場景選用合適的攝影機跟蹤系統,持續推動LED 虛擬攝制的發展應用,為電影創作提供更多的可能性。