主要包含两个算子create_surface_model和find_surface_model。
create_surface_model
create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
概述
创建一个surface的模型,来为后面的匹配做准备。该算子输入 xyz_to_object_model_3d或者read_object_model_3d得到的对象。这个算子非常重要,它可以决定后续的匹配是基于表面、边缘还是视角,不同的方法对应不同的要求,比如如果要计算2D/3D的边缘匹配结果来提升精度,则必须要求模型的点法向量向内,并且模型必须包含三角形或多边形网格
参数:
RelSamplingDistance
第一次采样间距设置,这个值是相对值,相对于当前3D点云模型的凸包直径,越小代表着得到的点数多。
GenParamName
model_invert_normals:
是否需要将点云模型的法向量取反,主要是针对于那些从CAD或者其他画图软件得到的3D模型,这些模型可能会与从硬件取得的点云法向量不同。
pose_ref_rel_sampling_distance:
第二次采样间距设置,这个值是相对值,相对于当前3D点云模型的凸包直径,越小代表着得到的点数多。
feat_step_size_rel
将3D点云模型的点对距离属性离散化,值也是相对于3D点云模型的凸包的直径。
feat_angle_resolution
将3D点云模型的点对角度属性离散化,值也是相对于360°来细化的。也就是说如果设置为30,那么就会把角度分为12个等级。
train_3d_edges
是否使用3D边缘属性来提升匹配精度。使用这个参数的时候需要模型包含网格和OpenGL。
个人理解:
两个采样参数会得到两个较小的点云模型,这两个模型第一个用来提取特征的,特征包括点对距离,点对角度,选择性附加边缘,使用这些特征去搜索。第二个点云用来求变换关系的。
find_surface_model
find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore,ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
概述
查找最佳匹配位姿。分了三个步骤:首先近似匹配,找到大概的位姿;第二步稀疏匹配,提升匹配精度;第三步稠密匹配,找到个更精确的位姿。
参数:
RelSamplingDistance
第一次采样间距设置,这个值是相对值,相对于当前3D点云模型的凸包直径,越小代表着得到的点数多。
采样关键点,这个值是相对值,相对于当前3D点云模型的凸包直径,越小代表着得到的点数多。
MinScore
得分阈值。
GenParamName(第一步)
num_matches:
搜索的最大数量。
max_overlap_dist_rel:
最大重叠距离。相对值
max_overlap_dist_abs
最大重叠距离。绝对值
scene_normal_computation
是否将法向量作为条件来搜索
3d_edges
使用边缘,输入边缘点云模型。
3d_edge_min_amplitude_rel
如果没有单独输入边缘模型,就会自动提取边缘,这个参数为提取边缘模型是使用的最小振幅,相对值。
3d_edge_min_amplitude_abs
如果没有单独输入边缘模型,就会自动提取边缘,这个参数为提取边缘模型是使用的最小振幅,绝对值。
GenParamName(第二步)
sparse_pose_refinement
是否启用第二步,稀疏姿态优化模型。
score_type
略。
pose_ref_use_scene_normals
是否使用法向量来优化姿态。
GenParamName(第三步)
dense_pose_refinement
是否启用第三步,密集姿态优化模型。
score_type
略。
pose_ref_num_steps
密集姿态优化迭代次数。
pose_ref_sub_sampling
密集姿态优化时采样距离。
pose_ref_dist_threshold_rel
密集姿态优化距离阈值,决定迭代是否收敛,相对值。
pose_ref_dist_threshold_abs
密集姿态优化距离阈值,决定迭代是否收敛,绝对值。
pose_ref_scoring_dist_rel
pose_ref_scoring_dist_abs
将距离计入得分。
score_type
略。
pose_ref_use_scene_normals
使用法向量优化姿态。
pose_ref_dist_threshold_edges_rel
pose_ref_dist_threshold_edges_abs
密集姿态优化边缘距离阈值,决定迭代是否收敛。
pose_ref_scoring_dist_edges_rel
pose_ref_scoring_dist_edges_abs
将边缘距离计入得分。
个人理解:
第一步主要是搜索相似的模型,并求以一个大致的变换姿态。
第二步将第一步找到的所有模型进行姿态优化,这个时候使用的是采样后的模型来优化的。
第三步将第二步通过得分筛选得到的模型继续进行优化,这个时候会使用所有的点模型,但是第三步会有一个独有的采样参数来控制效率。所谓的优化就是求变换矩阵,将得到的变换矩阵用于变换,求变换后的结果,判断是否在预期范围。这是一个迭代过程。