3D相機的數據處理方式

作者:Pontmercy

來源:微信公衆號|3D視覺工坊(系投稿)

3D視覺精品文章彙總:https://github.com/qxiaofan/awesome-3D-Vision-Papers/

 

在上一篇中,我們介紹了什麼是3D相機。但是對於初次接觸3D相機的同學,可能首先面臨的問題是如何處理3D相機得到的數據。3D相機的數據分爲兩種方式:三維點雲數據方式,二維數據方式。其中,三維數據保存的格式有csv,txt,ply,stl等。二維數據通常以二維圖像的形式存在,其中保存Z方向的二維圖像被稱爲深度圖像。本篇主要介紹一下深度圖像的生成與處理。

1.前言

3D相機雖然也被稱爲相機,也可以得到二維的深度圖像,但其實並不是由感光像元產生圖像。2D相機和3D相機由於都有一個“相機”的名字,通常讓不太瞭解的人產生困惑。我們用英文可能更容易理解。中文裏的3D相機,在英文語境下其實常被稱爲3D sensor,並沒有3D camera的說法,而2D相機,被稱爲2D camera或者camera。

Wenglor 相機示意圖

如上圖所示,一個典型的3D相機通常有一個2D相機和一個光源組成,光源的種類由其設計原理決定。3D相機的獲取方式有很多種:單目立體視覺,雙目立體視覺,三角測量法,結構光,TOF等等。因此它可能是白光、激光、投影儀,振鏡等。

3D相機獲取3D數據的方式有很多,但不論是哪種方法,3D相機都通過某種算法或者原理來得到一些位置的3D數據。對於一些3D方面的應用,這些3D數據便是所需要處理的數據,例如,對於用於三維重建,點雲數據本身便是要處理的對象。但是對於另一些方面的應用,如工業檢測裏面的平面度,高度等等,點雲格式的數據並不是一個很好的方式。

因此根據對後續的處理方式不同,3D相機得到的是3D數據保存方向有兩種:一種是直接保存3D數據格式,相機可以直接導出三維數據,常見的如:點雲通用格式PLY,STL,以及其他格式如CSV,txt等,這種情況下處理方式多爲3D算法。支持這種保存方式的相機多用於3D重建, 地圖引導等方向。相機採集到3D數據,用戶用來處理和最終得到的也是3D數據。

但是,有些時候,這些數據方式並不是我們需要的。在工業視覺檢測領域,這些數據有時候並不是很友好。這體現以下這些方面:常見的工業檢測如高度,缺陷等,並不需要三維數據,只需要高度數據。同時這些3D數據在傳輸和處理方面無法之前的圖像處理系統兼容。

因此,另外一種方式是保存成深度圖像。工業相機多支持這種方式,它的好處在於:同時可以與之前的2D圖像處理相融合,無論是數據傳輸還是處理,都可以非常方便地利用現有的圖像處理算法和圖像處理:例如LabVIEW,HALCON ,OpenCV。工業相機的廠商通常提供一種乃至多種傳輸協議來支持應用廣泛的圖像處理庫來獲取它們的深度圖像。

2.3D相機與深度圖像

2D相機的圖像簡單點兒說是像元感光直接成像的,就大多數相機而言,成像過程可以用小孔成像過程來描述。但是,3D相機則大爲不一樣。3D相機是先有三維的數據,而後生成的圖像。深度圖像不是由小孔成像和像元感光而產生的。而是通過某種方式計算生成的。

前面我們已經介紹過深度圖像的生成,現在我們簡單回顧下:深度圖像的生成公式通常由廠商定義,但是並不是隨心所欲。爲了保證後續的使用,例如紋理貼圖等,深度圖像和2D圖像通常具有位置一致性,換句話說,深度圖像上的像素點和紋理圖像中的像素點是一一對應的,這個特點在紋理貼圖過程中非常重要。廠商的隨心所欲更多地體現在XY圖上。如果需要根據XY圖來還原出XY方向的數據,則需要提前知道公式或者相機廠商提供的API,而深度圖像則像紋理圖像一樣通過API直接獲取。

如上圖所示,深度圖像上的像素點與紋理圖上的像素點一一對應,基本上所有廠商都會進行保證這一點。

當然,如前面所說,在擁有3D數據之後,相機也可以不生成圖像,直接以點雲格式保存,常見的有:csv,txt,ply,stl等。2D數據保存方式則爲深度圖像,主打方向爲3D重建,逆向工程的3D相機大多支持這些格式中的一種或者多種。

3.深度圖像的處理

深度圖像與其它灰度圖像的不同之處,在於深度圖像的灰度值代表着Z方向的深度信息,而不是被拍物體的表面紋理信息。深度圖像的處理方向實際上也可以分爲兩種:一種是按照2D圖像處理的方式對圖像進行,另一種則是將深度圖像還原成3D數據,之後再按照3D數據的方式進行處理。這時,深度圖像其實只起到了一個存儲和傳輸數據內容的作用。

當然這兩種方式並不是涇渭分明的。爲了完成一個項目,在實際中我們可能兩種方式都會用到,例如先對深度圖像做一些預處理,提取出我們想要的部分,再對這一部分單獨生成點雲,減小後續的工作量。這裏爲了介紹上的方便,我們依舊按照這兩個方向進行介紹:

3.1 2D處理方式

以kinect的深度圖像進行孔洞補全來進行介紹。實際上孔洞補全這種操作只在民用級別的深度相機上出現。Kinect相機以及類似的相機,容易受到太陽光甚至是日光燈的干擾,這時候它們的深度數據會在測量區域內出現大量的孔洞,而在工業相機裏,除非材料反光、太陽光干擾以及表面形狀導致的局部過曝等情況,否則很少出現大面積數據缺少的情況。

      修復前                                       修復後

如上圖所示,左圖是Kinect採集得到的深度圖,圖像裏有較大面積的缺失,這種缺失,這種缺失我們嘗試採用2D的圖像修復算法進行修復,修復後的效果如右圖所示。

3.2 3D處理方式

工業3D相機採集到的數據在經過圖像採集軟件得到圖像格式存儲的數據之後,有時候需要將其還原成點雲格式進行處理。廠商通常會提供這樣的API或者函數。

圖一:RGB圖像             圖二:點雲顯示(僞彩顯示)

上圖左一爲相機通過HALCON導出來的圖像,從它可以拆除深度圖像,根據廠商提供的公式我們可以還原出XY方向信息,這樣,我們就可以得到完整的3D信息,從而生成點雲,如右圖二。這樣我們就可以利用點雲處理的算法來處理數據。

備註:作者也是我們「3D視覺從入門到精通」特邀嘉賓:一個超乾貨的3D視覺學習社區

本文僅做學術分享,如有侵權,請聯繫刪文。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章