文章目录
- create_surface_model 创建匹配模型
- find_surface_model 查找3D模型
- get_surface_matching_result 获取曲面匹配结果的详细信息
- 示例
create_surface_model 创建匹配模型
create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)
### ObjectModel3D (输入控制)
- **类型**: 整数数组
- **描述**: 3D对象模型的句柄。
- **解释**:
- 这个参数是一个整数数组,表示一个或多个3D对象模型的句柄。通过这些句柄,可以访问和操作这些3D对象模型。
### GenParamName (输入控制)
- **类型**: 字符串数组
- **描述**: 查询的3D对象模型的通用属性的名称。
- **默认值**: 'num_points'
- **可选值**:
- 'blue': 蓝色通道的值。
- 'bounding_box1': 轴对齐的边界框。
- 'center': 对象的中心点。
- 'diameter_axis_aligned_bounding_box': 轴对齐边界框的直径。
- 'extended_attribute_names': 扩展属性的名称。
- 'green': 绿色通道的值。
- 'has_distance_computation_data': 是否包含距离计算数据。
- 'has_extended_attribute': 是否包含扩展属性。
- 'has_lines': 是否包含线条。
- 'has_point_normals': 是否包含点法线。
- 'has_points': 是否包含点。
- 'has_polygons': 是否包含多边形。
- 'has_primitive_data': 是否包含原始数据。
- 'has_primitive_rms': 是否包含原始数据的均方根误差。
- 'has_segmentation_data': 是否包含分割数据。
- 'has_shape_based_matching_3d_data': 是否包含基于形状的3D匹配数据。
- 'has_surface_based_matching_data': 是否包含基于表面的匹配数据。
- 'has_triangles': 是否包含三角形。
- 'has_xyz_mapping': 是否包含XYZ映射。
- 'lines': 线条数据。
- 'mapping_col': 映射列。
- 'mapping_row': 映射行。
- 'neighbor_distance': 邻居距离。
- 'num_extended_attribute': 扩展属性的数量。
- 'num_lines': 线条的数量。
- 'num_neighbors': 邻居的数量。
- 'num_neighbors_fast': 快速计算的邻居数量。
- 'num_points': 点的数量。
- 'num_polygons': 多边形的数量。
- 'num_primitive_parameter_extension': 原始参数扩展的数量。
- 'num_triangles': 三角形的数量。
- 'point_coord_x': 点的X坐标。
- 'point_coord_y': 点的Y坐标。
- 'point_coord_z': 点的Z坐标。
- 'point_normal_x': 点法线的X分量。
- 'point_normal_y': 点法线的Y分量。
- 'point_normal_z': 点法线的Z分量。
- 'polygons': 多边形数据。
- 'primitive_parameter': 原始参数。
- 'primitive_parameter_extension': 原始参数扩展。
- 'primitive_parameter_pose': 原始参数姿态。
- 'primitive_pose': 原始姿态。
- 'primitive_rms': 原始数据的均方根误差。
- 'primitive_type': 原始类型。
- 'red': 红色通道的值。
- 'reference_point': 参考点。
- 'score': 分数。
- 'triangles': 三角形数据。
- **解释**:
- 这个参数指定要查询的3D对象模型的通用属性的名称。通过这些名称,可以获取相应的属性值。
### GenParamValue (输出控制)
- **类型**: 字符串/整数/实数数组
- **描述**: 通用参数的值。
- **解释**:
- 这个参数是一个数组,包含查询的通用属性的值。根据查询的属性名称,返回相应的字符串、整数或实数值。
find_surface_model 查找3D模型
find_surface_model( : : SurfaceModelID, ObjectModel3D, RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
### SurfaceModelID (输入控制)
- **类型**: 整数
- **描述**: 表面模型的句柄。
- **解释**:
- 这个参数是一个整数,表示表面模型的句柄。通过这个句柄,可以访问和操作表面模型。
### ObjectModel3D (输入控制)
- **类型**: 整数
- **描述**: 包含场景的3D对象模型的句柄。
- **解释**:
- 这个参数是一个整数,表示包含场景的3D对象模型的句柄。通过这个句柄,可以访问和操作场景。
### RelSamplingDistance (输入控制)
- **类型**: 实数
- **描述**: 相对于表面模型直径的场景采样距离。
- **默认值**: 0.05
- **建议值**: 0.1, 0.07, 0.05, 0.04, 0.03
- **限制**: 0 < RelSamplingDistance < 1
- **解释**:
- 这个参数指定相对于表面模型直径的场景采样距离。通过这个值,可以控制场景采样的密度。
### KeyPointFraction (输入控制)
- **类型**: 实数
- **描述**: 用作关键点的采样场景点的比例。
- **默认值**: 0.2
- **建议值**: 0.3, 0.2, 0.1, 0.05
- **限制**: 0 < KeyPointFraction <= 1
- **解释**:
- 这个参数指定用作关键点的采样场景点的比例。通过这个值,可以控制关键点的数量。
### MinScore (输入控制)
- **类型**: 实数/整数
- **描述**: 返回姿态的最小分数。
- **默认值**: 0
- **限制**: MinScore >= 0
- **解释**:
- 这个参数指定返回姿态的最小分数。通过这个值,可以筛选出符合分数要求的姿态。
### ReturnResultHandle (输入控制)
- **类型**: 字符串
- **描述**: 在SurfaceMatchingResultID中启用返回结果句柄。
- **默认值**: 'false'
- **建议值**: 'true', 'false'
- **解释**:
- 这个参数指定是否在SurfaceMatchingResultID中返回结果句柄。如果设置为'true',则返回结果句柄;如果设置为'false',则不返回结果句柄。
### GenParamName (输入控制)
- **类型**: 字符串数组
- **描述**: 通用参数的名称。
- **默认值**: []
- **可选值**:
- '3d_edge_min_amplitude_abs': 3D边缘最小振幅绝对值。
- '3d_edge_min_amplitude_rel': 3D边缘最小振幅相对值。
- '3d_edges': 3D边缘。
- 'dense_pose_refinement': 密集姿态优化。
- 'max_overlap_dist_abs': 最大重叠距离绝对值。
- 'max_overlap_dist_rel': 最大重叠距离相对值。
- 'num_matches': 匹配数量。
- 'pose_ref_dist_threshold_abs': 姿态优化距离阈值绝对值。
- 'pose_ref_dist_threshold_rel': 姿态优化距离阈值相对值。
- 'pose_ref_num_steps': 姿态优化步数。
- 'pose_ref_scoring_dist_abs': 姿态优化评分距离绝对值。
- 'pose_ref_scoring_dist_rel': 姿态优化评分距离相对值。
- 'pose_ref_sub_sampling': 姿态优化子采样。
- 'pose_ref_use_scene_normals': 姿态优化使用场景法线。
- 'scene_normal_computation': 场景法线计算。
- 'score_type': 评分类型。
- 'sparse_pose_refinement': 稀疏姿态优化。
- 'viewpoint': 视点。
- **解释**:
- 这个参数指定通用参数的名称。通过这些参数,可以进一步控制表面匹配的过程。
### GenParamValue (输入控制)
- **类型**: 字符串/实数/整数数组
- **描述**: 通用参数的值。
- **默认值**: []
- **建议值**: 0, 1, 'true', 'false', 0.005, 0.01, 0.03, 0.05, 0.1, 'num_scene_points', 'model_point_fraction', 'num_model_points', 'fast', 'mls'
- **解释**:
- 这个参数指定通用参数的值。通过这些值,可以进一步控制表面匹配的过程。
### Pose (输出控制)
- **类型**: 实数/整数数组
- **描述**: 表面模型在场景中的3D姿态。
- **解释**:
- 这个参数是一个包含3D姿态的数组。每个姿态描述了表面模型在场景中的位置和方向。
### Score (输出控制)
- **类型**: 实数数组
- **描述**: 找到的表面模型实例的分数。
- **解释**:
- 这个参数是一个实数数组,包含找到的表面模型实例的分数。每个分数对应一个表面模型实例。
### SurfaceMatchingResultID (输出控制)
- **类型**: 整数数组
- **描述**: 匹配结果的句柄,如果ReturnResultHandle设置为'true'。
- **解释**:
- 这个参数是一个整数数组,表示匹配结果的句柄。如果ReturnResultHandle设置为'true',则返回结果句柄;否则不返回结果句柄。
get_surface_matching_result 获取曲面匹配结果的详细信息
get_surface_matching_result( : : SurfaceMatchingResultID, ResultName, ResultIndex : ResultValue)
### SurfaceMatchingResultID (输入控制)
- **类型**: 整数
- **描述**: 表面匹配结果的句柄。
- **解释**:
- 这个参数是一个整数,表示表面匹配结果的句柄。通过这个句柄,可以访问和操作表面匹配结果。
### ResultName (输入控制)
- **类型**: 字符串数组
- **描述**: 结果属性的名称。
- **默认值**: 'pose'
- **可选值**:
- 'key_points': 关键点。
- 'pose': 姿态。
- 'sampled_3d_edges': 采样的3D边缘。
- 'sampled_scene': 采样的场景。
- 'score_refined': 优化后的分数。
- 'score_unrefined': 未优化的分数。
- **解释**:
- 这个参数指定要查询的结果属性的名称。通过这些名称,可以获取相应的属性值。
### ResultIndex (输入控制)
- **类型**: 整数
- **描述**: 匹配结果的索引,从0开始。
- **默认值**: 0
- **建议值**: 0, 1, 2, 3
- **限制**: ResultIndex >= 0
- **解释**:
- 这个参数指定匹配结果的索引。索引从0开始,表示第一个匹配结果。通过这个索引,可以访问特定的匹配结果。
### ResultValue (输出控制)
- **类型**: 整数/字符串/实数数组
- **描述**: 结果属性的值。
- **解释**:
- 这个参数是一个数组,包含查询的结果属性的值。根据查询的属性名称,返回相应的整数、字符串或实数值。
示例
* ***********************************************************************
* Example for Surface-Based 3D Matching
*
* This example shows Surface-Based 3D Matching on data taken with a
* Time-of-flight camera (TOF/PMD).
* The model for the matching is created from a reference view of the
* object, i.e., no CAD model is used.
* The created model is then searched for in a number of 3D scenes.
*
* The example demonstrates how to use the operators
* xyz_to_object_model_3d,
* create_surface_model, and
* find_surface_model.
*
* ***********************************************************************
*
* Initialization
dev_update_off ()
gen_empty_obj (EmptyObject)
ImagePath := 'time_of_flight/'
dev_close_window ()
*
* ***********************************************************************
* Offline-Phase: Model generation from a reference XYZ Image
* ***********************************************************************
*
* Load the XYZ images with the reference object
* 读取图片
read_image (Image, ImagePath + 'engine_cover_xyz_01')
* 分成3通道
decompose3 (Image, Xm, Ym, Zm)
* Remove the background plane
* 阈值处理
threshold (Zm, ModelZ, 0, 650)
* Find connected regions
* 分割
connection (ModelZ, ConnectedModel)
* Select the regions for the ROI of the reference model
* 选择物体
select_obj (ConnectedModel, ModelROI, [10,9])
* 进行联合
union1 (ModelROI, ModelROI)
* Create the ROI
* 裁剪获取Xm
reduce_domain (Xm, ModelROI, Xm)
*
* Display model image and ROI
dev_open_window_fit_image (Zm, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Zm)
dev_set_line_width (2)
dev_set_draw ('margin')
dev_set_color ('green')
dev_display (ModelROI)
disp_message (WindowHandle, 'Create surface model from XYZ image region', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_clear_window ()
*
* Create the surface model from the reference view
* 将3D点转换为3D模型
xyz_to_object_model_3d (Xm, Ym, Zm, ObjectModel3DModel)
visualize_object_model_3d(WindowHandle, ObjectModel3DModel, [], [], [], [], [], [], [], PoseOut1)
* 创建匹配模型
create_surface_model (ObjectModel3DModel, 0.03, [], [], SFM)
*
* Display the model
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
*
Message := 'Surface model'
visualize_object_model_3d (WindowHandle, ObjectModel3DModel, [], [], [], [], Message, [], Instructions, PoseOut)
*
* ********