2019 年 6 月出版

科儀新知 第 219 期

3D成像與成型技術專題

0219025

結構光三維成像及其編碼技術

Structured Light 3D Imaging and Its Encoding Technology

劉治中、周錫珉

Chi-Chung Lau, Si-Min Chou

近年行動及自動裝置要求較高精度的環境識別及定位,傳統的二維影像偵測方式不符需求,需要利用三維量測得到較高的精度及準確度,在各種三維量測技術中,非接觸式的光學量測是最常應用技術,在光學量測技術中,結構光量測三維資訊在成本、資料穩健性及精度上較適合一般行動裝置,近年來在許多消費性產品採用,本文先介紹幾種常用光學立體量測技術,然後說明結構光成像的原理,及影響結構光成像效率與精度的編碼技術,供讀者瞭解結構光成像的關鍵技術。

Mobile and automatic devices inspire the demand of high-precision positioning and object recognition. Traditional 2D image detection cannot satisfy the demand of accuracy, and measurement turns to 3D imaging to fulfil the requirement. Structured light reconstruction method is one of the most adopted method in many optical 3D measurement techniques. Due to its acceptable cost, robustness, and data accuracy, structured Light method has been applied in many mobile consumer products. In this article, we briefly introduce some general methods of optical 3D measurement, then explain the principle of structured light imaging, and the coding technology that affects the efficiency and accuracy of structural light imaging.

一、前言

三維測量是機器視覺的傳統技術,早期是利用兩部相機左右向拍攝,用視覺立體成像方式構成三維模型,多年前電影工作者使用高清攝影機制作三維電影後,第一波三維成像產品進入消費性市場,近年電子遊戲及行動裝置運用 3D 操作,使得消費者對影像的期望提高。另一三維量測的推手是自動化產業,例如工業檢測、逆向工程、機器人、自動車等,要求更高精度的監測及自動化過程中,2D 成像量測尺寸及識別目標無法滿足精度及量測要求(1, 2, 3);像移動式機械人進行移動時,需要三維量測環境地圖、即時對場景動態掃描,同步定位與建構地圖 (simultaneous localization and mapping, SLAM),並以環境物件的幾何特徵 (邊緣、交角) 定位本身位置,才能掌握與鄰近物件 (牆壁、柱子、路樹) 的相對位置,即時進行移動,若僅有二維影像,難以正確感知環境與物件的真實空間關係,系統無法做出正確決策行動 (4);因此三維量測除在傳統的三維影視產品或逆向重建工程應用外,更成為自動化、機器人、自駕車等產業的關鍵技術。

收集物體外型立體資訊的方法,以其是否接觸被測物體分為接觸式和非接觸式量測,接觸式量測需要以探頭隨物件表面移動,大小受到限制,亦容易傷害被測物體,目前三維量測多以利用光學原理的非接觸量測為主(5),光學三維量測技術可以分為被動及主動量測兩種方式 (圖 1)。被動量測以雙目立體測量 (stereo matching) 為代表,主動量測如飛時 (time of flight) 技術,量測射出紅外光到物體反射所需時間以得到物件位置。

圖 1. 光學三維量測技術的分類。

本文主題介紹的結構光 (structured light) 成像在分類上是「主動式」立體測量,但成像原理與被動式的雙目測量相同,只是在實現過程中,儀器透過雷射投影「主動」投出已知圖形到物件表面,圖形因物件表面形狀而改變,經攝影鏡頭獲取到變形結構光圖案,與原圖匹配得到圖形各點的空間位置,最後依三角測量原理計算各點在物件表面的空間位置。因為使用已知圖形,結構光技術在成像速度與精度、匹配出的點雲密度都更優於其他方法,近年來在近或中距離測量領域中被廣泛應用。本文以下各節將先說明光學三維量測中雙目立體測量、飛時量測、及結構光等被動、主動、及半主動 (結構光) 三類方法的原理,然後介紹光點及條紋等兩類結構光成像視覺模型,再說明不同的結構光圖形設計與編碼方法,供讀者瞭解這些結構光成像的關鍵技術。

二、光學三維成像方法概述

1. 立體視覺技術

雙目立體匹配 (stereo matching) 是最早發展的三維成像方法,依相機針孔成像原理,由影像與物件間的空間三角幾何關係,計算物件深度 (距離) 空間資訊,基本方法為先獲取兩張或多張不同視角的同一場景影像,兩張影像與物件間呈現如圖 2 的三角關係,以左右兩眼觀看目標成像位置,推算目標物與觀測點的距離(6)

圖 2. 立體視覺幾何原理示意圖。

