3D攝影的基礎:深度測距與結構光
來自專欄玩機小胖的玩具世界13 人贊了文章
是的,這會是一篇偏技術的文章,我們知道在信息系統里,數字圖像的定義是一個二維函數f(x,y),x,y為空間、也即二維平面的坐標,f則是該點出的強度或灰度,x,y,f均為有限的離散數值。但這是已有數十年的傳統定義,我們可以看到它具備很強的平面性,在發展多年後,突破維度限制已經成為了圖像處理學科里比較重要的一個方向,但顯然,一步就走到全息肯定是不現實的,現有從光學鏡頭到數字感測器,再到觀測設備都是以二維為基礎,要實現三維化,就要從最基本的做起,也就是在x,y之外,再加入z,也就是深度信息。
在非光學領域,超聲波、核磁共振深度檢測技術廣泛應用於醫療行業,比如上圖就是我們的膝關節核磁共振圖像。所以結構光並不是什麼很新鮮的概念,從攝影的角度來看,每一張照片也都是有距離信息,當我們把物面的所有可見光源視為無數個點光源時,對焦完成後,每一個點光源的點擴散函數其實已經確定,換句話說每一個點都可以進行演算反推,進而計算出它的物距,有大致利用此理論的技術是松下的DFD對焦。
以前曾經火過一把的Lytro光場相機在鏡頭與感測器之間放了一片多微透鏡矩陣,讓感測器獲取了整個光場四維函數,只需要對特定方向的光進行二維積分就能重新解構想要的二維圖像,實現先拍照,後對焦。但單純跟二維成像系統來說,光場相機的局限在於空間解析度不足,解決辦法是增加微透鏡數量,可如果是在不增大畫幅的前提下,就意味著用角解析度換空間解析度,對最終銳度影響比較大,因此,單一方向的光源和捕捉方式已經很難滿足需求深度測距的全面需求。
所以,多攝方案呼之欲出,手機因為有受眾面廣、感測器規模小易於控制成本的優勢,成為深度攝影硬軟體的最佳試驗田。但在智能手機應用時代全面開花之前,主要的普及型產品是遊戲機,比如微軟Kinect。
之所以要把Kinect這個幾乎已經是古董的東西拿出來說,是因為現有的多攝結構光技術在它身上很有代表性,兩代kinect就有兩種不同的深度測距方案,初代使用的是散斑結構光,供應商是Primesense,已被蘋果收購,iPhone X的Face ID就是出自該團隊的方案——使用紅外攝像頭,檢測紅外激光投影到物體上的漫反射光斑(散斑只是編碼方式的一種,可以衍生出很多種不同方式,比如上圖的彩色條紋,但編碼目的都是相同的),因為每個光斑和整個點集的位置都是預先設置、固定唯一的,所以後期只要通過三角定理,即可來進行位置測量,精度可以做到很高,弱光下性能很好,演算法研發也不難,但缺點是成本比較高。vivo NEX和剛剛發布的OPPO Find X所採用的結構光也均基於這種技術。
第二代Kinect就換成了TOF(Time Of Fly)方案,類似於蝙蝠通過發出超聲波、再根據反彈的超聲波進行生物測距一樣,TOF就是用專門設計的感測器捕捉紅外發射器發出的紅外脈衝光,並計算從發出到接受的時間,以公式(光速X時間)/2來判斷距離,並測量整個畫面的深度信息。器件之間的距離可以放近一點,而且演算法簡單速度快、成本不高、弱光強光性能都不錯,精度雖然比結構光低一點,但對遊戲應用來說是夠用了。
畫面一轉來到了現在這個群雄割據的手機時代,如果只要金融級的人臉識別,前置攝像頭的結構光方案已經漸漸成熟,當然這也要歸功於iPhone X的推波助瀾,但,結構光測距的精度會隨距離和環境變化而變化,在非自拍的主題下不確定性很強(自拍主題下的實用性已經相當不錯,還可以實現模擬影棚光效),再加上後置攝像頭才是我們拍照的主力,所以想要獲取適用於常規攝影的深度信息,就只能通過目前主流的雙攝被動測距方案來實現。
相對於結構光或TOF,雙攝的最大區別在於它不是主動檢測,因此它不需要單獨的感測器,硬體成本很低,但也正因為它是被動檢測,所以演算法的複雜程度要高很多,計算所需要的時間也比較長,相對主動式的精度也明顯偏低,而且弱光幾乎抓瞎,不過即便如此,目前也有一些APP也利用雙攝有限的距離信息,一定程度實現了後期3D布光的目的,可參考下列對比:
可以看到在狗狗的左邊加入了一個綠色光源,右邊加入了一個近白色光源,打出了真實度比較高的3D光效。原理簡單來說是利用雙攝API來調取深度信息並加以計算,再用Metal 2的SDK接入GPU渲染,可以在3秒內就完成,下面是更多的對比:
可以看到大體效果是相當不錯,雖然在一些細節,比如範圍判斷上還是會暴露出問題,比較簡單粗暴的照射光+統一設置為均勻反射率的反射光演算法有時候會顯得較為突兀,但重點還是應該放在「進步」這兩個字上,畢竟這是第一款用雙攝深度數據來做後期布光的手機APP。
噢對了,APP的名字叫Apollo,目前只有iOS版,12大洋的付費APP。效果嘛,大家都看到了,腦洞其實挺不錯,事實上谷歌已經利用神經網路學習和雙核像素技術實現了單攝深度測距功能,具體的細節我會稍晚專文解讀。但眼下利用深度數據進行計算的應用面還是太「眼球化」,一項技術要成為必備基礎的前提就是它可以提供獨一無二,或者明顯勝過其他方案的效果或效率,目前的新興結構光主要應用於深度的人臉識別,部分品牌也拿出了3D人臉重構的方案,總體來說實現真正的深度數據應用還有比較長的路要走,對於這些底層技術做到心裡有數,以後判斷產品時也能更準確,有利無弊。
推薦閱讀: