open3d中,使用ISS检测算法,对关键点进行参数调整

ISS (Intrinsic Shape Signature) 算法是一种用于点云特征提取的算法,通常用于检测点云中的关键点。关键点是点云中具有显著特征的位置,它们通常对于点云处理任务(如配准、分类、分割等)非常有用。

ISS 算法根据点云的曲率和法向量等信息,通过计算点云中每个点的 ISS 值来确定关键点。ISS 值越高,表示该点在点云中具有更显著的形状特征。

然而,ISS 算法并不仅限于关键点的检测。它也可以用于其他点云处理任务,例如特征匹配、特征描述等。ISS 算法提取的关键点可以作为点云中的参考点,用于计算点云之间的配准变换或描述点云的局部结构。

armadillo = o3d.data.ArmadilloMesh()
mesh = o3d.io.read_triangle_mesh(armadillo.path)
mesh.compute_vertex_normals()
pcd = o3d.geometry.PointCloud()
pcd.points = mesh.vertices
tic = time.time()
keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd)
toc = 1000 * (time.time() - tic)
print("ISS Computation took {:.0f} [ms]".format(toc))
mesh.compute_vertex_normals()
mesh.paint_uniform_color([0.5, 0.5, 0.5])
keypoints.paint_uniform_color([1.0, 0.75, 0.0])
o3d.visualization.draw_geometries([keypoints, mesh], front=[0, 0, -1.0])

手册中给的代码示例有一个语法错误,在调用 o3d.visualization.draw_geometries 函数时出现了类型错误,这是因为open3d的更新导致的,front的参数类型不能这么写,解决办法很简单,把最后一行括号里的front=[0, 0, -1.0]删了就行,运行出来是这样

但是很显然,我们平时检测的物体可能没有这么复杂,需要设置参数使得提取的关键点数量变少,提升代码效率,节约成本,所以第一件事就会想到使用Python解释器在调用keypoints函数之前指定参数

parameters = o3d.geometry.keypoint.ISSKeypointEstimationParameters()
parameters.salient_radius = 0.1  # 调整为适当的值
parameters.non_max_radius = 0.05  # 调整为适当的值
parameters.gamma_21 = 0.5  # 调整为适当的值
parameters.gamma_32 = 0.9  # 调整为适当的值

keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd, parameters)

不知道为什么,无论怎么指定都是没有用的,问这家伙,一个劲的给我道歉,态度贼好。

之后调查发现,作者提供了直接在函数里写参数的方式,直接敲就可以了

keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd,
                                                        salient_radius=0.005,
                                                        non_max_radius=0.005,
                                                        gamma_21=0.5,
                                                        gamma_32=0.5)

但是这个参你就调去吧,一调一个不吱声

关键点显示不出来,等我显示出来就更新博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值