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

首先是架构的问题,我使用了本机电脑,虚拟机外加一台主机的架构,其中本机电脑使用了react+material UI作为单页面应用框架,使用three.js重现点云。本机电脑通过虚拟机接口转发与虚拟机沟通。而虚拟机上运行的是nodejs与c++的混合编译。主机进行了对点云的构建,源码地址如下

xingzhongyu/cv (gitee.com)https://gitee.com/xingzhongyu/cv

虚拟机上我用nodejs搭建了一个图片服务器,在获取不同的图像(可能还有位姿数据,可选)后将其地址使用js传给c++文件中的opencv提取特征点并且匹配,使用八点法以及SVD分解估算位姿(这里有个区分,可以直接以四元数加三维向量的形势输入相对于第一帧的位姿,或者进行估算,属于可选项)。接下来进行建图与估算,这里使用的是极限搜索与块匹配,但在块匹配中可能出现一波又一波相似度较高的峰值,这里可以使用高斯融合方法,其中均值使用三角化计算而方差假设出现了一个像素的误差然后与旧数据进行融合,假如方差小于一个定值即可认为深度已经收敛。通过这种方法计算出深度,然后给出深度图,这里需要将深度图转化为灰度图,使用深度图的数值统一比例转化为0-255之间的数值赋值给深度图即可,再将深度图以数组的形式通过c++传给nodejs,这里我直接在我的c++项目引入nodejs的库函数然后使用cmake编译,编译过程中使用nodejs中的api将其初始化为模块,然后编译时提醒编译器将其编译为.node文件,得到的文件便成为一个可以被nodejs识别并运行的文件,获取传回来的灰度图数组后再发回给前端,使用nodejs与c++混合编译的一大方便就是一方面可以利用c++的图片处理能力,另一方面可以使用nodejs实现方便的数据存储以及网络连接。将数据返回给前端利用的就是express。其实这里我将nodejs服务器分成了两个部分,一部分与c++连接,处理相关数据。而另一部分一方面负责图片与数据的存储,另一方面负责与上一部分以及浏览器的交流,使用了一些简单的跨域策略,另外,一些串联的异步请求也需要改为同步。

当然,前端部分其实还好,使用react的话能节省一些时间,我使用了material-ui以搭建布局,包括对drawer的使用以及如何将异步请求的数据传给画布组件并且进行渲染等等。

深度图渲染的过程中其实并未使用非线性优化,因为这种单目图像的偏差实在过大,所以使用了深度图而没有使用点云。而下一步使用RGBD相机的话就使用了后端优化以及对位姿的计算,另外,关于如何构建并将带有颜色的点云传输给浏览器然后进行渲染我将在下一篇进行详细的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值