2013-09-26 61 views
2

我無法使用圖像採集工具箱同步顏色和深度圖像。Matlab使用Kinect的顏色/深度同步採集

目前,我只是試圖將兩個流都記錄到二進制文件中而不丟幀或丟失同步。

我不會在錄製過程中進行渲染。

用於啓動按鈕的代碼:

colorVid = videoinput('kinect',1); depthVid = videoinput('kinect',2); 
colorVid.FramesPerTrigger = inf; depthVid.FramesPerTrigger = inf; 
triggerconfig([colorVid depthVid],'manual'); 

iatconfigLogging(colorVid,'Video/Color.bin'); 
iatconfigLogging(depthVid,'Video/Depth.bin'); 

start([colorVid depthVid]); 

pause(2); % this is to be sure both sensor are start before the trigger 

trigger([colorVid depthVid]); 

其中iatconfigureLogging()是從here

和停止按鈕只是做

stop([colorVid depthVid]); 

由於超高動力學的幀速率是30FPS,我們不能改變這一點,我使用FrameGrabInterval來模擬它。

但是,當我結束像5FPS,我不能記錄深度和顏色,並保持幀同步超過20-25秒。除了1 FPS,2-3分鐘後同步結束,我正在尋找至少10-15分鐘的採集。我正在尋找類似flushdata(obj,'triggers')的東西;現在,但我不知道如何保持30 FPS與日誌記錄。

預先感謝任何人會給予的東西。

回答

0

據我所知,你不能通過觸發來同步流,因爲它們在硬件中不同步。我試了一下,我能想到的最好的方法是給每個流打上時間戳,扔掉那些距離太遠的幀對。我注意到經典的頻率偏移效應,即流與其週期之間的差異的反向頻率進入和退出同步。扔掉幀的明顯缺點是你得到一個不連續的流。 你可以得到時間戳信息使用

[data time] = getdata(vid,1); 
+0

是的,我知道,你可以檢索骨架部分的數據,時間和元數據。也許我會像你說的那樣嘗試。檢查是否同時印章我有相同的框架,否則我真的不知道我會怎麼做。我試圖獲得30 FPS,因爲它的相機規格,但我的需求大約是12-15 FPS,但這也不工作,所以...你有代碼示例登錄/獲得相同的時間戳幀?如果不是,那好吧:) – Vuwox

+0

我粘貼上面的代碼應該給你幀時間戳...? – twerdster

+0

它給出了獲取幀的時間,並且因爲當你啓動兩個流時,傳感器在另一個之前啓動,所以幀沒有相同的時間啓動,並且當幀同步時自動很難說。手動,我可以在不同的時間(開始或結束)發現一些問題,但是現在嘗試編寫一些功能強大的代碼並不那麼容易:P – Vuwox