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提取后点云
热门推荐
婺源春节“开门大吉”:从宗族文化到文旅融合
六个月宝宝补钙指南:从主食到辅食的科学选择
电信诈骗高发,12381预警系统成群众防骗利器
12381反诈系统拦截诈骗27.5亿次,精准预警守护群众"钱袋子"
小区路面塌陷一年未见施工?物业:投票未过2/3,无法动用维修资金
如何处理楼房塌陷的紧急情况以保障安全?这种紧急处理对居民生活有何具体影响?
买车贷款怎么选?利率、期限、经济状况全考量
U盘文件丢失原因分析与5步恢复法详解
电脑无法识别U盘?8种方法帮你快速恢复
教育部新规出台:如何破解学生睡眠不足难题?
睡眠不足让工作效率大打折扣,专家建议每天保证7-8小时睡眠
熬夜真的让你变老?揭秘睡眠不足的危害
哈佛研究证实:睡眠不足会增加糖尿病风险
五台山自驾游之车辆预约技巧,让你的旅程顺利开启
西安到南五台自驾一日游攻略(附游玩推荐)
眩晕伴肢体无力,竟是主动脉夹层!一例无痛性AD病例解析
重庆松山医院:微创手术成功救治高龄主动脉夹层患者
小苏打+白醋:万能清洁剂的使用指南
血清标志物助力肝细胞癌的管理
一文读懂冠心病:病因、症状、治疗与预防全攻略
急性主动脉夹层自救指南:五种方法争取黄金救治时间
颈椎病引发眩晕?专家解析椎动脉型颈椎病防治要点
2024 PEL春季赛:高手压枪技巧大揭秘
全押、全力以赴到冒险精神:“梭哈”的三重含义
尼古丁贴片到伐尼克兰:戒烟药物使用指南
春节宠物消费井喷:年夜饭销量增120%,行业规模近2500亿
过年氛围感拉满!红色大衣拍照技巧大揭秘
内蒙古市场监管局发布春节餐饮加工食材注意事项:从采购到加工,把好食品安全关
科普→高铁小知识、乘车小常识
善利AI&伍老师教你搞定高考数学压轴题