Kinect 學習j記錄——one

Kinect(Light Coding)就是以紅外線發出人眼看不見的class1雷射光,透過鏡頭前的diffuser(光柵、擴散片)將雷射光均勻分佈投射在測量空間中,再透過紅外線攝影機記錄下空間中的每個散斑,擷取原始資料後,再透過晶片計算成具有3D深度的圖像。

工具:SDK+OpenCV+VS2017

kinect 2.0開發第一步,研究kinect2.0 API。 
            本文主要是翻譯官方文檔,另外加入自己的一點理解和實驗 
            文檔網址: https://msdn.microsoft.com/en-us/library/dn782033.aspx 
          1.API分類 
                  主要分爲三類 
                 1)Windows系統運行API(Windows Runtime APIs )。 
                 2).NET API 
                 3)原始API(native APIs)

Kinect v1,可以讀取投射的紅外線pattern,從pattern的變形獲取Depth的信息,搭載了「Light Coding」方式的Depth傳感器。Kinect v2預覽版,通過從投射的紅外線脈衝反射回來的時間來獲得Depth的信息,變更爲「Time of Flight(ToF)」方式的Depth傳感器。

Light Coding,顧名思義,就是用光源照明給需要測量的空間編上碼,屬於結構光技術的一種,只是深度計算方式不一樣。結構光(Structured Lighting)是將一維或二維的圖像投影至被測物上,根據圖像的形變情形,判斷被測物的表面形狀,可以非常快的速度進行掃描,相對於一次測量一點的探頭,此種方法可以一次測量多點或大片區域,故能用於動態測量。

與普通結構光法不同的是,Light Coding的光源稱爲“激光散斑”,是激光照射到粗糙物體或穿透毛玻璃後隨機形成的衍射斑點。這些散斑具有高度的隨機性,而且會隨着距離的不同而變換圖案。也就是說空間中任意兩處的散斑圖案都是不同的。只要在空間中打上這樣的結構光,整個空間就都被做了標記,把一個物體放進這個空間,只要看看物體上面的散斑圖案,就可以知道這個物體在什麼位置了。當然,在這之前要把整個空間的散斑圖案都記錄下來,所以要先做一次光源標定。

Time of Flight是一種主動式深度感應技術,其使用激光探測目標物。顧名思義,Time of Flight就是去計算光線飛行的時間。首先讓裝置發出脈衝光,並且在發射處接收目標物的反射光,藉由測量時間差算出目標物的距離;ZCam就是使用 TOF技術,使用紅外線以及Accelerometers加速度計感應器,感測立體空間的相對位置變化,建構灰階距離影像的深度感應器。3DV Systems公司研發該技術已經長達10年,並取得許多專利技術,微軟二代Kinect使用TOF也是情理之內的事。

除此以外,新一代Kinect還有許多新特點:彩色攝像頭達到了FullHD(1920 x 1080 @30fps);更大的視角,FOV 由 53×47 度變為 70×60 度;在 1 米左右距離即可偵測使用者;可以偵測6 位使用者(含骨架)、25 個關節點(關節點與上一代相比多5個,現在在手掌這部分現在有三個關節點,所以可以在一定程度上偵測手的開合狀態);可以根據臉部彩色影像的細微變化偵測心跳。

第二代Kinect已經發售,其性能發生了翻天覆地的進化。其中最大的改變是改爲採用TOF技術,號稱有三倍的精確度。其數據的穩定性相對較好、細節更多;被其他環境光源(紅外線)影響的概率也更低,甚至可以承受一定程度的日光。也由於深度感應改採用TOF技術,所以捕捉到的紅外線影像不會像 PrimeSense 的技術有散斑、畫面很乾淨。

讀取深度圖像步驟

  1. 獲取kinect傳感器
  2. 打開傳感器
  3. 獲取深度信息傳感器
  4. 打開深度幀讀取器
  5. 獲得最近的一幀
  6. 將深度信息轉換爲MAT格式
  7. 用opencv的imshow顯示
  8. 回收和釋放內存

讀取彩色圖像步驟

1.獲取kinect傳感器 
2.打開傳感器 
3.獲取彩色圖像信息傳感器 
4. 打開彩色圖像幀讀取器 
5.獲得最近的一幀 
6. 將彩色圖像轉換按三通道保存爲MAT格式 
7.用opencv的imshow顯示 
8. 回收和釋放內存

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