一、读取3d 数据
Halcon中visualize_object_model_3d算子详解_人狮子的博客-CSDN博客_visualize_object_model_3d
read_object_model_3d('D:/work/pcl_workplaces/PCL_test/bunny.pcd', 'mm', 'convert_to_triangles', 'true', ObjectModel3D, Status)
*FileName:文件名,halcon支持多种3d数据格式的读取,包括 .off, .ply, .dxf, .om3, .obj, .stl等格式。
* 1).om3:用于三维对象模型的HALCON格式。具有这种格式的文件可以由write_object_model_3d编写。这种格式的默认文件扩展名是’om3’。
* 2).ply:多边形文件格式(也是斯坦福三角格式)。这是一种简单的格式,可以保存3D点、点法线、多边形、颜色信息和基于点的扩展属性。HALCON支持该格式的ASCII和二进制版本。如果要读取的文件包含不支持的信息,则ASCII文件将忽略额外的数据,只读取支持的数据。对于该格式的二进制版本,在这种情况下会返回一个错误,并且不会返回对象模型。这种格式的默认文件扩展名是’ply’。
* 3).off:对象文件格式。这是一个简单的基于ascii的格式,可以保存3D点和多边形。不支持二进制OFF格式。这种格式的默认文件扩展名是’off’。
* 4).dxf: AUTOCAD格式, 这种格式的默认文件扩展名是“dxf”。当读取DXF文件时,输出参数Status包含有关被读取的3D面数量的信息,如果有必要,还会警告部分DXF文件无法解释。
* 5).obj: OBJ文件格式,也称为“波前OBJ格式”。这是一个基于ascii的格式,可以保存3D点,多边形,法线,纹理坐标,材质和其他信息。HALCON支持点(“v”线)和多边形面(“f”线)。其他实体将被忽略。这种格式的默认文件扩展名是’obj’。
* 6) .stl: 存储三角形和三角形的法线。然而,由于HALCON 3D对象模型不支持三角形法线,所以只读取三角形而忽略三角形法线。如果需要,从三角形重新计算法线。HALCON读取该格式的ASCII和二进制版本。如果设置了’stl’, HALCON将自动检测该类型。将类型设置为’stl_binary’或’stl_ascii’将强制使用相应的格式。这种格式的默认文件扩展名是’stl’。
*Scale:测量单位,包括 ‘m’, ‘cm’, ‘mm’, ‘microns’, ‘um’, ‘nm’, ‘km’, ‘in’, ‘ft’, ‘yd’, 1.0, 0.01, 0.001, 1.0e-6, 0.0254, 0.3048, 0.9144
*Scale参数定义了文件的规模。例如,如果参数设置为’mm’,则假定文件中的所有单位都具有单位’mm’,并通过与1e-3相乘将其转换为通常的HALCON-internal单位’m’。因此,“100毫米”的值变为“0.1米”。或者,可以将缩放因子传递给Scale,将其与文件中找到的所有坐标值相乘。
*GenParamName, GenParamValue:
*参数名包括:‘convert_to_triangles’, ‘file_type’, ‘invert_normals’, ‘max_approx_error’, ‘min_num_points’, ‘xyz_map_height’, ‘xyz_map_width’。
*参数值包括: ‘true’, ‘false’, 1, 0,
*file_type 包括: ‘om3’, ‘off’, ‘ply’, ‘dxf’, ‘obj’, ‘stl’, ‘stl_binary’, ‘stl_ascii’。
*convert_to_triangles:将所有面转换为三角形。如果该参数设置为’true’,则从文件中读取的所有面都将转换为三角形。
*invert_normals:反转法线和面方向。如果该参数设置为“true”,则所有法线和面的方向都是反向的。
*max_approx_error 与 min_num_points:DXF-specific parameters
*‘xyz_map_height’:为读取的3D对象模型创建映射,将图像坐标分配给每个读取的3D点,如xyz_to_object_model_3d中所示。假设读取的文件按行包含3D点。传递的值被用作图像的宽度。图像的高度是自动计算的。如果设置了这个参数,则object_model_3d_to_xyz可以使用’from_xyz_map’方法投影读取的3D对象模型。只能设置两个参数’xyz_map_width’和’xyz_map_height’中的一个。
*‘xyz_map_width’:如’xyz_map_width’,但假设3D点是按列排列的。图像的宽度是自动计算的。只能设置两个参数’xyz_map_width’和’xyz_map_height’中的一个。
*ObjectModel3D:模型句柄
*Status:状态信息
二、显示模型
*虚拟化模型并且显示
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [],['color','disp_normals','colored','disp_pose'], ['red','true',12,'true'], Message, [], Instructions, PoseOut)
*WindowHandle:窗体标识符。
*ObjectModel3D:3d模型。
*CamParam:相机参数,例如:StartCamPar := [0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494]
*PoseIn:起始位姿。
*GenParamName:参数名称,用于各个功能模块的调用,可随意选择。包括以下参数:‘alpha’, ‘attribute’, ‘color’, ‘colored’, ‘disp_background’, ‘disp_lines’, ‘disp_normals’, ‘disp_pose’, ‘inspection_mode’, ‘intensity’, ‘intensity_red’, ‘intensity_green’, ‘intensity_blue’, ‘light_position’, ‘light_ambient’, ‘light_diffuse’, ‘line_color’, ‘line_width’, ‘lut’, ‘max_num_selectable_models’, ‘normal_color’, ‘point_size’。
* 常见的参数:
* 1.colored:用不同的颜色显示3d模型,值可设为3, 6, or 12。
* 2.attribute:明确选择3D对象模型可视化的方式,Values: ‘auto’, ‘faces’, ‘primitive’, ‘points’, ‘lines’。
* 3. color: 设置3D对象模型的颜色。可用的颜色可以用操作符query_color查询。此外,颜色可以指定为RGB三元组,形式为’#rrggbb’,其中’rr’、‘gg’和’bb’分别为’00’和’ff’之间的十六进制数。Values: ‘red’, ‘green’, …。
* 4.alpha:三维对象模型的透明度。将透明度设置为小于1.0的3D对象模型可能会显著增加display_scene_3d和render_scene_3d的运行时间。值:浮点值在0.0(完全透明)和1.0(完全不透明)之间。
* 5.disp_pose:是否显示坐标系姿态,如果3D对象模型的姿态应该被可视化,Values: ‘true’ or ‘false’。
* 6.disp_normals:是否显示法向量,如果3D对象模型的法线应该被可视化,Values: ‘true’ or ‘false’。
* 7.normal_color:如果’disp_normals’设置为’true’,则显示法线的颜色。
* 8.lut: 查询表。设置将’color_attrib’属性集的值转换为颜色的LUT,查看set_lut以获取可用的lut。如果’lut’被设置为’default’以外的任何值,‘color’将被忽略。
* 9.color_attrib:用于伪颜色可视化的point属性的名称。(伪彩色:每个像素的颜色不是由每个基本色分量的数值直接决定,实际上是把像素当成调色板(Palettes)或颜色查找表(Color Look-Up Table,CLUT)的表项入口地址,根据该地址可查找出包含实际R、G、B的强度值,如果图像中的颜色在调色板或彩色查找表中不存在,则调色板会用一个最为接近的颜色来匹配。通过查找出的R、G、B强度值产生的色彩不是图像本身真正的颜色,因此称为伪彩色。)如果设置了属性,则显示的3D点的颜色由点的属性值和当前设置的LUT决定(参见’ LUT ‘)。这样,就可以用假颜色来可视化属性。
* 示例:如果’color_attrib’设置为’coord_z’,而’lut’设置为’color1’,则z坐标的颜色编码将从红色到蓝色。如果’lut’设置为’default’,属性值将用于缩放参数’color’设置的颜色。
* 如果’lut’被设置为不同的值,所有点的属性值都在内部缩放到[0,255],并用作lut函数的输入值。映射还由参数’color_attrib_start’和’color_attrib_end’(见下文)控制。
* 如果面被显示出来,它们的颜色将被插值到角点的颜色之间。
* 值:‘none’, ‘&distance’, ‘coord_x’, ‘coord_y’, ‘coord_z’,用户定义的点属性,或任何其他可用的点属性。
* 10.color_attrib_start’,'color_attrib_end:使用’color_attrib’设置的属性值的范围。
* ‘color_attrib_start’和’color_attrib_end’之间的属性值被缩放为所选LUT的开始和结束。选中范围之外的属性值将被剪切。这允许使用一个固定的颜色映射,它不会被异常值扭曲。
* 如果设置为’auto’,则最小属性值映射到LUT的开头,最大属性值映射到LUT的结尾,除非’color_attrib’是’normal_x’、‘normal_y’或’normal_z’。在这种情况下,start和end会被自动设置为-1和1。可以输入高于最终值的起始值。这实际上将翻转使用的LUT。
* Values: 0, 0.1, 1, 100, 255, …
* 11.max_num_selectable_models:可选择和单独处理的3D对象模型的数量。
* 12.inspection_mode:控制检查模式初始状态的标志。
* 如果’inspection_mode’设置为’standard’,旋转中心固定在显示对象的中心。在这种模式下,旋转中心由一个垂直的十字(+)表示。这种模式特别适合于获得整个物体的印象。
* 如果’inspection_mode’设置为’surface’,旋转中心固定在窗口的中心,位于显示对象的表面上。在这种模式下,旋转中心由一个对角线叉(x)表示。这种模式特别适合于对物体表面的详细检查。由于点云不提供表面信息,因此不太适合对点云进行检测。
* 注意,轨迹球本身保持在图像的中心,无论选择何种检查模式。还要注意的是,在可视化过程中,通过Ctrl + Alt +鼠标左键可以交互式地切换检查模式(见上面)。Values: ‘standard’ or ‘surface’
*Message 3D模型名称名称
*Label
*Information : 操作说明
*PoseOut:输出
三、代码显示
dev_close_window ()
dev_open_window (0, 0, 400, 500, 'black', WindowHandle)
*读取点云ply文件
read_object_model_3d('D:/work/pcl_workplaces/PCL_test/bunny.pcd', 'mm', 'convert_to_triangles', 'true', ObjectModel3D, Status)
*FileName:文件名,halcon支持多种3d数据格式的读取,包括 .off, .ply, .dxf, .om3, .obj, .stl等格式。
* 1).om3:用于三维对象模型的HALCON格式。具有这种格式的文件可以由write_object_model_3d编写。这种格式的默认文件扩展名是’om3’。
* 2).ply:多边形文件格式(也是斯坦福三角格式)。这是一种简单的格式,可以保存3D点、点法线、多边形、颜色信息和基于点的扩展属性。HALCON支持该格式的ASCII和二进制版本。如果要读取的文件包含不支持的信息,则ASCII文件将忽略额外的数据,只读取支持的数据。对于该格式的二进制版本,在这种情况下会返回一个错误,并且不会返回对象模型。这种格式的默认文件扩展名是’ply’。
* 3).off:对象文件格式。这是一个简单的基于ascii的格式,可以保存3D点和多边形。不支持二进制OFF格式。这种格式的默认文件扩展名是’off’。
* 4).dxf: AUTOCAD格式, 这种格式的默认文件扩展名是“dxf”。当读取DXF文件时,输出参数Status包含有关被读取的3D面数量的信息,如果有必要,还会警告部分DXF文件无法解释。
* 5).obj: OBJ文件格式,也称为“波前OBJ格式”。这是一个基于ascii的格式,可以保存3D点,多边形,法线,纹理坐标,材质和其他信息。HALCON支持点(“v”线)和多边形面(“f”线)。其他实体将被忽略。这种格式的默认文件扩展名是’obj’。
* 6) .stl: 存储三角形和三角形的法线。然而,由于HALCON 3D对象模型不支持三角形法线,所以只读取三角形而忽略三角形法线。如果需要,从三角形重新计算法线。HALCON读取该格式的ASCII和二进制版本。如果设置了’stl’, HALCON将自动检测该类型。将类型设置为’stl_binary’或’stl_ascii’将强制使用相应的格式。这种格式的默认文件扩展名是’stl’。
*Scale:测量单位,包括 ‘m’, ‘cm’, ‘mm’, ‘microns’, ‘um’, ‘nm’, ‘km’, ‘in’, ‘ft’, ‘yd’, 1.0, 0.01, 0.001, 1.0e-6, 0.0254, 0.3048, 0.9144
*Scale参数定义了文件的规模。例如,如果参数设置为’mm’,则假定文件中的所有单位都具有单位’mm’,并通过与1e-3相乘将其转换为通常的HALCON-internal单位’m’。因此,“100毫米”的值变为“0.1米”。或者,可以将缩放因子传递给Scale,将其与文件中找到的所有坐标值相乘。
*GenParamName, GenParamValue:
*参数名包括:‘convert_to_triangles’, ‘file_type’, ‘invert_normals’, ‘max_approx_error’, ‘min_num_points’, ‘xyz_map_height’, ‘xyz_map_width’。
*参数值包括: ‘true’, ‘false’, 1, 0,
*file_type 包括: ‘om3’, ‘off’, ‘ply’, ‘dxf’, ‘obj’, ‘stl’, ‘stl_binary’, ‘stl_ascii’。
*convert_to_triangles:将所有面转换为三角形。如果该参数设置为’true’,则从文件中读取的所有面都将转换为三角形。
*invert_normals:反转法线和面方向。如果该参数设置为“true”,则所有法线和面的方向都是反向的。
*max_approx_error 与 min_num_points:DXF-specific parameters
*‘xyz_map_height’:为读取的3D对象模型创建映射,将图像坐标分配给每个读取的3D点,如xyz_to_object_model_3d中所示。假设读取的文件按行包含3D点。传递的值被用作图像的宽度。图像的高度是自动计算的。如果设置了这个参数,则object_model_3d_to_xyz可以使用’from_xyz_map’方法投影读取的3D对象模型。只能设置两个参数’xyz_map_width’和’xyz_map_height’中的一个。
*‘xyz_map_width’:如’xyz_map_width’,但假设3D点是按列排列的。图像的宽度是自动计算的。只能设置两个参数’xyz_map_width’和’xyz_map_height’中的一个。
*ObjectModel3D:模型句柄
*Status:状态信息
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
Message := 'Bunny3D PointCloud'
*虚拟化模型并且显示
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [],['lut','disp_normals','colored','disp_pose'], ['color1','true',12,'true'], Message, [], Instructions, PoseOut)
*WindowHandle:窗体标识符。
*ObjectModel3D:3d模型。
*CamParam:相机参数,例如:StartCamPar := [0.016, 0, 0.0000074, 0.0000074, 326, 247, 652, 494]
*PoseIn:起始位姿。
*GenParamName:参数名称,用于各个功能模块的调用,可随意选择。包括以下参数:‘alpha’, ‘attribute’, ‘color’, ‘colored’, ‘disp_background’, ‘disp_lines’, ‘disp_normals’, ‘disp_pose’, ‘inspection_mode’, ‘intensity’, ‘intensity_red’, ‘intensity_green’, ‘intensity_blue’, ‘light_position’, ‘light_ambient’, ‘light_diffuse’, ‘line_color’, ‘line_width’, ‘lut’, ‘max_num_selectable_models’, ‘normal_color’, ‘point_size’。
* 常见的参数:
* 1.colored:用不同的颜色显示3d模型,值可设为3, 6, or 12。
* 2.attribute:明确选择3D对象模型可视化的方式,Values: ‘auto’, ‘faces’, ‘primitive’, ‘points’, ‘lines’。
* 3. color: 设置3D对象模型的颜色。可用的颜色可以用操作符query_color查询。此外,颜色可以指定为RGB三元组,形式为’#rrggbb’,其中’rr’、‘gg’和’bb’分别为’00’和’ff’之间的十六进制数。Values: ‘red’, ‘green’, …。
* 4.alpha:三维对象模型的透明度。将透明度设置为小于1.0的3D对象模型可能会显著增加display_scene_3d和render_scene_3d的运行时间。值:浮点值在0.0(完全透明)和1.0(完全不透明)之间。
* 5.disp_pose:是否显示坐标系姿态,如果3D对象模型的姿态应该被可视化,Values: ‘true’ or ‘false’。
* 6.disp_normals:是否显示法向量,如果3D对象模型的法线应该被可视化,Values: ‘true’ or ‘false’。
* 7.normal_color:如果’disp_normals’设置为’true’,则显示法线的颜色。
* 8.lut: 颜色表。设置将’color_attrib’属性集的值转换为颜色的LUT,查看set_lut以获取可用的lut。如果’lut’被设置为’default’以外的任何值,‘color’将被忽略。
* 9.color_attrib:用于伪颜色可视化的point属性的名称。(伪彩色:每个像素的颜色不是由每个基本色分量的数值直接决定,实际上是把像素当成调色板(Palettes)或颜色查找表(Color Look-Up Table,CLUT)的表项入口地址,根据该地址可查找出包含实际R、G、B的强度值,如果图像中的颜色在调色板或彩色查找表中不存在,则调色板会用一个最为接近的颜色来匹配。通过查找出的R、G、B强度值产生的色彩不是图像本身真正的颜色,因此称为伪彩色。)如果设置了属性,则显示的3D点的颜色由点的属性值和当前设置的LUT决定(参见’ LUT ‘)。这样,就可以用假颜色来可视化属性。
* 示例:如果’color_attrib’设置为’coord_z’,而’lut’设置为’color1’,则z坐标的颜色编码将从红色到蓝色。如果’lut’设置为’default’,属性值将用于缩放参数’color’设置的颜色。
* 如果’lut’被设置为不同的值,所有点的属性值都在内部缩放到[0,255],并用作lut函数的输入值。映射还由参数’color_attrib_start’和’color_attrib_end’(见下文)控制。
* 如果面被显示出来,它们的颜色将被插值到角点的颜色之间。
* 值:‘none’, ‘&distance’, ‘coord_x’, ‘coord_y’, ‘coord_z’,用户定义的点属性,或任何其他可用的点属性。
* 10.color_attrib_start’,'color_attrib_end:使用’color_attrib’设置的属性值的范围。
* ‘color_attrib_start’和’color_attrib_end’之间的属性值被缩放为所选LUT的开始和结束。选中范围之外的属性值将被剪切。这允许使用一个固定的颜色映射,它不会被异常值扭曲。
* 如果设置为’auto’,则最小属性值映射到LUT的开头,最大属性值映射到LUT的结尾,除非’color_attrib’是’normal_x’、‘normal_y’或’normal_z’。在这种情况下,start和end会被自动设置为-1和1。可以输入高于最终值的起始值。这实际上将翻转使用的LUT。
* Values: 0, 0.1, 1, 100, 255, …
* 11.max_num_selectable_models:可选择和单独处理的3D对象模型的数量。
* 12.inspection_mode:控制检查模式初始状态的标志。
* 如果’inspection_mode’设置为’standard’,旋转中心固定在显示对象的中心。在这种模式下,旋转中心由一个垂直的十字(+)表示。这种模式特别适合于获得整个物体的印象。
* 如果’inspection_mode’设置为’surface’,旋转中心固定在窗口的中心,位于显示对象的表面上。在这种模式下,旋转中心由一个对角线叉(x)表示。这种模式特别适合于对物体表面的详细检查。由于点云不提供表面信息,因此不太适合对点云进行检测。
* 注意,轨迹球本身保持在图像的中心,无论选择何种检查模式。还要注意的是,在可视化过程中,通过Ctrl + Alt +鼠标左键可以交互式地切换检查模式(见上面)。Values: ‘standard’ or ‘surface’
*Message 3D模型名称名称
*Label
*Information : 操作说明
*PoseOut:输出
dev_clear_window ()
* lut 颜色表 一般和 color_attrib 一起用
*color_attrib 表示通过什么属性来显示颜色 我们这里用的是Z轴的深度visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
最常用的几种:
1.lut 和 color_attrib 连用
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], ['lut','color_attrib','disp_pose'], ['color1','coord_z','true'], [], [], [], PoseOut)
2、平时使用最多的
1.colored:用不同的颜色显示3d模型,值可设为3, 6, or 12
2.attribute:明确选择3D对象模型可视化的方式,Values: ‘auto’, ‘faces’, ‘primitive’, ‘points’, ‘lines’。
3.color: 设置3D对象模型的颜色。
4.alpha:三维对象模型的透明度。
5.disp_pose:是否显示坐标系姿态, ‘true’ or ‘false’。
6.disp_normals:是否显示法向量,‘true’ or ‘false’。
7.normal_color:如果’disp_normals’设置为’true’,则显示法线的颜色。