圖 2 中空間某點 A (X,Y,Z) 在左右攝影機的成像面 CL 和 CR 的像點稱為共軛點,這些共同軛點多是影像中能被特別界定的特徵點,特徵點多為物件的邊線或⻆點,代表性的特徵點找尋方法是由 Lowe 發展的尺度不變特徵轉換 (scale-invariant feature transform, SIFT)(7)。 CL 和 CR 的像點在左右成像面的坐標為 al (ul, vl) 及 ar (ur, vr),由兩個共軛像點分別作它們與各自相機的光心 Ol 和 Or 的連線,即投影線 alOl 和 arOr ,另外兩個相機光心 Ol 與 Or 的連線稱為基線,利用基線與投影線的三角幾何關係求出投影線交點,就是 A 點的世界坐標 (X, Y, Z)。

上述流程經影像匹配特徵點,再計算特徵點的影像座標、相機焦距等內參數以極線幾何算出該點距離相機的深度及相對於相機的三維距離,這些匹配點構成點雲 (point cloud) 即是物件的三維模型。因為自然景像的特徵點所能找到的匹配點數量不多,所以這步驟被稱為稀疏點重建 (sparse reconstruction) ,需要進行稠密重建 (dense reconstruction) 把稀疏點雲重建為物件原貌,稠密重建通常會假設影像表符合某假設或模型,再由已知稀疏點雲輔助加密點雲,例如 MVS (multi view stereo) 假設兩張影像間在拍攝時的三維幾何結構有極線幾何約束,經由逐點判斷在兩張影像間的像元是否同一點,再利用這種加密點進行稠密匹配過程,得到最多的立體點雲。

2. 結構光技術

上述立體視覺以影像處理技術比較兩幅影像間的特徵得到匹配點,但經常遇到匹配點太少或匹配精度不足的問題,結構光技術利用投射已知圖案方式解決匹配問題。系統投射經設計的圖案到待測物件上,圖案可以是光點、條紋、及圖案等形式,顏色也可以是黑白、灰度、或彩色 (圖 3)。

圖 3. 彩色條紋結構光及重建點雲(6)

技術上結構光是一種逆向的雙目立體測量,拍攝經物件表面幾何形狀所扭曲的圖案影像,使用與類似雙目立體匹配的的極線幾何原理;差異點就在拍攝影像為一已知圖案,這些圖案經由特別調製,帶有很多編定的特徵點,而且因為圖案是固定的,不像雙目匹配要找不同類型的特徵點,所以大大提昇了影像間的特徵辨識效率及匹配精度,更快速準確計算影像幾何位差,而且在硬體成本及省能表現比下節提到的 TOF 方法更有優勢,例如,最近被廣泛利用在移動裝置或智慧型手機。

3. 飛行時間法

飛行時間法 (time of flight, TOF) 是主動式光學測距法,測量原理是向待測物體主動發出一調製過的光源,然後接收由待測物體反射回來的調製光,計算發射出與接受反射後的相位差,由相位差估算光源的全部運動時間,得到儀器與待測物體的距離深度資訊 (圖 4) 。飛時系統的主動發射光源多採用固態雷射管或發光二極管 LED,波長 850 nm 的紅外光,紅外鏡頭的波長多在 800-900 nm 之間;採用紅外光可以避開物件表面可見光 (400-700nm) 干擾,光線傳入感測器後會進行反射光與環境光分量的分離,降低環境光分量的干擾,此外,為減少逐點計算以得到較佳的掃描效率,飛時系統大都使用 CMOS 陣列量測對應範圍內的像元亮度及反射時間。

圖 4. 飛行時間法作業原理(8)

4. 成像方法技術特點

上述三種是目前最常見的三維成像技術,各別因適用距離、解析度、準確度、成本等而在不同環境下應用,但在移動裝置如智慧型手機上,立體視覺的對雜訊調適性較差,準確度較低,飛時法的硬體成本及能耗問題仍需解決,雖然結構光三維成亦同時需要投影及攝影裝置,但目前蘋果、華為、小米等智慧型手機都克服技術問題使用結構光為三維成像的解決方案,法國 Yole Developpement 預測(9),短期內智慧型手機仍會使用結構光技術。

表 1. 常用 3D 成像技術比較表(9)

三、結構光成像視覺模型

結構光圖案型態大致可分為光點、條紋、及空間圖案等,光點與空間結構光都是以逐點進行幾何計算,視覺模型相似,但空間圖案用較複雜設計來增加圖案可分辨性;而條紋結構光設計為帶相位的條紋,其距離深度計算稍為不同,以下將分別說明兩種視覺模型。

1. 光點結構光的視覺模型

