Open3D 点云的ISS关键点提取
创作时间:
作者:
@小白创作中心
Open3D 点云的ISS关键点提取
引用
1
来源
1.
http://www.mzph.cn/web/33961.shtml
目录
一、概述
1.1原理
1.2应用场景
1.3算法实现步骤
二、代码实现
2.1 完整代码
2.2关键函数
2.3关键点可视化
三、实现效果
3.1原始点云
3.2提取后点云
一、概述
1.1原理
ISS(Intrinsic Shape Signatures)关键点提取是一种常用于三维点云的特征提取方法。其主要目的是在点云中找到具有显著几何特征的点,这些点在不同的点云扫描中具有鲁棒性和稳定性。
ISS关键点提取基于以下两个主要思想:
- 局部特征分析:在点云的局部区域内计算几何特征,选择在局部范围内具有显著几何变化的点。
- 尺度空间理论:通过分析不同尺度下的几何特征,选择具有稳定性的点。
具体来说,ISS关键点提取算法利用点云中每个点的局部邻域的协方差矩阵来分析局部几何结构。协方差矩阵的特征值可以揭示局部几何形状的显著性。通过筛选出特征值之间具有显著差异的点,ISS算法能够识别出关键点。
1.2应用场景
ISS关键点提取在许多三维点云处理应用中具有重要作用,主要应用场景包括:
- 三维物体识别与匹配:通过提取关键点并进行描述符匹配,可以实现三维物体的识别与匹配。
- SLAM(同步定位与地图构建):在SLAM系统中,关键点提取用于构建地图和进行定位,提供稳定的特征点以进行配准。
- 三维重建:在三维重建过程中,关键点提取用于对齐不同视角的点云数据,从而生成高质量的三维模型。
- 机器人导航:在机器人导航中,关键点提取用于环境感知和路径规划,帮助机器人理解和探索环境。
- 医学影像分析:在医学影像处理中,关键点提取用于分析和比较不同的三维扫描数据,如CT或MRI扫描结果。
1.3算法实现步骤
ISS关键点提取算法的主要步骤如下:
- 计算局部协方差矩阵:对于每个点,计算其局部邻域的协方差矩阵。
- 计算协方差矩阵的特征值:对协方差矩阵进行特征值分解,获得三个特征值(通常标记为 λ1, λ2, λ3)。
- 特征值筛选:根据特征值之间的关系,筛选出具有显著几何特征的点。一般通过设置阈值来筛选特征值之间差异显著的点。
- 尺度分析:在不同的尺度下重复上述过程,选择在多个尺度下具有稳定性的点。
- 去冗余:通过非最大抑制(NMS,Non-Maximum Suppression)去除冗余的关键点,保留最显著的点。
二、代码实现
2.1 完整代码
# 将提取的特征点变大 便于区分
def keypoints_to_spheres(keypoints):
spheres = o3d.geometry.TriangleMesh()
for keypoint in keypoints.points:
sphere = o3d.geometry.TriangleMesh.create_sphere(radius=1)
sphere.translate(keypoint)
spheres += sphere
spheres.paint_uniform_color([1.0, 0.0, 0.0])
# sphere.translate((1,0,0))
return spheres
pcd = o3d.io.read_point_cloud("gargo50K.pcd")
print(pcd)
tic = time.time()
# ---ISS关键点提取的相关参数---
keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd,
salient_radius=5,
non_max_radius=5,
gamma_21=0.5,
gamma_32=0.5)
toc = 1000 * (time.time() - tic)
print("ISS Computation took {:.0f} [ms]".format(toc))
print("Extract", keypoints)
pcd.paint_uniform_color([0.0, 1.0, 0.0])
o3d.visualization.draw_geometries([keypoints_to_spheres(keypoints), pcd], width=800, height=800)
2.2关键函数
keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd,
salient_radius=5,
non_max_radius=5,
gamma_21=0.5,
gamma_32=0.5)
- salient_radius 和 non_max_radius:这两个参数用于定义用于计算曲率和局部表面变化的邻域大小。较大的值可以捕捉更大范围内的局部几何信息,但也可能导致关键点的数量增加。
- gamma_21 和 gamma_32:这两个参数是 ISS 算法中用来控制曲率比率阈值的参数。它们影响关键点的选择,较小的值可以产生更多但可能更松散的关键点集合,而较大的值则会限制关键点的数量和密度。
2.3关键点可视化
函数 keypoints_to_spheres 的目的是将一组关键点(假设为 Open3D 中的 PointCloud 对象)转换成一组球体,每个球体都表示一个关键点。这些球体会被放置在对应关键点的位置,并且统一涂成红色,最后返回一个包含所有球体的TriangleMesh 对象。
keypoints_to_spheres 函数会将 PointCloud 中的每个关键点转换成一个球体,并返回一个包含所有球体的 TriangleMesh 对象。然后可以使用 Open3D 的可视化工具将这些球体显示出来。
# 将提取的特征点变大 便于区分
def keypoints_to_spheres(keypoints):
spheres = o3d.geometry.TriangleMesh()
for keypoint in keypoints.points:
sphere = o3d.geometry.TriangleMesh.create_sphere(radius=1)
sphere.translate(keypoint)
spheres += sphere
spheres.paint_uniform_color([1.0, 0.0, 0.0])
# sphere.translate((1,0,0))
return spheres
三、实现效果
3.1原始点云
3.2提取后点云
热门推荐
膝关节磁共振检查需要多长时间
信宜消防行动,严护校外托管机构消防安全
黄埔新房置业优选!科学城VS老黄埔,怎么选?
全球十大手表品牌:从瑞士经典到法国优雅
条件单的定义是什么?条件单在交易中有哪些应用?
缅黄玉后期保养及其颜色变化
儿童服用中药的剂量标准
干嚼咖啡能解压?推荐一套动静结合的科学“解压法”
如何辨别库存车?一文详解多种实用判断方法
华夏幸福:穿越债务风暴的转型之路
宝马车的前后轮胎尺寸为何不同
古装剧后宫争宠的秘密武器:麝香真的会导致不孕吗?
描摹现实并非只靠真人电影,动画片一样可以做到丨业内谈
那些倒走治腰突的人后来都怎么样了?
奎屯市建设“完整社区”满足居民美好生活需求
Nature子刊:苏黎世联邦理工学院电液压机器人腿展现惊人灵活性与效率!
Cmk、Cpk、Ppk的区别及应用
烤面包的温度
飞檐最新报告,探索未来建筑美学与技术革新
“急急如律令”翻译曝光:揭秘背后故事,无人猜对热
与外教团队无障碍沟通 国足凝聚力提升
天煞孤星的八字是什么 天煞孤星是什么命
清洁生产新标准:废气处理设备如何提升企业竞争力
法律顾问如何管理客户
跨境在线客服痛点大盘点:如何解决效率与沟通难题?
常见车用吸隔声材料对比分析
国五车不加车用尿素,会出现什么后果?会堵塞其中零件
南方电网普定供电局:政企协同持续优化用电营商环境
16个小技巧,拯救你的记忆力
文件写好了发给领导怎么说