3D点云去除异常点

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)

在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Open3D 是一个用于处理三维数据的开源库,其包含了一些对点云数据进行操作和可视化的功能。其,隐藏消除是指通过一定的算法和方法,去除点云数据的一些无关或冗余的,从而使得点云更加清晰和易于处理。 Open3D 提供了一种常用的隐藏消除方法,即基于法向量的滤波算法。该算法首先根据点云的几何信息计算每个的法线,然后根据法线信息进行滤波操作。该操作会去除那些法线方向与周围法线方向差异较大的,从而去除了一些不平滑的表面或异常。 在 Open3D ,我们可以通过调用 `open3d.geometry.estimate_normals()` 方法来计算点云的法线,然后调用 `open3d.geometry.filter_smooth()` 方法进行滤波操作。具体的操作流程如下: 1. 导入点云数据,可以使用 `open3d.io.read_point_cloud()` 方法加载点云文件,得到一个 PointCloud 对象。 2. 使用 `open3d.geometry.estimate_normals()` 方法计算点云的法线信息,并设置相应的参数,如搜索半径、法线的方向等。 3. 利用 `open3d.geometry.filter_smooth()` 方法对点云进行滤波操作,同样可以设定滤波参数,如法线角度阈值、滤波半径等。 4. 最后,可以通过 `open3d.visualization.draw_geometries()` 方法可视化滤波后的点云结果。 通过上述步骤,我们可以在 Open3D 进行隐藏消除操作,从而提高点云的质量和可用性。隐藏消除主要依靠法线信息来判断和去除不必要的,因此在进行隐藏消除时,我们需要合理地设置法线计算和滤波参数,以得到理想的结果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值