3D点云去除异常点

文章目录

  • 3D点云去除异常点(HALCON)
    • 深度图分出高度数据
    • 滤波去除异常点
    • 根据区域内的点数选择区域
    • 将点云转化为模型
    • 将模型打散,根据连通域内点数去除离群噪点
    • 显示去噪后点云及法向量

3D点云去除异常点(HALCON)

深度图分出高度数据

ImagePath := 'time_of_flight/'
read_image (Image, ImagePath + 'engine_cover_noisy_xyz_01')
decompose3(Image, Xm, Ym, Zm)

滤波去除异常点

get_image_size(Zm, Width, Height)
threshold(Zm,RegionGood,1e-30,1)
reduce_domain(Zm,RegionGood,Zm)
median_image(Zm, ZmMedian, 'circle', 2.5, 'mirrored')

根据区域内的点数选择区域

threshold(ZmMedian,RegionModel,0.422,0.529)
connection(RegionModel, ConnectedRegions)
select_shape(ConnectedRegions, ModelROI, ['area','holes_num'], 'and', [1500,1], [1e30,1])
reduce_domain(Xm,ModelROI,Xm)

将点云转化为模型

xyz_to_object_model_3d(Xm,Ym,Zm,ObjectModel3DModel)

将模型打散,根据连通域内点数去除离群噪点

connection_object_model_3d(ObjectModel3DModel, 'distance_3d', 0.005, ObjectModel3DConnected)
select_object_model_3d(ObjectModel3DConnected, 'num_points', 'and', 1000, 1e30, ObjectModel3DSelected)

显示去噪后点云及法向量

*显示3D模型
*Display the model
surface_normals_object_model_3d(ObjectModel3DSelected,'mls', [], [], ObjectModel3DModel)
create_surface_model(ObjectModel3DModel, 0.03, [], [], SFM)
dev_open_window(0, 0, Width*4, Height*4, 'black', WindowHandle)
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 := 'Surface model'
visualize_object_model_3d(WindowHandle,ObjectModel3DModel,[], [], ['point_size','disp_normals'], [2,'true'], Message, [], Instructions, PoseOut)

3D点云去除异常点_第1张图片

你可能感兴趣的:(3D点云算法类)