reconstruct_surface_stereo — 从校准的多视角立体图像重建表面

reconstruct_surface_stereo(Images : : StereoModelID : ObjectModel3D)

参数:

Images :多视角图像

StereoModelID :立体模型句柄

ObjectModel3D:处理结果表面句柄

先决条件:

1.获取校准后的相机设置模型并对其进行配置,StereoModelID创建时指定相机设置模型

2.创建一个立体模型,指定Method参数为'surface_pairwise' 或'surface_fusion' 

3.通过set_stereo_model_param 算子配置校正参数,然后使用set_stereo_model_image_pairs设置图像对

4.使用set_stereo_model_param为系统设置边界 (GenParamName='bounding_box')

5.使用set_stereo_model_param配置成对重构的参数

6.对于Method='surface_fusion'的模型,使用set_stereo_model_param配置融合算法的参数

7.使用校准后的相机获取图像,并将其收集到图像阵列中

8.使用reconstruct_surface_stereo对表面进行重建

9.使用 get_stereo_model_object和 get_stereo_model_object_model_3d查询和分析中间结果

10.使用set_stereo_model_param重新调整立体模型的参数,以改善质量和运行时的结果

Images 是校准后的相机获取的静态场景中的图片或同时拍摄的图像阵列,阵列中的图像数量必须与StereoModelID 中设置的相机数量相同

设置'bounding_box'边框参数的原因:

1.首先,它使用边界框的投影到给每个图像对的两个图像中,以估计MinDisparity(最小视觉差)和MaxDisparity(最大视觉差)的值,然后在内部调用binocular_disparity和binocular_disparity_ms时使用这两个值。

2.其次,基于边界盒计算了两两重构融合的默认参数,如果边界框被更改,他们将被重置。保卫羊应该仅围绕感兴趣的卷。否则,运行时间将大幅增加

3.第三,在ObjectModel3D中,位于边界框外的表面碎片将宝贝剪切,并且不会反悔。一个太大的边界框会导致MinDisparity和MaxDisparity之间产生较大差异,这通常会降低binocular_disparity, binocular_disparity_ms 或binocular_disparity_mg的执行速度,因此会重新reconstruct_surface_stereo

重构程序

视差信息通过内部调用disparity_image_to_xyz转换为来自相机的坐标系中的点,下一步,将这些点转换为与StereoModelID相关的相机设置模型中指定的公共坐标系。并与从其他图像对中获取的点一起存储在公共点云中

'surface_pairwise':在ObjectModel3D直接返回上述获取到的点云,对于每个点,通过相邻的3D点拟合一个平面来计算法向量。与 surface_normals_object_model_3d不同,相邻点不是在3D中确定的,而是通过使用X,Y和Z图像中相邻点在2D中确定的。然后将每个3D点的法向量设置为各自平面的法向量。此外,计算得到的视差分数附加到每个重建的3D点上,并作为扩展属性存储。还可以对变换后的坐标图像进行子采样。如果只处理一个图像对,并且不启用点网格化,reconstruct_surface_stereo在 ObjectModel3D中存储一个 'xyz_mapping'属性,该属性显示重建的3D点到该对的第一个图像的坐标的映射,这个属性在 segment_object_model_3d 或 object_model_3d_to_xyz (with Type='from_xyz_map')算子中需要,如果处理了多对图像对则不存储该属性,因为重建点是来自不同的图像对。

所获得的点云还可以在后处理步骤中进行网格划分,ObjectModel3D 返回的对象模型中包含网格的描述,所使用的网格划分算法取决于立体模型的类型,对于类型'surface_pairwise'只支持Poisson solver(泊松求解器) 可以通过 'point_meshing' 属性设置为'poisson'激活。它创建了一个不透水的网格,因此数据缺失的便面区域别一个内插网格覆盖

'surface_fusion':针对上述获取到的点云进行进一步处理。目的是获取一个良好的平滑表面,同时保持形式的保真。为此,对边界框进行采样,并将每个采样点分配到一个等值面(由距离为0的点组成)的距离。最终的距离之(以及等值面)是通过基于成对重建的点最小化误差函数得到的。这导致了所有相机对的重建点云的融合。

通过 set_stereo_model_param 设置'resolution'、 'surface_tolerance'、'min_thickness' 和'smoothing'计算等值面,边框内采样点之间的距离(在每个坐标方向上)可以通过参数'resolution'设置。参数'smoothing'通过加权误差函数中的两项来调节距离函数的 'jumpiness' :一方面是对成对重构得到的初始点云的保真度,另一方面是距离函数的总变化量。请注意,对于给定的数据集,'smoothing'的实际值必须通过反复试验来确定,以使其在视觉上令人满意。太小的值会导致将许多异常值集成到曲面中,即使该对象表面会出现许多跳转。太大的值会导致成对重构点云的保真度损失。通过两两重建得到的原始去曲面的保真度并不是在整个边界盒中保持的,而只是在摄像机对原始曲面的视锥(指的是一个实体形状,看起来像是一个顶部被平行地基切除的金字塔。这就是一个透视相机渲染时能看到的区域的形状)中保持的。对于给定的相机,这种视锥中的一个采样点被认为是在物体的外部(在表面的前面),或者是在物体内部(在表面的后面)如果它到初始曲面的距离超过了一个给定的值,这个值可以通过参数 'surface_tolerance'设置,初始曲面后被考虑的锥的长度可以通过参数'min_thickness' 进行设置。'min_thickness' 要大于'surface_tolerance'。

 ObjectModel3D模型的法向量是通过距离函数的梯度计算出来的,虽然'surface_fusion'方法需要设置比简单的成对重建更多的参数,但对表示对象表面的点云进行后处理可能会变得简单得多。用这种方法还可以很好的抑制离群值、平滑、等距次采样和孔填充。

