关于web结合单目以及RGBD图像重建的设计(二)

关于web结合单目以及RGBD图像重建的设计(二),第1张

前文已经介绍了前端以及深度图的构建,这里介绍一下RGBD相机中点云的生成。使用RGBD图像进行点云构建时,我本来想要继续使用nodejs以及c++的方法,但是一些后端优化比如一些因子图相关的库就是加载不出来,我使用ldd发现在node文件中找不到依赖库,所以我只好换了另一种方法,那就是使用c++搭建服务器,使用C++搭建服务器好像一直没有什么统一的框架,我查了一个wfrest进行使用,我使用这个框架的主要原因是它的一些方法和nodejs很像,其实要是图片流很快的话,可能以后使用socket会更好一些。

将图片传给c++后我使用了PNP方法对位姿进行计算然后使用g2o对其进行优化,但在过程中需要判断是否是关键帧,判断方法为查看所匹配的特征点数量以及对位姿的估算,假如匹配到的特征点数量很多并且位姿很接近,那就不是关键帧了。优化过程的g2o使用位姿的边进行优化,其中内部的详细逻辑我并不是很清楚,只是按照一般的API说明文档进行的 *** 作。我在这里使用了两个地图,一个是稀疏的关键点局部地图,用于对相对位姿的计算。而另一个则是用于建图的。关键点局部地图需要将其中与当前帧相匹配的关键点取出并进行匹配,然后使用pnp方法计算并优化,假如关键点中匹配的点过少,可以从观测的RGBD数据中取出一些点放入局部地图中,一些很久未被匹配到的点可以进行删除。关于建图的点云,我则是对彩色图中的每一点都找到其对应的深度并求出其相对于世界的空间点坐标,将所有点求出后进行过滤在放入点云中,而在输出点云时,同样可以进行一次过滤,另外,使用智能指针形式可以有效的节省内存。而在传输过程中每个点都携带有它们的空间坐标以及RGB信息,使用nodejs接收到相关信息后再次转发给前端,这里我直接使用了字符串的形式,其实与数组差别不大,与JSON相比还能节省一下数据量,不需要标XYZRGB等,每隔六个就算一个点,传输给前端后使用three.js进行解析,three.js有专门的点云API,将点的坐标传输给一个专门的BUFFER,而颜色传输给另一个BUFFER,然后将BUFFER传输给相应的点云组件,并且控制一个每秒更新50次的animate函数,因为需要使用扩展的轨道控制文件从而利用鼠标能够更加轻松看清点云的全貌。

 算是一个点云的大致样例。

通过主机对nodejs以及c++的使用,从而通过RGBD实现了对相机的位姿进行计算定位以及建图后传输给前端并使用浏览器生成彩色的点云。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/727517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存