将TUM数据集制作成BundleFusion数据集
在上一篇文章中,我寫到了如何將TUM數(shù)據(jù)生成BundleFusion所需要的數(shù)據(jù)集,生成的數(shù)據(jù)集如下圖中所示.并且是將每一組數(shù)據(jù)的groundtruth.txt中的位姿數(shù)據(jù)寫如到這里的pose文件中,作為每一幀圖像的先驗(yàn)位姿.
今天我便將生成的數(shù)據(jù)集轉(zhuǎn)換為了.sens格式,然后運(yùn)行bundlefusion算法,第一次嘗試很失敗,1400張圖像,最后只重建出了花瓶的一半,還有幾片葉子,我不知道哪里出了問題,首先是檢查一下數(shù)據(jù)格式是不是正確,圖像的名稱,?還有每一組數(shù)據(jù)集最后的info.txt文件的內(nèi)容,檢查并沒有發(fā)現(xiàn)明顯的錯(cuò)誤.然后我又調(diào)解了兩個(gè)配置文件中的一些參數(shù),但是并不知道有可能是什么原因.最后我把目光停留在數(shù)據(jù)集的info.txt文件上,之前使用kinect相機(jī),經(jīng)過手動標(biāo)定相機(jī)可以標(biāo)定得到depthShift這個(gè)數(shù)據(jù),但是現(xiàn)在我并不知道,也不知道TUM數(shù)據(jù)集的這個(gè)數(shù)值,然后我在代碼中搜索這個(gè)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]));}讀取深度圖的深度數(shù)據(jù),然后乘上?m_depthShift,我大致猜出來,他的作用了,
在最初的info.txt文件中我將m_depthShift設(shè)置為1000, ?但是重建不成功,我突然想到,我要查看一下,深度圖像的數(shù)值,于是我用imageJ來查看一下深度圖.
這是BundleFusion使用的SUN3D數(shù)據(jù)集中的一組數(shù)據(jù)的一對彩色圖和深度圖,當(dāng)我把鼠標(biāo)點(diǎn)在最左側(cè)的垃圾桶的上邊緣時(shí),imgJ顯示1328,而根據(jù)彩色圖,目測也是1米多的樣子,所以也驗(yàn)證了,該組數(shù)據(jù)集中的info.txt中的m_depthShift=1000.
?
?而對于TUM數(shù)據(jù)集,當(dāng)我將鼠標(biāo)放在圖片最前端的花盆上時(shí),根據(jù)彩色圖,目測只有30cm的距離,但是imageJ上顯示的是2930,所以我感覺應(yīng)該將info.txt中的m_depthShift設(shè)置為1000.
我將m_depthShift設(shè)置為10000后,重新生成?.sens數(shù)據(jù)集,這次就可以重建成功了.重建效果如下.
?
總結(jié)
以上是生活随笔為你收集整理的将TUM数据集制作成BundleFusion数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国内docker镜像网站
- 下一篇: 解析.sens数据集