DepthPano-TOG2020 学习整理(一)——有关全景图的三维场景重建

Noise-Resilient Reconstruction of Panoramas and 3D Scenes using Robot-Mounted Unsynchronized Commodity RGB-D Cameras论文阅读(一)

本文核心思想

    文章核心思想是通过构建全景图来实现大型室内场景模型的三维重建,全文主要分为两个部分,第一部分是有关全景图的重建,即panorama construction,第二部分是全景图的整合,即panorama integration,通过几张全景图来实现室内场景的三维重建。

第一阶段,全景图的构建
在这里插入图片描述
第二阶段,通过对多张全景图的整合实现室内场景的三维重建(下图是通过6张全景图实现的)
在这里插入图片描述

前言

    作者提出了一种two-stage的方法,即如上所述,先构建三维全景图,然后再将其拼接起来以进行大型室内场景的抗噪三维重建。全景图的获取是通过基于Turtlebot3机器人平台的多个非同步的RGB-D相机实现的,这些相机可以在场景中的不同位置执行原位旋转,作者在论文中提出了同时跟踪这些不同步相机的解决方案。之后,在将原始帧整合到等矩形全景图的过程中,作者从分配给相同像素的多次测量中得到不确定性估计,这对后面噪声模型的建模以及提高全景图乃至整个全局的几何质量起到了很大作用。

论文解决的两大问题

不同步相机的校准与同步问题

    通过3D-3D的方式构建360°的全景图的技术已经相当成熟,而对于通过单个RGB-D相机实现的技术,当其传感器运动时的自由度受到限制时,会影响视野,因此无法涵盖大部分的球形全景图。可以通过利用多个RGB-D相机来解决视野狭窄这一问题,但是由此会引入新的问题就是不同步相机之间的校准以及同步问题。利用多台相机进行全景扫描的首要问题就是如何恢复这些RGB-D帧的相对姿势,但是在没有外部定位传感器可用的情况下,或者很难对定制的装配进行精确的校准时,从技术上解决这一问题的另一种选择就是依靠视觉功能进行跟踪。但不幸的是,大多数的商品深度传感器不支持快门同步,而如果忽略timestamps期间的运动而强行进行分组会导致未对准的情况,如下图所示。
在这里插入图片描述
    对于此问题,论文实现的解决策略是基于由in-place旋转机器人驱动的多个相机的运动共识来实现协作扫描。使得相机与及机器人保持同轴度,这样就可以在不依赖于同步性或显着地标共现的情况下,共同得出其状态。这是通过在因子图优化框架下的几种新颖的正则化约束下实现的。如下图所示,其装配实现方案。
在这里插入图片描述

传感器固有噪声问题

    当使用高质量的激光扫描仪时这种噪声并不严重,但对于商品RGB-D帧而言这将变得至关重要。先前的工作都是在帧集成期间处理噪声,如 TSDF等,但很少有人进一步考虑了在帧配准期间噪声的影响。此外,在全景图构建后对深度噪声进行建模非常重要,因为全景图的对齐以及最终的合成都会受到这种不确定性测量的影响。因此,如何通过有效且适当组织的结构表示扫描数据并对其噪声进行建模也是全景图构建过程中的重要任务。
    对于这一问题,作者选择通过等边矩形图像格式来融合颜色和深度测量,以便在全景域中有效地组织和估计每个像素的不确定性。借助这种有组织的图像结构及其噪声模型,他们在这种图像域中就数据一致性来优化重建全景图的几何质量,并进一步考虑了随后的全景图配准以及和最终的全景图整合过程中噪声的影响。

假设与概述

    该论文的方法基于一个载有多个不同步RGB-D相机的扫描平台。在扫描之前,需要安装一个额外的防偏摄相机(鱼眼相机)进行联合校准,以在所有颜色和深度传感器上获取其内在和外在参数。然后,作者使用CLAMS 以保持原始深度测量不变。在扫描期间,要求平台在多个视点执行原位旋转。特别是对于轮式机器人,这可以通过为其两个驱动轮在不同方向上设置相同的速度来实现。对于每个RGB-D传感器,使用校准的外部参数将其深度帧映射到其对应的颜色帧。因此,输入即为一组由不同扫描位置聚类的带时间戳的RGB-D图像。
    论文的重建算法基于以下两个先决条件:(1)同轴度:所有摄像机的旋转轴应与静态轴同轴进行,这取决于装配时的平整地面。(2)平滑度:旋转也应平稳进行,这意味着在扫描过程中角加速度应保持较低。
    尽管由于不可预测的机器人晃动可能无法完全满足同轴度和平滑度的先决条件,但文中所述方法可以tolerant这些具有可配置参数的实际现象。(具体解释为panorama construction阶段的因子图的表示)

    重建过程分两个阶段执行,即全景图构建,该过程将in-place地将RGB-D流stitches到包含颜色,深度和附加每个像素深度不确定性的individual 360°全景图(如上图第一幅图所示 )。以及全景图集成,后者register and integrate 这些全景图以形成场景的完整3D表示(如上图第二幅图所示)。

    具体到每个阶段包含两个阶段:姿势估计和数据融合。在第一个阶段的姿态估计阶段中,文中的算法在考虑运动一致性的情况下使用额外的正则化来执行束调整(BA模型,因子图优化),以解决帧和旋转轴的姿态。然后,在其数据融合阶段中,作者将原始颜色和深度测量值变形为所需全景图的等矩形表示形式,以对传感器噪声进行统计建模,并进行优化以保持其几何质量。在第二阶段中,姿势估计阶段是通过将几何相关的空间相关全景图一致对齐以解决它们的混合不确定性,同时结合原始表面分布不确定性和之前提取的测量不确定性来完成。最后,在其数据融合阶段,基于这种混合的不确定性知识,这些对齐的全景图的估计姿势及其不确定的深度测量值将用于修改Final密集点云,以表示整个场景。

