我的AI之路(36)--使用深度相機

      2019年一年內使用過三款深度相機用於機器人基於視覺的目標識別和測距,分別是小覓D1000-IR-120、鉅芯、Intel Realsense D435(i) (D435i相對於D435來說增加了IMU功能模塊),時間久了容易忘記技術細節,現予以回顧記錄備忘。

      目標識別當然是基於傳統的OpenCV圖像處理技術來實現或者使用深度學習網絡模型來實現,對於簡單的識別(目標和背景都非常單一)並且運行環境是嵌入式環境硬件資源非常有限,可以考慮使用OpenCV來實現即可,對於少複雜的物體識別,尤其背景複製干擾多的還是得使用深度學習模型,甚至還得輔助以其他手段確認,例如紅外、超聲等(對於測量目標是剛體的並且不關注其形狀和不需要識記,並且成本可以接受的話,直接使用激光測距當然是最好最可靠的途徑)。 有時受限於要識別的目標是非剛體非固定輪廓外形等特殊性質,例如煙火霧之類的東西,只有使用視覺識別輔助以紅外等技術途徑,這時可使用深度攝像頭拍攝圖像交給深度學習網絡模型識別出目標,並根據目標在圖像中的位置,讀取對應的深度圖數據獲得目標的距離,這是大致的技術思路,具體的實現細節涉及商業祕密不便多說。

     在此通過三篇文章只介紹這三款深度相機的使用,三款深度相機的彩色和深度圖的分辨率都支持常用的1280x720(分辨率太小的話都知道圖片模糊不清識別效果肯定差,分辨率太大的話圖片在進行模型訓練前最好根據圖像本身情況和要識別的目標的情況先做合適預處理,不然可能會有問題,訓練效果差),對於三款深度相機的測距範圍,相機各自官方給出的數據是:

     小覓D1000-IR-120: 0.32-7 m

     鉅芯雙目: 0.7-100 m

     Intel Realsense D435(i): 0.1-10 m

      無意對任何一款相機做誇大或貶損,只就本人實際使用的效果來說,在無環境光等干擾因素、可見度適中的前提下,感覺Intel Realsense D435(i)大約在0.5-10m範圍內測距比較準確,鉅芯雙目相機在1.5-100m範圍內測距算準確度可以接受,小覓D1000-IR-120在0.6-7m範圍內測距表現不大穩定,有時算準確有時測距值離實際值差距較大。

       深度相機的測距原理其實很簡單,利用相似三角形的知識計算即可,還沒找到合適的數學畫圖軟件,先借用網上的一張圖:

     

    上圖中的 d=xl-xr (l,r爲上標)即爲雙目相機測距原理中說的視差disparity,f爲相機焦距,T爲雙目相機的基線長,Z爲要測的目標的距離,利用相似三角形的邊長比例關係,有 (T-d)/(Z-f)=T/Z,化簡可得

       Z=Tf/d

     這裏d爲何是xl-xr,可能一下看不明白吧,其實這裏的xl和xr不是長度(絕對值),而是目標物體在左右相機裏的兩個成像點Pl和Pr相對於各自座標系的X軸方向的座標值,從圖上可見Pl落在左邊相機的座標系(Ol爲原點)的YZ平面的右側,所以xl爲正值,Pr則落在右邊相機的座標系統(Or爲原點)的YZ平面的左側,xr爲負值,簡單地說,就是Pl落在左邊相機成像圖片的右半邊裏,Pr落在右邊相機的成像圖片的左半邊裏,如果把這兩張圖疊放到一起,兩點之間的視差d(Pl和Pr之間的距離)自然等於 xl -xr咯。

     深度相機的測距原理其實很簡單吧,有時計算原理很簡單,但是用數學公式一表示就弄得複雜了,深度學習裏的一些知識點也是這樣,說原理其實不復雜,用數學公式一寫,就一長串多種符號,讓人第一次看到時有點懵以爲多高大上的深奧理論。其實我們直接使用深度相機而不是普通雙目相機來測距的話,也不用理解這個原理,因爲一般相機的內部計算芯片輸出深度圖數據時都給你算好了,這也是使用深度相機的好處,當然你自己也可以使用不帶計算芯片的普通雙目相機成像後來自己計算距離,計算是需要你自己用代碼實現,佔用了你的主板的資源,而是計算十分頻繁,肯定要影響整個系統的性能了。

     在使用深度相機時,深度相機輸出彩色圖同時輸出與之相匹的深度圖,多數相機直接給出個深度圖上各座標點上的深度(距離)值,也有的只給出視差值d,需要你自己計算一下深度值,比如鉅芯相機就是這樣。

     後面用三篇文章分別介紹這三款相機的使用。

 

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