在上一篇文章中,我寫到了如何將TUM數據生成BundleFusion所需要的數據集,生成的數據集如下圖中所示.并且是將每一組數據的groundtruth.txt中的位姿數據寫如到這里的pose文件中,作為每一幀圖像的先驗位姿.
今天我便將生成的數據集轉換為了.sens格式,然后運行bundlefusion算法,第一次嘗試很失敗,1400張圖像,最后只重建出了花瓶的一半,還有幾片葉子,我不知道哪里出了問題,首先是檢查一下數據格式是不是正確,圖像的名稱,?還有每一組數據集最后的info.txt文件的內容,檢查并沒有發現明顯的錯誤.然后我又調解了兩個配置文件中的一些參數,但是并不知道有可能是什么原因.最后我把目光停留在數據集的info.txt文件上,之前使用kinect相機,經過手動標定相機可以標定得到depthShift這個數據,但是現在我并不知道,也不知道TUM數據集的這個數值,然后我在代碼中搜索這個m_depthShift的用途,代碼是如下
for (unsigned int i = 0; i < getDepthWidth()*getDepthHeight(); i++) {const auto* d = getDepthFloat();std::cout << "d[" << i << "]: " << d[i] << std::endl;depth[i] = (unsigned short)ml::math::round((m_recordedData->m_depthShift * d[i]));}
讀取深度圖的深度數據,然后乘上?m_depthShift,我大致猜出來,他的作用了,
在最初的info.txt文件中我將m_depthShift設置為1000, ?但是重建不成功,我突然想到,我要查看一下,深度圖像的數值,于是我用imageJ來查看一下深度圖.
這是BundleFusion使用的SUN3D數據集中的一組數據的一對彩色圖和深度圖,當我把鼠標點在最左側的垃圾桶的上邊緣時,imgJ顯示1328,而根據彩色圖,目測也是1米多的樣子,所以也驗證了,該組數據集中的info.txt中的m_depthShift=1000.
?
?而對于TUM數據集,當我將鼠標放在圖片最前端的花盆上時,根據彩色圖,目測只有30cm的距離,但是imageJ上顯示的是2930,所以我感覺應該將info.txt中的m_depthShift設置為1000.
我將m_depthShift設置為10000后,重新生成?.sens數據集,這次就可以重建成功了.重建效果如下.
?