光點結構光是指逐點套用三角幾何計算其空間位置,由多個圖案或是離散光班組成一幅面結構光時,除在偵測影像與原始結構光圖案各有不同,在計算各點的幾何位置的視覺原理與單點結構相同。圖 5 顯示攝影機取得投影設備投射結構光到物體表面的圖像後,找到與原圖案相對的某一編碼圖案點,得到編碼圖案在相機上的成像位置 p、該點的投射角度 α、已知的攝影機與投影設備距離基線 b、相機焦距 f,求取該點的深度距離 Z 與水平位置 x。計算模型依編碼圖案的投射角度分為為銳角和鈍角兩種模型。

圖 5. 一般結構光掃描系統之三角量測幾何示意圖(10)

(1) 銳角情形公式

圖 5 中對物件表面 S1 點,投射角 a1 為銳角,攝影機觀察影像為 DOS1x1α1 可表示為式 (1):

依針孔成像原理,三角形 DOS1x1DOCp1 相似,可以得到式 (2)

將 (2) 式代入 (1) 式消去 Z1,可以得到為式 (3)

在將 (3) 代入 (1) 式,計算得由 S1 點到投影設備的距離深度如式 (4)

(2) 鈍角情形公式

圖 5 中對物件表面 S2 點,投射角 a2 為鈍角,攝影機觀察影像為 DOS2x2a2 可表示為 (5) 式:

透過相似三角形 DOS2x2DOCp2,可以得到 (6) 式

將 (6) 式代入 (5) 式消去 Z1,可以得到為 (7) 式

在將 (7) 代入 (5) 式,可以得到深度 Z2 為 (8) 式

式 (8) 公式中的為 a2 鈍角,其正切值與其補角正切值相同而相差一負號,所以公式 (8) 可合併為公式 (5),套用針孔成像公式整理物件光點在空間上的三維座標為:

2. 條紋結構光的視覺模型

結構光圖案可設計為帶相位資訊的條紋光,由條紋間距扭曲量轉換為攝影機與與待測物體的距離深度如圖 6:

圖 6. 條紋投影之三角量測幾何示意圖(10)

條紋光以 q0 入射,此時亮暗條紋間距為 d,投影在參考平面的亮暗條紋間距為 d0,為相機光軸與參考面法線夾角 qn,參考平面與待測物體之間的深度變化關係如 (10) 式

四、編碼設計策略

與立體視覺相比,結構光的最大優點是可以快速找到變形後圖案在原始圖案的匹配點,良好的編碼設計要易於辨識、辨識速度快、圖形影像解析度高;編碼結構光經多年發展,研究人員依不同應用情景發展不同的編碼形式及策略,Salvi 依編碼設計策略把空間域的設計分為直接編碼 (direct coding) 、時序編碼 (time-multiplexing) 、和空間編碼 (spatial neighborhood) 三種類型 (圖 7)(11)

圖 7. 三種不同策略的編碼形式,由左至右為直接編碼、時序編碼、空間編碼(11)

三種編碼方式分別有其應用場合及優缺點,直接編碼則以灰度或彩色值代表數值,成像解析度高,所需圖案數較少,缺點是對物件表面影像噪訊敏感而且編碼量少易重覆。時序編碼利用複數次投影及掃描得到代碼值 (0 及 1) ,組合圖形易於產生、解析度高,但不適用於動態場景。空間編碼利用圖案表示數碼組合成數值串,編碼上要求有獨特圖案,解碼過程較為複雜,因只使用一張圖案,可量測移動物件。

1. 直接編碼

直接編碼策略是以每個點的灰度或彩色值進行編碼 (圖 8) ,這種策略在編碼及解碼相對簡易,理論上亦具有高分辨率,但缺點是編碼數量稀少,以灰度值編碼,只有 256 個編碼數量,若以顏色編碼,則有 2563 編碼數量,為此需要使用大量顏色或重覆使用色彩。此外,直接編碼對被測場景或物件表面的噪訊敏感,會因為待測物體的顏色分布導致錯誤判斷,為減少物體本身顏色對結構光的影響,作業時常需要求獲得若干背景參考影像以供解碼參考,因此直接編碼較適用於中性色彩場景或靜態物件。

圖 8. 以 RGB 值做直接編碼(11)

2. 時序編碼

時序編碼是把多個編碼圖案,依時間先後順序投射表物體表面,各組編碼圖案依拍攝先後順序組合後解析編碼,如圖 9 中連續向物件投射三幅圖案(10),圖案中分成 8 個區域,各別以明暗代表 1 及 0,在投射空間中某點的三幅圖案明暗值組合後,就是該點的區域編碼值,並由所在區域得到該點的投射角。

