机器视觉3D点云可视化(一)

您所在的位置:网站首页 visualizeobject 机器视觉3D点云可视化(一)

机器视觉3D点云可视化(一)

2023-12-11 17:13| 来源: 网络整理| 查看: 265

当我们做3D项目时,避免不了要对点云进行可视化。平时使用较多的点云处理库有halcon,PCL,Open3D等,他们都有对应的点云显示算子。

本期先介绍halcon的点云显示:

一.读取点云算子

read_object_model_3d ('D:/rabbit.ply', 'm', [], [], ObjectModel3D, Status)

参数:

1)FileName:文件名,halcon支持多种3d数据格式的读取,包括 .off, .ply, .dxf, .om3, .obj, .stl等格式。

2)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,将其与文件中找到的所有坐标值相乘。

3)4)参数一一对应,可传空: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’中的一个。

5)ObjectModel3D:模型句柄

6)Status:状态信息

二. 阻塞式显示

visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], [], [], [], PoseOut)

1)WindowHandle:窗体句柄。

2)ObjectModel3D:3d模型。

3)CamParam:相机内参

4)PoseIn:起始位姿。

5)6)是一一对应的

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’。

常见的参数:

colored:用不同的颜色显示3d模型,值可设为3, 6, or 12。

attribute:明确选择3D对象模型可视化的方式,Values: ‘auto’, ‘faces’, ‘primitive’, ‘points’, ‘lines’。

color: 设置3D对象模型的颜色。可用的颜色可以用操作符query_color查询。此外,颜色可以指定为RGB三元组,形式为’#rrggbb’,其中’rr’、‘gg’和’bb’分别为’00’和’ff’之间的十六进制数。Values: ‘red’, ‘green’, …。

* alpha:三维对象模型的透明度。将透明度设置为小于1.0的3D对象模型可能会显著增加display_scene_3d和render_scene_3d的运行时间。值:浮点值在0.0(完全透明)和1.0(完全不透明)之间。

* disp_pose:是否显示坐标系姿态,如果3D对象模型的姿态应该被可视化,Values: ‘true’ or ‘false’。

* disp_normals:是否显示法向量,如果3D对象模型的法线应该被可视化,Values: ‘true’ or ‘false’。

* normal_color:如果’disp_normals’设置为’true’,则显示法线的颜色。

* lut: 颜色表。设置将’color_attrib’属性集的值转换为颜色的LUT,查看set_lut以获取可用的lut。如果’lut’被设置为’default’以外的任何值,‘color’将被忽略。

*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’,用户定义的点属性,或任何其他可用的点属性。

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, …

max_num_selectable_models:可选择和单独处理的3D对象模型的数量。

inspection_mode:控制检查模式初始状态的标志。如果’inspection_mode’设置为’standard’,旋转中心固定在显示对象的中心。在这种模式下,旋转中心由一个垂直的十字(+)表示。这种模式特别适合于获得整个物体的印象。如果’inspection_mode’设置为’surface’,旋转中心固定在窗口的中心,位于显示对象的表面上。在这种模式下,旋转中心由一个对角线叉(x)表示。这种模式特别适合于对物体表面的详细检查。由于点云不提供表面信息,因此不太适合对点云进行检测。

7)Message: 信息8)Label:标签

9} information :操作说明

10)PoseOut:输出姿态

三. 静态显示点云

disp_object_model_3d (WindowHandle, ObjectModel3D, [], PoseOut, GenParamNames, GenParamValues)

主要参数基本和阻塞显示一致,这里不再重复解释

示例代码如下:

dev_close_window ()

dev_open_window(0, 0, 660, 660, 'black', WindowHandle)

read_object_model_3d ('D:/rabbit.ply', 'm', [], [], ObjectModel3D, Status)

GenParamNames := ['lut','intensity','light_position','disp_pose','alpha']

GenParamValues := ['color1','coord_z','0.0 0.0 -0.3 1.0','true',1]

Instructions[0] := 'Rotate: Left button'

Instructions[1] := 'Zoom:   Shift + left button'

Instructions[2] := 'Move:   Ctrl  + left button'

 visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], GenParamNames, GenParamValues,'point cloud',[], Instructions, PoseOut)

disp_object_model_3d (WindowHandle, ObjectModel3D, [], PoseOut, GenParamNames, GenParamValues)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3