均匀点云边界检测——密度查找(2/2)

本文探讨了如何利用点云密度梯度技术改进边界识别,通过结合密度和梯度信息,有效解决车载雷达等场景中点云不均匀的问题,实现更精确的点云边界描绘。通过实例展示了混合解法的应用和优化效果,以及关键代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

密度与梯度

在上一节已经尝试用点云密度来区分边界,但是点云的边界不仅是有高密度区域还有很多密度不均匀的区域,如车载雷达:

这些有的区域密集,有的区域稀疏的点云仅使用密度不大容易区分点云的边界,这种时候需要应用更加细致的语义分割方法来描边。

梯度

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一, 梯度一般表现了某个点向周围点变换的变化率。对于函数中的某个变量微分可以得到此变量相对于函数的梯度。

密度梯度

将梯度的概念引入本边界处理方法,我们把某个点的密度与周围一定范围内的点的密度之差称为“密度梯度”。若我们的点云并不均匀,有的地方密集有的地方稀疏

混合解:将密度梯度与密度的解法叠加,能够有效的弥补另一种解法的不足,将点云的边界基本描绘出来。

单密度效果:

单梯度效果:

完整代码

import open3d as o3d
import numpy as np
pcd = o3d.io.read_point_cloud(".../crack001_pcd.pcd")

pcd.paint_uniform_color([0.5, 0.5, 0.5])
pcd_tree = o3d.geometry.KDTreeFlann(pcd)


k_recordlist = []
idx1_recordlist = []
for i in range(len(pcd.points)):
    [k1, idx1, _] = pcd_tree.search_radius_vector_3d(pcd.points[i], 0.1)#半径搜索
    k_recordlist.append(k1)
    idx1_recordlist.append(idx1)

k_de_recordlist = []
k_idx1_recordlist = []
for i in range(len(pcd.points)):
    k_de_recordlist.clear()
    for id in idx1_recordlist[i]:
        k_de_recordlist.append(k_recordlist[id])
    if max(k_de_recordlist) - k_de_recordlist[0] > 15 or k_recordlist[i] <= 15:
        np.asarray(pcd.colors)[i] = [0, 0, 1]


o3d.visualization.draw_geometries([pcd])

 图中可以明显看到点云的边界已经基本检测出来了,如果对密度部分表现不大满意可以对密度阈值的参数进行一定的调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K.K. Salamander

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值