圖 9. 時序編碼結構光實施示意圖。

若被測點 P 位於第五區,三幅圖案的編碼值為 0,1,0,該區碼值 010 ,對應等寬條紋圖案的區域序號為 4 (圖 9 右),點 P 所在位置的掃描角 α 可由下式計算,計算後 α 值代入結構光視覺模型公式即可得到 P 點的三維位置:

式中 α0α1 是經由儀器校對的常數,n 為投影亮度圖案總數。

時序編碼的優點是較高的精確度及分辨率,但因需多次掃描,較適用於靜態物件的高精度檢測。最常見的時序編碼是以暗明灰度條紋分別代表 0 與 1 ,投射 n 組 條紋可以表示 2n 種碼字;因為實際操作時數字轉換時可能產生明暗值同時轉換,例如 3(0-1-1) 轉為 4(1-0-0) 時,雖然理論上投影是同時轉變,但硬體設備各狀態並非同時發生改變,而是第一位先由 0 轉 1,數字暫成 111,然後第二位由 1 轉 0,第三位再由 1 轉 0,第一或第二暫態 (111 或 101) 的中間轉換過程可能造成系統誤判,因此數字編碼會採用格雷碼 (Gray codes) 編排 (圖 10),其設計以最小差異碼方式排列,每個鄰近區都只相差一個位元 (明暗),投射時以最少的明暗變化提高解碼穩定性。

圖 10. 二值編碼 (a) 及格雷碼 (b) 的時序編碼方式(10)

3. 空間編碼

空間編碼為投射一個已知圖元構成的編碼圖案,然後由鄰近區域的空間資訊如線條、顏色、形狀等來產生編碼資訊,解碼出字串後即得到匹配的原始圖案的區域位置、圖案中心坐標、原始投射角,即時算出該點在物件表面位置的掃描角及三維坐標。

由於空間編碼策略把所有編碼資訊都放在一幅圖案,因此適用於量測動態物件或場景。空間編碼的缺點是圖元設計及解碼複雜,解碼時間較長;為使圖元易於辨識,亦可能犧牲圖案的解析度,令空間編碼法的精度稍差於時序及直接編碼。但綜合而言,空間編碼效率亦為各種編碼方法中最好的,目前在三維量測裝置中使用最廣,以下介紹空間編碼常用的三種編碼方法:非正式編碼、DeBruijn 序列圖案編碼、M-arrays 圖案編碼等三種。

(1) 非正式編碼

非正式編碼 (non-formal codification) 不使用任何數學編碼理論,僅利用不同灰階或色彩的不同排列方式編碼產生一個不同的碼字;例如只利用三個不同灰階值進行編碼,其三個值為 B (黑色、灰階為 0)、G (灰色、灰階為 127)、W (白色、灰階為 255),然後交替獲得BWG、WBG、WGB、GWB、GBW、BGW 共 3! 的編碼,圖 11 為以 RBG 三原色組成 6 種顏色(12),以交替方式可得到 6! 組的編碼,並以白色為分隔碼,進行場域掃描。這種利用灰度或色彩的編碼方式與前述的直接編碼類似,與其他空間編域方式相比具有較好的分辨率,但亦因使用色彩投射,圖案容易被待測物件表面顏色淹沒,若場景的距離景深突然改變,容易造成解碼錯誤。

圖 11. 利用 6 種顏色交替方式得到 6! 組編碼。

(2) 德布魯因序列

德布魯因序列 (De Bruijn sequences) 由荷蘭數學家 De Bruijn 提出,原始目標是為解決環狀序列的不重覆排列問題,例如對一長度為 2n 的二進位環狀序列,德布魯因序列方法使該序列有 2n 個長度為 n 的互不相同子序列,圖 12 表示 n = 3 時,一個長度為 23 = 8 的二進位環狀序列 00010111 ,其子序列有 8 個長度為 3,互不相同的子序列:000、001、010、101、011、111、110、100。這種序列互不相同的特性,剛好適合於條紋結構光編碼,歷來有各種研究應用德布魯因序列進行編碼,除了二進位 (明暗) 外,亦有研究使用 R、G、B 的數值為基礎,調色出八種顏色,由於在實驗中發現紅色跟綠色相連時,會有較高的錯誤判讀,因此最後編碼設計成長度為 53 的環狀序列 (圖 13) ,雖然捨棄了一部分的編碼數量跟解碼速度,但還是可以減少錯誤判讀的可能性。

圖 12. n = 3 時的德布魯因序列(13)

