C:\Users\Public\Documents\MVTec\HALCON-23.05-Progress\examples\hdevelop\3D-Object-Model\Creation
set_object_model_3d_attrib.hdev
- 在这个示例中,设置了一个三维物体模型的立方体的坐标。
- 其次,设置了三角形和颜色。第三,修改了一个三维物体模型的坐标。
- 第四,展示了移除已设置属性的过程。
- 在所有步骤之间,都会对生成的三维物体模型进行可视化。
获取3D的空体
gen_empty_object_model_3d
修改点的坐标
set_object_model_3d_attrib_mod
设置点坐标
set_object_model_3d_attrib
1、distance_object_model_3d
distance_object_model_3d
是 HALCON 中的一个操作符,用于计算一个三维对象模型(ObjectModel3DFrom
)中的点到另一个三维对象模型(ObjectModel3DTo
)中的点、三角形、多边形或基本体的距离。
主要功能
- 计算距离:该操作符会将计算得到的距离存储为
ObjectModel3DFrom
中名为“&distance”
的扩展属性。此属性可以使用get_object_model_3d_params
查询,也可以通过select_points_object_model_3d
等操作符进行处理。 - 目标数据选择:目标数据(点、三角形、多边形或基本体)是基于
ObjectModel3DTo
中包含的属性自动选择的。选择的优先顺序为:基本体、三角形、多边形和点。也可以通过通用参数“distance_to”
明确指定目标数据类型。 - 距离计算方法:根据目标数据类型,可以选择不同的方法来计算距离,例如线性搜索(
linear
)、KD树(kd-tree
)或体素(voxel
)方法。 - 性能优化:通过设置
MaxDistance
参数,可以限制计算的最大距离范围,从而提高计算效率。 - 其他功能:还可以计算带符号的距离(
signed_distances
),并返回每个点的最近点或三角形的索引(store_closest_index
)。
参数说明
ObjectModel3DFrom
:源三维对象模型句柄。ObjectModel3DTo
:目标三维对象模型句柄。Pose
:应用于ObjectModel3DFrom
的点的姿态。MaxDistance
:感兴趣的最大距离。GenParamName
和GenParamValue
:通用输入参数的名称和值,用于设置距离计算的具体行为。
应用场景
- 点云分析:计算点云中点到某个目标物体的距离。
- 目标检测:在复杂场景中检测与目标物体距离满足特定条件的点或区域。
- 三维建模:优化三维模型的拓扑结构,通过距离计算调整模型的细节。
如果需要更详细的示例或具体用法,可以参考 HALCON 的官方文档。
2、remove_object_model_3d_attrib
remove_object_model_3d_attrib
是 HALCON 中用于移除三维对象模型(3D Object Model)中指定属性的操作符。以下是其功能和使用方法的详细说明:
功能
remove_object_model_3d_attrib
用于从一个三维对象模型中移除指定的标准或扩展属性。该操作符会创建一个输入模型的副本,并在副本中移除指定的属性,然后返回修改后的模型。
参数
ObjectModel3D
:输入的三维对象模型句柄。Attributes
:要移除的属性名称。可以是单个属性名称,也可以是属性名称的数组。ObjectModel3DOut
:移除指定属性后生成的新三维对象模型句柄。
支持的属性
以下是可以通过 Attributes
参数指定的属性名称:
'point_normal'
:移除点的法向量。'triangles'
:移除三角形数据。'polygons'
:移除多边形数据。'lines'
:移除线数据。'xyz_mapping'
:移除与图像坐标的映射。'extended_attribute'
:移除所有用户定义的扩展属性。'primitives_all'
:移除所有基本体参数。'primitive_plane'
:移除平面基本体参数。'primitive_sphere'
:移除球体基本体参数。'primitive_cylinder'
:移除圆柱体基本体参数。'primitive_box'
:移除立方体基本体参数。'shape_based_matching_3d_data'
:移除基于形状的 3D 匹配数据。'distance_computation_data'
:移除距离计算数据。'score'
:移除评分属性。'red'
、'green'
、'blue'
:移除颜色属性。'original_point_indices'
:移除原始点索引。'all'
:移除除点坐标外的所有属性。
使用示例
remove_object_model_3d_attrib (ObjectModel3D, 'extended_attribute', ObjectModel3DOut)
此示例将从输入的三维对象模型 ObjectModel3D
中移除所有扩展属性,并将结果存储在 ObjectModel3DOut
中。
注意事项
- 如果指定的属性在模型中不存在,不会抛出异常。
- 该操作符不会修改原始的三维对象模型,而是返回一个新的模型。
如果需要修改原始模型而不是创建副本,可以使用 remove_object_model_3d_attrib_mod
。
3、remove_object_model_3d_attrib_mod
remove_object_model_3d_attrib_mod
是 HALCON 中的一个操作符,用于直接修改三维对象模型(3D Object Model),移除其指定的标准或扩展属性。与 remove_object_model_3d_attrib
不同的是,remove_object_model_3d_attrib_mod
不会创建模型的副本,而是直接在原始模型上进行修改。
功能
- 直接修改模型:
remove_object_model_3d_attrib_mod
会直接在输入的三维对象模型上移除指定的属性,而不是创建一个副本。 - 移除属性:可以移除标准属性(如点的法向量、三角形、多边形等)或用户定义的扩展属性。
参数
ObjectModel3D
:输入的三维对象模型句柄。Attributes
:要移除的属性名称列表。可以是单个属性名称,也可以是多个属性名称的数组。
使用示例
remove_object_model_3d_attrib_mod (ObjectModel3D, 'triangles')
此示例将直接从输入的三维对象模型 ObjectModel3D
中移除三角形数据。
注意事项
- 如果指定的属性在模型中不存在,操作符不会报错。
- 由于该操作符直接修改原始模型,因此在使用时需要谨慎,以避免意外丢失数据。
该操作符在处理三维对象模型时非常有用,尤其是在需要减少模型内存占用或清理不需要的属性时。
4、gen_empty_object_model_3d
gen_empty_object_model_3d
是 HALCON 中的一个操作符,用于生成一个空的三维对象模型(3D Object Model)。这个空的模型可以作为后续操作的基础,例如添加点、三角形或其他几何元素。
功能
- 创建空模型:生成一个不包含任何点、三角形或其他几何数据的三维对象模型。
- 基础模型:这个空模型可以用于后续的点云处理、三角化或其他 3D 操作。
参数
ObjectModel3D
:输出参数,存储生成的空的三维对象模型的句柄。
使用示例
gen_empty_object_model_3d (ObjectModel3D)
此示例将生成一个空的三维对象模型,并将其句柄存储在变量 ObjectModel3D
中。
应用场景
- 点云处理:在处理点云数据时,可以先生成一个空的三维对象模型,然后逐步添加点或几何元素。
- 三维建模:在构建复杂的三维模型时,可以先创建一个空模型,然后逐步添加和修改几何数据。
- 初始化:在需要从头开始构建三维模型时,可以使用
gen_empty_object_model_3d
初始化一个空模型。
注意事项
- 生成的模型是空的,不包含任何数据。如果需要添加点或其他几何元素,需要使用其他操作符,例如
add_points_object_model_3d
或add_triangles_object_model_3d
。 - 由于模型是空的,因此在使用之前需要确保后续操作能够正确地向模型中添加数据。
gen_empty_object_model_3d
是一个非常基础但重要的操作符,为后续的三维数据处理和建模提供了起点。
5、
set_object_model_3d_attrib_mod
set_object_model_3d_attrib_mod
是 HALCON 中的一个操作符,用于直接修改三维对象模型(3D Object Model)中的属性。这个操作符可以设置或修改模型的标准属性或扩展属性。与 set_object_model_3d_attrib
不同的是,set_object_model_3d_attrib_mod
直接在原始模型上进行修改,而不是创建一个副本。
功能
- 直接修改模型:直接在输入的三维对象模型上设置或修改指定的属性。
- 支持多种属性:可以设置或修改标准属性(如颜色、标签等)或用户定义的扩展属性。
参数
ObjectModel3D
:输入的三维对象模型句柄。Attribute
:要设置或修改的属性名称。Selector
:用于选择特定数据的字符串(可选)。例如,可以指定特定的点、三角形或基本体。Value
:要设置的属性值。
支持的属性
以下是可以通过 Attribute
参数设置的属性名称:
'color'
:设置模型的颜色。'disp_pose'
:设置模型的显示姿态。'alpha'
:设置模型的透明度。'extended_attribute'
:设置用户定义的扩展属性。- 其他标准属性:如
'point_normal'
(点的法向量)、'triangles'
(三角形数据)等。
使用示例
* 设置模型的颜色为红色
set_object_model_3d_attrib_mod (ObjectModel3D, 'color', [], 'red')
* 设置模型的透明度为 0.5
set_object_model_3d_attrib_mod (ObjectModel3D, 'alpha', [], 0.5)
* 设置用户定义的扩展属性
set_object_model_3d_attrib_mod (ObjectModel3D, 'extended_attribute', 'my_attribute', 42)
注意事项
- 直接修改:由于
set_object_model_3d_attrib_mod
直接修改原始模型,因此在使用时需要谨慎,以避免意外覆盖重要数据。 - 属性存在性:如果尝试设置一个不存在的属性,HALCON 会自动创建该属性。
- 扩展属性:扩展属性是用户定义的属性,可以存储任意数据,例如整数、浮点数或字符串。
应用场景
- 模型可视化:通过设置颜色、透明度等属性,可以更好地在可视化中显示模型。
- 模型标注:通过设置扩展属性,可以为模型添加自定义的标签或数据,方便后续处理。
- 模型优化:通过修改标准属性,可以优化模型的显示或处理性能。
set_object_model_3d_attrib_mod
是一个非常灵活的操作符,可以用于自定义和优化三维对象模型的属性。
6、set_object_model_3d_attrib
set_object_model_3d_attrib
是 HALCON 中的一个操作符,用于为三维对象模型(3D Object Model)设置或修改属性。与 set_object_model_3d_attrib_mod
不同的是,set_object_model_3d_attrib
会创建一个输入模型的副本,并在副本中设置或修改指定的属性,而不是直接修改原始模型。
功能
- 创建副本并修改:该操作符会创建一个输入模型的副本,并在副本中设置或修改指定的属性。
- 支持多种属性:可以设置或修改标准属性(如颜色、透明度等)或用户定义的扩展属性。
参数
ObjectModel3D
:输入的三维对象模型句柄。Attribute
:要设置或修改的属性名称。Selector
:用于选择特定数据的字符串(可选)。例如,可以指定特定的点、三角形或基本体。Value
:要设置的属性值。ObjectModel3DOut
:输出参数,存储修改后的三维对象模型的句柄。
支持的属性
以下是可以通过 Attribute
参数设置的属性名称:
'color'
:设置模型的颜色。'disp_pose'
:设置模型的显示姿态。'alpha'
:设置模型的透明度。'extended_attribute'
:设置用户定义的扩展属性。- 其他标准属性:如
'point_normal'
(点的法向量)、'triangles'
(三角形数据)等。
使用示例
* 设置模型的颜色为红色
set_object_model_3d_attrib (ObjectModel3D, 'color', [], 'red', ObjectModel3DOut)
* 设置模型的透明度为 0.5
set_object_model_3d_attrib (ObjectModel3D, 'alpha', [], 0.5, ObjectModel3DOut)
* 设置用户定义的扩展属性
set_object_model_3d_attrib (ObjectModel3D, 'extended_attribute', 'my_attribute', 42, ObjectModel3DOut)
注意事项
- 创建副本:由于
set_object_model_3d_attrib
会创建一个模型的副本,因此在处理大型模型时可能会占用较多内存。 - 属性存在性:如果尝试设置一个不存在的属性,HALCON 会自动创建该属性。
- 扩展属性:扩展属性是用户定义的属性,可以存储任意数据,例如整数、浮点数或字符串。
应用场景
- 模型可视化:通过设置颜色、透明度等属性,可以更好地在可视化中显示模型。
- 模型标注:通过设置扩展属性,可以为模型添加自定义的标签或数据,方便后续处理。
- 模型优化:通过修改标准属性,可以优化模型的显示或处理性能。
与 set_object_model_3d_attrib_mod
的区别
set_object_model_3d_attrib_mod
:直接在原始模型上修改属性,不会创建副本。set_object_model_3d_attrib
:创建一个模型的副本,并在副本中修改属性,保留原始模型不变。
选择使用哪个操作符取决于具体需求。如果需要保留原始模型,建议使用 set_object_model_3d_attrib
;如果直接修改原始模型即可,建议使用 set_object_model_3d_attrib_mod
。
创建一个位姿,获取XYZ点
用set_object_model_3d_attrib_mod设置为空的3D体中。并显示
* 在这个示例中,设置了一个三维物体模型的立方体的坐标。
* 其次,设置了三角形和颜色。第三,修改了一个三维物体模型的坐标。
* 第四,展示了移除已设置属性的过程。
* 在所有步骤之间,都会对生成的三维物体模型进行可视化。
* ******************************
* 初始化程序。
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 412, 412, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
create_pose (0, 0, 40, 30, 60, 15, 'Rp+T', 'gba', 'point', DisplayPose)
VisualParamNames := ['point_size', 'disp_lines', 'attribute_0', 'color_0']
VisualParamValues := [8, 'true', 'points', 'yellow']
Instructions := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
*
* 创建一个空的三维物体模型
gen_empty_object_model_3d (ObjectModel3D)
*
* 设置一个立方体的点坐标,并在其中一个平面上添加一个额外的点。
PointCoordX := [0.5, 0, 1, 1, 0, 0, 1, 1, 0] - 0.5
PointCoordY := [0, 1, 1, 1, 1, 0, 0, 0, 0] - 0.5
PointCoordZ := [0.5, 0, 0, 1, 1, 0, 0, 1, 1] - 0.5
set_object_model_3d_attrib_mod (ObjectModel3D, ['point_coord_x', 'point_coord_y', 'point_coord_z'], [], [PointCoordX,PointCoordY,PointCoordZ])
*
* 显示9个点
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], DisplayPose, VisualParamNames, VisualParamValues, 'Define a cube by point coordinates', [], Instructions, DisplayPose)
*
* 设置包含额外点的平面的4个三角形,这些三角形属于三维物体模型。
T1 := [0, 8, 5]
T2 := [0, 7, 8]
T3 := [0, 6, 7]
T4 := [0, 5, 6]
T5 := [5, 6, 2]
T6 := [5, 2, 1]
T7 := [6, 7, 3]
T8 := [6, 3, 2]
T9 := [7, 3, 4]
T10 := [7, 4, 8]
T11 := [8, 4, 1]
T12 := [8, 1, 5]
T13 := [2, 3, 4]
T14 := [2, 4, 1]
set_object_model_3d_attrib (ObjectModel3D, 'triangles', [], [T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14], ObjectModel3D2)
*
* Display the manually triangulated cube.
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2], [], DisplayPose, VisualParamNames, VisualParamValues, 'Connect points to triangles', [], Instructions, DisplayPose)
*
* Modify the point coordinates.
PointCoordY[0, 3, 6, 7] := [-1, 0.3, -.8, -.3]
set_object_model_3d_attrib_mod (ObjectModel3D2, 'point_coord_y', [], PointCoordY)
*
* Display the modified object (no longer a cube).
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2], [], DisplayPose, VisualParamNames, VisualParamValues, 'Modify some point coordiantes', [], Instructions, DisplayPose)
*
* Set extended attributes of the triangles
* to visualize the distance from the plane.
gen_plane_object_model_3d ([0, .55, 0, 90, 0, 0, 0], [-1, -1, 1, 1], [-1, 1, 1, -1], PlaneOM3D)
distance_object_model_3d (ObjectModel3D2, PlaneOM3D, [], 0, [], [])
VisualParamNames2 := [VisualParamNames,'color_attrib_0', 'color_attrib_1', 'color_0', 'color_1', 'color_2']
VisualParamValues2 := [VisualParamValues,'&distance', '&distance', 'yellow', 'orange', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2, ['Set extended attribute \'&distance\'', '(from plane) and display as color value'], [], Instructions, DisplayPose)
*
* Remove the extended attribute &distance in
* a copy of ObjectModel3D2.
remove_object_model_3d_attrib (ObjectModel3D2, '&distance', ObjectModel3D3)
VisualParamNames2 := [VisualParamNames,'color_0', 'color_1', 'color_2']
VisualParamValues2 := [VisualParamValues,'yellow', 'orange', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D3,ObjectModel3D3,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2, ['The extended attribute \'&distance\'', 'has been removed'], [], Instructions, DisplayPose)
*
* Remove the manually created triangles.
remove_object_model_3d_attrib_mod (ObjectModel3D3, 'triangles')
VisualParamNames2 := [VisualParamNames,'color_0', 'color_1']
VisualParamValues2 := [VisualParamValues,'yellow', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D3,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2, 'The triangles have been removed', [], Instructions, DisplayPose)