着色3D模型

reconstruct_surface_stereo算子对3D模型进行重建时可以提供3D对象模型的颜色信息。颜色的计算取决于 set_stereo_model_param 选择的方法。在输出3D对象那个模型中,为每个3D点分配一个颜色值,该值由一个红色、绿色和蓝色通道组成,通道存储为'red','green'和'blue'的属性。如果使用多通道图,执行重建只使用第一通道,其余通道只用于计算颜色值。

立体模型配置的故障排除

1.以 'persistence' 持久性运行:如果启用了立体模型的持久性模式,则对reconstruct_surface_stereo的连续调用将存储中间的图像结果,可以通过get_stereo_model_object_model_3d 或get_stereo_model_object获取提供的额外信息。

2.检查校准的质量:如果相机的设置是通过calibrate_cameras获得的,那么它会以相机内部参数的标准偏差的形式存储关于相机校准的一些质量信息。这些信息会被携带到与立体模型相关联的摄像机设置模型中。可以通过先调用 get_stereo_model_param with GenParamName='camera_setup_model' 在调用 get_camera_setup_param with GenParamName='params_deviations'来检查相机参数的标准偏差。异常大的标准偏差值可能表明摄像机校准不佳。

在设置了立体模型 'persistence' 模式后,建议检查每个图像对的校正图像。修改后的图像由 get_stereo_model_object返回,带有一个相机索引对[From,To],分别指定参数PairIndex中的兴趣对和ObjectName中的'from_image_rect' 和'to_image_rect' 。如果对图像进行了适当的校正,那么在两幅校正后的图像中,所有相应的图像特征必须出现在同一行中,否则相机校正不良。

3.检查使用的包围框:确定包围狂在感兴趣的卷周围是紧的。该算法将边界框投影到每个图像对的两个图像中,从而估计出MinDisparity and MaxDisparity的值,然后再内部调用 binocular_disparity and binocular_disparity_ms使用这两个值。可以使用get_stereo_model_param查询这些值。使用gen_bounding_box_object_model_3d算子创建立体模型的3D对象模版,并结合重构的三维对象模型对齐进行检查,直观验证边界框。

4.提高视差图像的质量:设置立体模型的 'persistence' 模式后,检查每个图像对的视差和得分的图像。修改后的图像由 get_stereo_model_object返回,带有一个相机索引对[From,To],分别指定参数PairIndex中的兴趣对和ObjectName中的'from_image_rect' 和'to_image_rect'。

5.融合参数:如果 get_stereo_model_object_model_3d 检查的成对重建结果不能在改善,则开始调整融合参数。当融合参数仍然可以将其调整为合理的值时,成对重建应该是不可分辨的,在任何情况下,成对城建应该产生足够的点作为融合算法的输入

运行时长的调整

1.包围框要紧密围绕感兴趣的卷。

2.在校正过程中,立体模型参数 'rectif_sub_sampling' 控制子采样,将此因子设置为>1.0将降低经过姜正的图像与原始图像相比的分辨率,该因素直接影响所选视差发的后续性能,但会造成图像细节的丢失

3.Disparity parameters: binocular_disparity 、binocular_disparity_mg或binocular_disparity_ms参数的每一个参数都有一个对应的立体模型参数,其前缀为 'binocular_'这些参数或多或少的对性能产生影响。适当的调整它们可以提高性能

4.只重构视差值高的点:除了适应子采样外,还可以通过计算得到的视差值来排除三维重建中的点。用户应该首先通过使用GenParamName = 'score_image'调用 get_stereo_model_object来查询视差值的分数图像,根据这些值的分布情况,用户可以决定是否应该将分数低于某个阈值的差异排除在重构之外。可以通过 set_stereo_model_param 设置GenParamName = 'binocular_score_thresh'进行过滤。

5.X,Y,Z数据的子抽样:针对'surface_pairwise'方法,设置set_stereo_model_param的GenParamName='sub_sampling_step' 可以在重构算法的最后一步对X,Y,Z数据使用更大的子采样步骤。重构的数据会更稀疏,从而加快了后处理的速度

6.融合参数:针对'surface_fusion'方法,增大参数 'resolution' 将大大加快执行速度

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌里随记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值