Halcon 3D 计算3D模型的3D表面法线

 一、简介

我们有个案例就是去掉杂点然后显示出来

      1、读取图片
      2、通过Z图去除其他的杂点
      3、生产点云模型
      4、显示3D模型并且显示3D表面法线

二、算子解释

*surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)
*计算三维物体模型的三维曲面法线
*输入:
*ObjectModel3D (input_control)包含3D点数据的3D对象模型句柄。
*Method(input_control):法线计算方法  ‘mls’(移动最小二乘)是唯一支持的法线估算方法。
*GenParamName (input_control)一般平滑参数的名称:‘mls_abs_sigma’, ‘mls_force_inwards’, ‘mls_kNN’, ‘mls_order’, ‘mls_relative_sigma’
*GenParamValue (input_control)一般平滑参数的值:建议值:10、20、40、60、0.1、0.5、1.0、2.0、0、1、2、‘true’, ‘false’
*输出:
*ObjectModel3DNormals (output_control) object_model_3d(-数组)→(整数)具有计算出的三维法线的三维对象模型的句柄。

三、代码显示 

Image_Path:='time_of_flight/'
read_image (Image, Image_Path+'engine_cover_noisy_xyz_01')
* 1、将图像分解成三个x y z 图
decompose3 (Image, Image_x, Image_y, Image_z)

get_image_size (Image_z, Width, Height)
* 2 在Z图中选出目标
threshold (Image_z, Region, 1e-30, 1)

reduce_domain (Image_z, Region, Image_z)

median_image(Image_z, ZmMedian, 'circle', 2.5, 'mirrored')

threshold (ZmMedian, Region1, 0.422, 0.529)
connection (Region1, ConnectedRegions)
* 3、筛选出目标产品
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1526.52, 2806.82)

reduce_domain (Image_x, SelectedRegions, Image_x)
* 生产3D模型
xyz_to_object_model_3d (Image_x, Image_y, Image_z, ObjectModel3D)

connection_object_model_3d (ObjectModel3D, 'distance_3d', 0.005, ObjectModel3DConnected)

select_object_model_3d (ObjectModel3DConnected, 'num_points', 'and', 100, 1e30, ObjectModel3DSelected)

*4 显示模型   
dev_open_window(0, 0, Width*4, Height*4, 'black', WindowHandle)
Message_1:='3D_Model'
visualize_object_model_3d(WindowHandle,ObjectModel3DSelected,[], [], ['point_size','disp_normals'], [2,'true'], Message_1, [], Instructions, PoseOut)

surface_normals_object_model_3d(ObjectModel3DSelected,'mls', [], [], ObjectModel3DModel)
*surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)
*计算三维物体模型的三维曲面法线
*输入:
*ObjectModel3D (input_control)包含3D点数据的3D对象模型句柄。
*Method(input_control):法线计算方法  ‘mls’(移动最小二乘)是唯一支持的法线估算方法。
*GenParamName (input_control)一般平滑参数的名称:‘mls_abs_sigma’, ‘mls_force_inwards’, ‘mls_kNN’, ‘mls_order’, ‘mls_relative_sigma’
*GenParamValue (input_control)一般平滑参数的值:建议值:10、20、40、60、0.1、0.5、1.0、2.0、0、1、2、‘true’, ‘false’
*输出:
*ObjectModel3DNormals (output_control) object_model_3d(-数组)→(整数)具有计算出的三维法线的三维对象模型的句柄。
create_surface_model(ObjectModel3DModel, 0.03, [], [], SFM)
dev_open_window(0, 0, Width*4, Height*4, 'black', WindowHandle2)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'


Message_1:='Surface——Model'
visualize_object_model_3d(WindowHandle2,ObjectModel3DModel,[], [], ['point_size','disp_normals'], [2,'true'], Message_1, [], Instructions, PoseOut)

猜你喜欢

转载自blog.csdn.net/weixin_39354845/article/details/125350304