PS.有关于具体Consistency Regularization for Panoramic Scanning阶段的阅读分析笔记较为繁杂,可见下一篇博客,这里可以放一张因子图的注释图。
在这里插入图片描述

### ToG2 三维分割技术概述 ToG2 是指《ACM Transactions on Graphics》期刊中的相关内容,其涉及的三维分割技术主要依赖于几何结构和形状表示方法。这些技术通常用于解决复杂的图像分割问题以及三维模型的重建。 #### Graph Cuts 方法的应用 Graph Cuts 技术最初被设计用来处理交互式的图像分割问题[^1]。它通过构建图模型并将像素分配到不同的节点上,利用最小割/最大流算法来优化能量函数。这种方法能够有效地应用于三维数据集的分割任务中。 对于三维分割而言,Graph Cuts 的核心思想在于定义合适的能量项,包括平滑性和数据致性约束条件。具体来说,在三维空间内,可以通过以下方式实现: - **能量函数的设计**:引入区域相似度、边界强度等因素作为权重参数; - **图结构建立**:将体素视为顶点,并连接相邻体素形成边;每条边上赋予特定代价值反映两者的关联程度; - **求解过程**:采用成熟的最短路径或者网络流算法寻找全局最优解。 ```python import numpy as np from scipy.sparse import csr_matrix from sklearn.utils.graph_shortest_path import graph_shortest_path def construct_graph(data_volume): """ 构建基于输入体积数据的图结构 参数: data_volume (numpy.ndarray): 输入的三维数据数组 返回: adjacency_matrix (csr_matrix): 邻接矩阵形式的图表示 """ # 假设简单的六邻域关系 rows, cols = [], [] for z in range(1, data_volume.shape[0]-1): for y in range(1, data_volume.shape[1]-1): for x in range(1, data_volume.shape[2]-1): current_idx = z * data_volume.shape[1]*data_volume.shape[2] + \ y * data_volume.shape[2] + x neighbors = [ (z-1,y,x), (z+1,y,x), (z,y-1,x), (z,y+1,x), (z,y,x-1), (z,y,x+1) ] for nz, ny, nx in neighbors: neighbor_idx = nz*data_volume.shape[1]*data_volume.shape[2]+ny*data_volume.shape[2]+nx if 0<=nz<data_volume.shape[0] and 0<=ny<data_volume.shape[1] and 0<=nx<data_volume.shape[2]: weight = abs(int(data_volume[z][y][x]) - int(data_volume[nz][ny][nx])) rows.append(current_idx) cols.append(neighbor_idx) values = [1]*len(rows) # 这里简化为单位权值 adjacency_matrix = csr_matrix((values,(rows,cols)), shape=(np.prod(data_volume.shape),)*2) return adjacency_matrix def compute_segmentation(graph, source_points, sink_points): """ 使用最短路径计算分割结果 参数: graph (csr_matrix): 图结构 source_points (list of int): 源点索引列表 sink_points (list of int): 汇点索引列表 返回: labels (numpy.ndarray): 分割后的标签阵列 """ dist_matrix = graph_shortest_path(graph, directed=False) label_source = np.argmin(dist_matrix[source_points], axis=0) label_sink = np.argmin(dist_matrix[sink_points], axis=0) final_labels = np.where(label_source < label_sink, 1, 0).reshape(-1,) return final_labels.reshape(*graph.shape[:3]) ``` 上述代码展示了如何从给定的数据集中创建个适合应用 Graph Cuts 算法的基础框架。需要注意的是实际操作过程中可能还需要考虑更多细节调整以适应不同应用场景的需求。 #### 其他替代方案简介 除了 Graph Cuts 外还有多种可供选择的技术可用于完成类似的三维分割工作: - Random Walker: 利用随机游走理论决定各位置归属哪个类别; - Geodesic Shortest Path: 寻找表面上两点间沿表面测地线距离最近路线从而辅助判断分类情况; - Level Set Methods: 动态演化界面直至达到稳定状态进而得到最终划分结果. 以上提到的各种策略各有优劣之处需根据具体情况选取最适合的种加以运用.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值