java三维滑雪_三维点云学习(7)5-Feature 实现ISS

本文介绍了如何使用Java实现基于 ISS(Integral Scale Space)算法的三维点云特征点提取。通过计算点云数据的协方差矩阵和特征值,设置阈值并运用非极大抑制(NMS)策略,有效地找出点云中的关键点。文章提供了代码示例,并展示了在不同数据集上的应用效果。
摘要由CSDN通过智能技术生成

三维点云学习(7)5-Feature 实现ISS

参考博客

数据集下载

效果图:

eg.文末有其他物体的效果图展示

airplane_0001

红色圆圈为 提取的特征点

1455bca7ec84f58371cbbd1d3d88a288.png

a4f18d1c8a51e99d3cc76e7bf3344652.png

888acb987b0edddd20c0d688a2dd6a26.png

可以看出特征点大致呈对称分布或分布于物体中轴线上:

29a55dc55386f29c5012854a4a80ec37.png

主要coding思路:

特征点(关键点)

step1 使用radius NN 得到n个初始关键点, 确定 threshold 阈值

step2 随机选取一个关键点,寻找这个关键点的nearest 中的其他关键点,构成一个关键点群。 思路类似(DBSCAN)

step3 NMS 非极大抑制,比较 在一个关键点群中,每个关键点的 linda3,最大的linda3对应的点即定为这个关键点群的关键点

step4 iearation step2-step3

代码部分模块

构建点云坐标的协方差矩阵、求解cov特征值,并把特征值降序输出

def compute_cov_eigval(point_cloud):

x = np.asarray(point_cloud[:,0])

y = np.asarray(point_cloud[:,1])

z = np.asarray(point_cloud[:,2])

M = np.vstack((x, y, z)) # 每行表示一个属性, 每列代表一个点

cov = np.cov(M) # 使用每个点的坐标求解cov

eigval, eigvec = np.linalg.eigh(cov) # 求解三个特征值,升序排列 linda1 < linda2 < linda3

eigval = eigval[np.argsort(-eigval)] # 改为降序排列 linda1 > linda2 > linda3

return eigval #返回特征值

matplotlib显示点云函数

# matplotlib显示点云函数

def Point_Cloud_Show(point_cloud,feature_point):

fig = plt.figure(dpi=150)

ax = fig.add_subplot(111, projection='3d')

ax.scatter(point_cloud[:, 0], point_cloud[:, 1], point_cloud[:, 2], cmap='spectral', s=2, linewidths=0, alpha=1, marker=".")

ax.scatter(feature_point[:, 0], feature_point[:, 1], feature_point[:, 2], cmap='spectral', s=2, linewidths=5, alpha=1,marker=".",color='red')

plt.title('Point Cloud')

ax.set_xlabel('x')

ax.set_ylabel('y')

ax.set_zlabel('z')

plt.show()

主体 iss

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值