python医学图像处理之三维点云模型特征提取

      hello,小伙伴们,今天我们来聊一聊三维模型特征提取。在我们日常对模型进行一些操作(例如,配准、寻找特定点等),我们总是会遇到一个问题,就是如何从三维模型中提取其特征点。解决这个问题的方法有很多,例如,下采样,iss,甚至是深度学习等方法。

       今天,我会教大家几种基础的方法来进行特征点的提取。

       先清楚咱们今天的主角——示例的点云模型吧。大家可以猜猜这是什么,嘿嘿~

python医学图像处理之三维点云模型特征提取_第1张图片

图1 示例点云模型

       首先是超级经典的ISS算法。

       ISS(Intrinsic Shape Signatures)算法是一种用于点云数据的特征提取方法,旨在描述点云中的局部形状信息。其核心思想是通过对点云中的每个点进行评估,为每个点分配一个局部形状签名。这个局部形状签名可以被用来比较点的局部形状,从而识别点云中的特定结构或特征。

import open3d as o3d

# 读取PLY文件
pcd = o3d.io.read_point_cloud("./fengxing_out/316ply/fx_0_l_gg_modify.ply")

# iss
keypoints = o3d.geometry.keypoint.compute_iss_keypoints(pcd)

# 设置特征点的颜色
keypoints.paint_uniform_color([1.0, 0.75, 0.0])  

# 可视化点云
o3d.visualization.draw_geometries([keypoints])

       图2是ISS的结果。我的这个示例模型是一个真实人骨的三维模型,表面凹凸不平,因此ISS在对这样的模型提取特征时效果并不会很好,但ISS在针对三维城市模型提取特征时效果会更好。

python医学图像处理之三维点云模型特征提取_第2张图片

图2 ISS算法结果

       接下来呢,是介绍另一类提取特征的方法——点云下采样。这里我会介绍几种常用的点云下采样方法。

       首先是均匀下采样。图3是均匀下采样的结果。

import  open3d as o3d

#点云下采样-均匀下采样
pcd = o3d.io.read_point_cloud("./fengxing_out/316ply/fx_0_l_gg_modify.ply")
pcd_new = o3d.geometry.PointCloud.uniform_down_sample(pcd, 1000)#pcd为点云模型文件,1000为参数,可以按照自己的需求修改参数
o3d.visualization.draw_geometries([pcd_new])

python医学图像处理之三维点云模型特征提取_第3张图片

图3 均匀下采样结果

       其次是体素下采样,图4是体素下采样的结果。

import  open3d as o3d

#点云下采样-体素下采样
pcd = o3d.io.read_point_cloud("./fengxing_out/316ply/fx_0_l_gg_modify.ply")

pcd_new = o3d.geometry.PointCloud.voxel_down_sample(pcd, 20)#pcd为点云模型文件,1000为参数,可以按照自己的需求修改参数

o3d.visualization.draw_geometries([pcd_new])

python医学图像处理之三维点云模型特征提取_第4张图片

图4 体素下采样结果

       然后是曲面均匀采样,图5是曲面均匀采样的结果。

import  open3d as o3d
#点云下采样-曲面均匀采样
ply = o3d.io.read_triangle_mesh("./fengxing_out/316ply/fx_0_l_gg_modify.ply")

pcd = ply.sample_points_uniformly(number_of_points=1000)#1000为参数,可以按照自己的需求修改参数

o3d.visualization.draw_geometries([pcd])

python医学图像处理之三维点云模型特征提取_第5张图片

图5 曲面均匀采样

            最后是泊松磁盘采样,图6是泊松磁盘采样的结果。

import  open3d as o3d

#点云下采样-泊松磁盘采样
ply = o3d.io.read_triangle_mesh("./fengxing_out/316ply/fx_0_l_gg_modify.ply")

pcd = ply.sample_points_poisson_disk(number_of_points=50)#50为参数,可以按照自己的需求修改参数

o3d.visualization.draw_geometries([pcd])

python医学图像处理之三维点云模型特征提取_第6张图片

图6 泊松磁盘采样结果

       希望能帮助到各位小伙伴哦~大家可以根据自己的需求进行选择。如果大家对三维模型重建或者医学图像处理感兴趣的话,欢迎大家看看我的其他博客和资源哦~Python-医学图像处理之三维重建(进行切片级重建)_python医学图像处理_Cherry330的博客-CSDN博客

你可能感兴趣的:(医学图像处理,python,图像处理,开发语言,3d)