zoukankan      html  css  js  c++  java
  • 基于RGBD摄像机的三维重建探究

    作者:艾孜尔江·艾尔斯兰

    随着计算机和人工智能技术的发展,三维(3D)重建是计算机视觉中一项基本功能。3D重建是建立一个适合计算机表示和处理3D对象的数学模型。在计算机视觉中,3D重建是指从单视图或多视图图像重建3D信息的过程。由于单个视图的信息不完整,因此
    3D 重建需要使用经验知识。多视图 3D
    重建(类似于人类的立体相机)相对容易。笔者通过查询到的资料得知,多视图 3D
    重建方法的基本步骤可以分为两类,首先是校准摄像机,即计算摄像机的像素坐标系和世界坐标系之间的关系,然后使用多个
    2D 图像重建 3D 点云。

    RGBD相机作为一种新型的摄像机,可以直接提供图像的深度信息,简化了3D密集重建。对于3D点云重建来说,最重要的是如何确定图片之间的旋转和平移关系,这直接影响到点云位置的准确性。通常来说,分别有直接方法和特征点方法来获得两帧摄像机之间的运动关系。所谓的直接方法就是通过计算图像的最小光度误差来计算两帧图片之间的关系。由于缺少图像特征点,通过该方法很难从特征点中得知具体信息,但在这种困难情况之下它相对来说具有更好的鲁棒性。由于直接方法使用所有图像信息,因此可以执行密集的
    3D
    重建,但是它也存在了一个致命性缺点——当摄像机移动过快时,要素点很容易丢失。而所谓的特征点方法则主要通过识别图像中比较具有代表性的点来提取和匹配特征点,并通过PnP求解两帧转换关系。特征点方法在两帧图片中获取代表性角点以进行特征匹配,对成功配对的点进行约束,通过求解基本矩阵来计算两帧之间的运动关系。但是正是因为该方法仅使用部分图像信息,它也只能完成稀疏点云映射。据称,要素点通常分为角点、块和边。角点是最容易由计算机通过计算而得到的最健壮的功能点,也正因此,基于角点检测成为目前比较主流的特征点方法。

    笔者在调查中发现,实时三元重建系统的重要研究方向主要是Fusion系列。由于摄像机的姿势估计通常会出现错误,因此,为了生成与真实对象一致的点云图像而叠加多个图像的点云时,这种方法也可能会出现故障或失真。为了避免连续积累的误差,最终实现更好的3D重建模型,笔者得知可以利用捆绑调整(BA:Bundle
    Adjustment)的方式优化相机姿势。捆绑调整,主要原理是利用共视点的3D坐标与相机内参矩阵,根据PnP计算位姿R、t(这时候的位姿是有误差的),利用R、t及相机的投影模型可以计算出这些特征点在第二帧图像上的投影(仍旧会有误差),本身这些点在第二帧图像上有真实投影,利用这两个投影构建函数进行优化可以优化位姿,以尽最大可能减少误差。可以简单地理解为BA的本质就是一个优化模型,其目的是最小化重投影误差。

    对于颜色和深度,快速相机运动会导致帧间距离大,难以实现进行图像特征匹配和深度对齐。资料显示,这一问题可以通过引入IMU(惯性测量单元)信息来解决。用加速度计和陀螺仪收集,进一步结合具有色彩和深度信息,强健的相机姿态将室内场景的估计和几何融合结合起来予以实现。

    我记得在我们上计算机图形学课程时教授层为我们讲起过重建系统可以使用多台摄像机,并将它们均匀排列在一个笼子里,所有需要被重建的对象在这个布满摄像机的笼子里面,在外部信号的统一控制下实现对目标场景数据的同步采集,采用基于概率密度函数估计的方法进行深度图融合。融合后的各个视点的深度图传入PC集群进一步处理,实时生成所摄场景的三维空间点云。这种方式看似复杂,但却是相对简单的方式,通过多个摄像机就可以非常有效地重建三维物体。

  • 相关阅读:
    编写程序,验证string是ipV4地址
    TCP三次握手和四次挥手
    链表和数组的区别
    cookie和session的区别
    GET和POST的区别
    TCP和UDP的区别
    java HashMap和Hashtable的区别
    java 堆和栈的区别
    最小栈的实现
    关于几个位运算的算法分析
  • 原文地址:https://www.cnblogs.com/ezhar/p/13592426.html
Copyright © 2011-2022 走看看