圖 13. 以 RGB 三原色設計的德布魯因序列(14)

(3) M-array

M-array 或偽隨機 (pseudorandom array) 序列與德布魯因序列都是在掃描窗口內有不重覆性序列,但德布魯因序列是一維空間的條紋編碼,M-array 是二維空間編碼,在一個 RxV 大小的掃描窗內,由圖案組成的 MxN 子陣列代表的數碼值是唯一的 (僅出現一次),則該矩陣稱為 RxV,窗口尺寸 MxN 的 M-array,M-array 內的子陣列可以利用代數生成或偽隨機序列方式生成,但以偽隨機序列方式的使用最為直接方便。由於 M-array 內每個子陣列都有數值唯一及絕對位置,解碼後即得到投射及原始位置,因此在結構光編碼上被廣泛應用。圖 14、15 為兩種不同圖元設計(15,16),分別利用方型圖元缺口、或以實/空心圓與橫桿等圖元代表數值 1、2、3,再由圖元所組合的碼塊代表數字串,本文作者曾提出一種以井字缺口代表數值的設計 (圖 16),因為每個井字圖形能表示 8 位數值,再由鄰近 8 個圖案組成字串碼,理論上可達到 88 的編碼量,足夠提供高密度、全圖不重編的結構光圖形(17)

圖 14. 方塊缺口表示數值的 M-array 結構光設計(15)

圖 15. 圓圈及橫線表示數值的 M-array 結構光設計(16)

圖 16. 井字缺口圖元設計的空間編碼結構光投影(17)

Kinect 及蘋果 iPhone 使用的結構光亦屬於偽隨機空間編碼,但不是使用圖案辨識,而是使用一群相對位置為隨機分布的光點代替圖形 (圖 17)。這種由 PrimeSense 公司提出的偽隨機陣列結構光(18),先由光源產生數百個光點照射到光源前的 MEMS 鏡組,以衍射方式生成數萬個隨機光點,這些隨機光點會隨距離變換圖案,所以空間上任兩處的圖形都不相同,若以逐點解碼找回光點位置的標不容易,實施時是以與已知距離的參考面光點圖案進行影像相關,以最高相關參考面的距離得到距離深度。

圖 17. PrimeSense 專利中展示的離散光班圖形(18)

五、結語

本文介紹光學三維量測的計算方法,首先說明立體視覺、結構光、飛行時間等三種常用方法,然後說明結構光的視覺重建模式。結構光三維重建技術關鍵點是重建精度、速度及穩健性,因應場景、環境亮度、量測距離要有不同的編碼策略,本文介紹了直接編碼、時序編碼、空間編碼等三種重要的結構光編碼策略。直接編碼有較高空間分辨率,而且只需要一至兩幅投影圖案,但受到投影儀器的顏色帶寬、測量表面顏色或深度變化影響,應用場域較為受限。時間編碼有較高的空間分辨率與測量精度,但需要投影多幅圖案,不適合用於動態場景。空間編碼因為只需要投影一幅圖案,所以適合動態場景。

目前應用較廣的空間編碼有非正式編碼、德布魯因序列,及偽隨機編碼等三種,非正式編碼是前述的直接編碼的改良版,不使用數學編碼理論,僅使用不同顏色或灰度變化擴充為較多的碼字組合,其優缺點亦與直接編碼相同,有較高的空間分辨率但亦受限於碼字組合有限,同一幅圖像中會有重覆碼字。德布魯因序列圖案編碼在每個運算窗中會只出現一次,重覆性較低,以不同顏色的德布魯因序列條紋或網格編碼,可以用一張圖案達成高分辨率及高精度結果,但單一色調則無法達成相同效果,所以較易受待測物件表面色彩影響解碼成果。 M-arrays 或偽隨機圖案編碼利用不同圖案或符號代表碼字,亦具有運算窗中不重覆的優點,而且可以使用單色圖案投射,不受待測物件表面色彩的影響,是目前空間編碼結構光中較被使用的方式;因使用不同圖案為碼字代表,易受投影設備的硬體限制其圖案大小,解碼過程亦較多影像處理步驟,分別影響其分辨精度及解碼速度,但偽隨機編碼具有碼字唯一性、及不易被受測物件色彩影響的優點。

目前在消費性或小型三維量測裝置仍多採用結構光三維量測技術,主要原因是結構光系統的量測結果相對較穩定,它的量測誤差主要來自局部場景問題如物件局部反射率、幾何突變性,誤差量相對較低,加上結構光系統所需零件大都為標準的電子及光學零件 (如 CDD 感測器及衍射光學元件) ,預期短期內結構光仍會被消費性電子產品使用。