微軟自主研發的 Xbox One Kinect 2.0 體感技術跟上代機型所使用 PrimeSense 的方案有何不同?
&> PrimeSense was the original supplier for Microsoft』s breakthrough Kinect gaming device, which incorporated cameras and depth sensors so that players could control games with their gestures. But Microsoft used homegrown technology for the new Kinect that is part of Xbox One.
via Apple Likely to Buy PrimeSense, But Deal Is Not Yet Done
第一代是結構光獲取深度,紅外激光發射相對隨機但又固定的斑點圖案,這些光斑打在物體上後,因為與攝像頭距離不同,被攝像頭捕捉到的位置也不盡相同。然後先計算拍到的圖的斑點與標定的標準圖案在不同位置的位移,引入攝像頭位置、感測器大小等參數計算出物體與攝像頭的距離
圖案大概是這樣的:
第二代TOF算是目前的最火的解決方案,但並不像其他答案所說直接通過檢測光子發射再返回的時間乘上光速算物體距離,那樣精度太差了。現在一般是發射一個強度隨時間周期變化的正弦信號,通過獲得發射、接受信號的相位差來計算深度,精度高很多。
至於後者的優點,速度並不本質,因為只要第一個方案的攝像頭幀率上來並且計算性能足夠強,就可以達到很高的FPS。一代已經上市很多年,使用的硬體也不是上市時的最高端產品(比如因為研發是上市前好幾年那時候還沒出最新版,或者出於成本考慮),導致解析度很低(320*240插值到640*480),速度也不高(接近30fps)。第一種方案的最大缺點在於精度很難提高,因為計算斑點位移需要用圖像在一個小範圍區域內的來做塊匹配,導致犧牲了像素級別的細節。凸凹不平的表面、物體邊緣、很細的物體很難檢測準確的深度(用過一代kinect的都知道水杯的把手等東西很難識別,人臉也很容易蛻化成一個球狀物體,圓形的東西邊緣也不夠圓滑)。TOF在一定程度上可以做到逐個pixel的計算,從而擺脫這個問題,在相同的感測器解析度的情況下得到更高的精度第一代的Kinect採用的方法是Light Coding,激光通過毛玻璃產生隨機性很大的斑點圖樣,而這些圖樣在各個深度都是不一樣的,通過觀測打在物體表面的圖樣,就能計算出物體所在的位置。
而二代採用的是TOF技術,顧名思義就是飛行時間測量,通過測量光脈衝之間的傳輸延遲時間來計算深度信息。
之前做Kinect程序開發的時候,還查過兩者的差異,覺得TOF貴且效果不好,但奇怪的是二代採用了這種技術無論精度、解析度還是時間都得到了很大的提升,不知道微軟的研發小組做了什麼優化,技術細節還沒有披露,也不知會不會披露。
目前的二代Kinect應該是配合Xbox One推出的遊戲設備,至於會不會像一代那樣提供PC版本就不得而知了。
個人還是對新特性很期待的,如果推出PC版本就入一個研究研究。
回顧一下歷史, microsoft 2010年在跟primesense 簽xbox合作協議的同時, 收購了市場上已有和primesense 有類似產品(原理不同)的全部競爭對手, 作為保持kinect 競爭優勢,防止對手跟進的策略, 估計當時primense肯賣 微軟也會買。 被買的公司 canesta, 3dv 都是做TOF camera, 當時他們的產品解析度和穩定程度都不如primesense的。 微軟買了這兩家以後,外界不知道發生什麼情況了, 直到xbox 2.0 微軟說用自己的技術,跟primensense分手了。
從技術方案來說,不管是TOF camera 還是 primensense 都是利用主動光源的技術, 利用主動發射的紅外波段光源,照射場景,再根據反射回的成像來計算深度。 原理上差別是TOF 「可能」 是依賴一個高速同步的快門, 通過測量光發射的時間來計算深度,類似雷達測距。而primensense利用成像的視差,雙目視覺的原理來計算。 (這裡加了引號是因為具體是怎麼做的,各家包括wiki都語焉不詳, 而當年TOF camera的一些表現,比如物體距離設備比較近時對輪廓周圍的深度有很大影響,象一個光暈一樣,從TOF的原理上似乎不太好解釋)
說多點題外話,另外一個答案里說速度的差別, 實際上,primense的理論上的幀率也可以提高很多, 只要用更亮的光源, 更好感光度的相機和更快處理速度的晶元,提高到100HZ從技術上講應當沒有太多障礙。 但是這幾年貌似一直鎖定在剛推出的狀態, 所謂的二代產品提高很有限,是否當年一家獨大以後有點不思進取,結果在xbox下一代競爭後敗下陣來就不得而知了。
Update: 前面那個答案說的更清楚些, TOF是應當是靠測量相位來檢測深度, 這解釋了為什麼初代TOF產品近處的深度有擴散(干涉)現象,精度做不高。 現在應當是解決了這個問題(更好的光學成像加工工藝?)
原來的答案因為沒看清問題,所以錯了,抱歉。我沒發現如何刪除答案...所以就先寫個簡單的答案。
就我目前知道的來說,Xbox One Kinect 和上代 Kinect 的一個主要不同點在於它使用了 TOF 相機(Time-of-flight camera)來獲取深度圖(Depth map),上代使用的是PrimeSense的基於紅外結構光的技術來獲取深度圖。
TOF相機的優點wiki上也說的不錯。不過我覺得最重要的一點是速度,wiki上說TOF相機可以捕160幀每秒的深度圖,而根據PrimeSense的這個文檔(http://www.primesense.com/wp-content/uploads/2012/12/PrimeSenses_3DsensorsWeb.pdf),它的幀率只能達到60幀每秒。
kinect一代和二代最大的區別要數測量方法,一代是結構光而二代是TOF,使用TOF功耗大,演算法要求高,體積偏大,小型化較難,國內體感攝像頭一般都採用結構光,例如intel的real sense和華捷艾米的IMI體感攝像頭。
下面上一張IMI體感攝像頭的斑點圖
深度圖清晰度也還可以
推薦閱讀:
TAG:Kinect | 體感技術 | PrimeSense |