3D点云体积计算
前言
通过halcon 内部代码计算点云的体积,使用的点云也是halcon 案例的点云可直接运行。
介绍就不写了,直接上代码
# 初始化可视化窗口
dev_close_window()
dev_update_off()
dev_open_window(0, 0, 800, 600, 'black', WindowHandle)
set_display_font(WindowHandle, 16, 'mono', 'true', 'false')
# 读取3D对象模型
read_object_model_3d('mvtec_bunny_normals.om3', 'mm', [], [], ObjectModel3D, Status)
get_object_model_3d_params (ObjectModel3D, 'point_coord_x', point_coord_x)
get_object_model_3d_params (ObjectModel3D, 'point_coord_y', point_coord_y)
get_object_model_3d_params (ObjectModel3D, 'point_coord_z', point_coord_z)
gen_object_model_3d_from_points (point_coord_x, point_coord_y, point_coord_z, ObjectModel3D1)
visualize_object_model_3d (WindowHandle, [ObjectModel3D1], [], [], ['lut','color_attrib'], ['color1','coord_z'], [], [], [], PoseOut)
# 采样3D对象模型
SamplingFactor := 0.0053
get_object_model_3d_params(ObjectModel3D1, 'diameter_axis_aligned_bounding_box', Diameter)
sample_object_model_3d(ObjectModel3D1, 'fast', SamplingFactor * Diameter, [], [], RawPointData3D)
# 执行三角剖分
ParameterNames := 'information'
ParameterValues := 'verbose'
triangulate_object_model_3d(RawPointData3D, 'greedy', ParameterNames, ParameterValues, Surface3DDefault, Info)
visualize_object_model_3d (WindowHandle, [Surface3DDefault], [], [], ['lut','color_attrib'], ['color1','coord_z'], [], [], [], PoseOut)
****************计算体积********************************
* 计算凸包
convex_hull_object_model_3d (Surface3DDefault, ObjectModel3DConvexHullBox)
***************************************************************************
* 获取模型的XYZ坐标
***************************************************************************
get_object_model_3d_params (ObjectModel3DConvexHullBox, 'point_coord_x', point_coord_x)
get_object_model_3d_params (ObjectModel3DConvexHullBox, 'point_coord_y', point_coord_y)
get_object_model_3d_params (ObjectModel3DConvexHullBox, 'point_coord_z', point_coord_z)
***************************************************************************
* 获取模型中各个三角面元的角点坐标在点坐标序列中的索引
***************************************************************************
get_object_model_3d_params (ObjectModel3DConvexHullBox, 'triangles', triangles)
***************************************************************************
* 生成平面
***************************************************************************
gen_rectangle2_contour_xld (Rectangle, 0, 0, 0, 150, 150)
get_contour_xld (Rectangle, Row, Col)
pose_plane := [0, 0, 20, 0, 0, 0, 0]
gen_plane_object_model_3d (pose_plane, Col, Row, ObjectModel3DPlane)
convex_hull_object_model_3d (ObjectModel3DPlane, ObjectModel3DNormals)
***************************************************************************
* 根据指定的参数计算模型相对于平面的体积
***************************************************************************
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'signed', 'true', Volume0)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'unsigned', 'true', Volume1)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'positive', 'true', Volume2)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'negative', 'true', Volume3)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'signed', 'false', Volume4)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'unsigned', 'false', Volume5)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'positive', 'false', Volume6)
volume_object_model_3d_relative_to_plane (ObjectModel3DConvexHullBox, pose_plane,'negative', 'false', Volume7)
visualize_object_model_3d (WindowHandle, [ObjectModel3DPlane, ObjectModel3DConvexHullBox], [], [], ['lut','color_attrib'], ['color1','coord_z'], [], [], [], PoseOut)
1130

被折叠的 条评论
为什么被折叠?



