RGB 圖片的產生是透過相機的感光元件將光線轉換成電子訊號,再經過一系列的處理(例如降噪等)後,最後轉換成我們看到的帶有三種顏色組合而成的圖片。那麼深度圖又是怎麼來的呢?有深度相機嗎?其實深度感測器有很多種,以下列出幾種常見的方式:
主動式深度感測器(Active Depth Sensor):主動式深度感測器是透過主動發射光源,例如紅外線或雷射光線到物體上,再接收反射回來的光線,像蝙蝠發射超聲波一樣,透過光線的反射時間或是光線的強度來計算物體的深度。例如常見的 Kinect 或光學雷達(LIDAR)等。
被動式深度感測器(Passive Depth Sensor):不主動發射光源,而是透過類似 RGB 相機的方式,被動接收環境中的光線,再透過一些特殊的技術來計算深度。例如常見的雙目相機(Stereo Camera)。
結構光(Structured Light):結構光是透過投射特殊的光線到物體上,再透過相機拍攝這些光線的變化,來計算物體的深度。
這裡想要特別的拿雙目相機來說明,因為它與我們前面提到的相機姿態估計、對極幾何、和三角測量 Triangulation 有很大的關係。
雙目相機運作的原理是來自於雙目視覺,也就是人類感測深度的方式,人類之所以能夠感知深度是因為我們有兩隻眼睛,透過兩隻眼睛看到的同一個物體,這個物體在兩眼之間會有一個視差(Disparity),透過這個視差我們可以感知物體的深度。理論上,物體越遠,視差越小,而物體越近,視差越大。3D 電影就是依靠這個原理。
因此,雙目相機簡單來說,就是把兩個相機黏在同一根棍子上,就可以透過這兩個相機拍攝到的影像,計算出兩個影像之間的視差,再透過一些幾何的關係,就可以計算出物體的深度。
而如何計算同一個物體在兩個相機的視差呢?已知兩個相機的相對姿態情況下(通過預先做好相機校正 Calibration),給定相機一的任一個像素,我們就可以沿著 Epipolar Line 在相機二的影像中找到對應的點,兩個點的差距就是視差。這個過程就是所謂的 Stereo Matching。
得到視差後,就可以透過與前面介紹的三角測量 Triangulation 一樣的方式,計算出深度。對於每個像素都這樣做,就可以得到一張深度圖。
那為什麼沒有尺度缺失的問題呢?因為我們已知兩個相機之間的真實距離,所以得到的深度值也是真實世界的深度值,不會有尺度缺失的問題。
Realsense 的 D435 就是一個常見的雙目相機(如下圖),可以注意到他左右兩邊各有一個鏡頭,用來拍攝並計算深度,中間的鏡頭則是用來拍攝 RGB 圖片。