原文:3d相機的資料處理方式
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視覺學習社群
3d標註 3個好用的3D點雲資料標註工具推薦
1 point cloud annotation tool 支援點雲資料載入 儲存與視覺化 支援點雲資料選擇 支援3d box框生成 支援kitti bin格式資料 安裝參考 支援普通相機拍攝的2d影象 jpg和.png檔案 支援lidar生成的3d點雲 pcd檔案 中目標的標註 支援3d box框...
3D相機如何獲取基於立體視覺的3D資料
本文概述了使用立體相機獲取深度感知的主要處理步驟。立體視覺的深度感知基於三角測量原理。我們講兩台搭載投影光學系統的相機併排放置,使兩台相機的視野在所需物距發生重疊。我們通過這兩台相機的拍攝,可以得到兩個不同角度下的場景圖。如圖1所示。物體在圓錐筒前面,圓錐筒散落排列。在3d空間內,兩幅影象中的每乙個...
3D點雲的深度學習
使用卷積神經網路 cnn 架構的深度學習 dl 現在是解決影象分類任務的標準解決方法。但是將此用於處理3d資料時,問題變得更加複雜。首先,可以使用各種結構來表示3d資料,所述結構包括 1 體素網格 2 點雲 3 多檢視 4 深度圖 對於多檢視和深度圖的情況,該問題被轉換為在多個影象上使用2d cnn...