近期主要在做一个关于将三维CT影像和点云数据做配准的项目,通过前期调研,业内主要的方法是将CT影像使用MarchingCubes(移动立方体)生成等值面三角网格,然后再使用点云配准的方法。

1、三维图像转三角网格(STL)

三维图像转stl网格,在vtk中已经实现,主要使用MarchingCubes算法,简单而有效算法介绍详见下面篇博文,对比众多水文,这篇讲的比较明白。
图像数据到网格数据-1——MarchingCubes算法 - 止战 - 博客园原文:http://blog.csdn.net/u013339596/article/details/19167907概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据。在实际应用中,利用遥https://www.cnblogs.com/zhizhan/p/3987254.html

2.配准工具选择

在配准工具选择中,先后使用了vtk和itk,其内部都包含了icp算法的模块,但都是经典的point-to-point算法,而且只适宜对数据量较少的点进行配准,如果点太多,那么耗时太久,虽然itk官方例子中有可以通过构建距离图的例子加快运算,但通过实际使用,并没有起到很好的加速作用,综合比较之后,最终还是选用点云专门处理库PCL做。

3.PCL配准库基本介绍

PCL配准库中集成了很多针对点云配准的精配准及粗配准方法,主要类如下:

(1)CorrespondenceEstimation类,用来确定两点云中的对应匹配关系。

(2)CorrespondenceRejectorFeatures类,能够实现基于特征匹配的对应点对提取。

(3)SampleConsensusPrerejective类,实现了基于RANSAC方法的对应点对外点去除,用于姿态评估和点云配准中的几何一致性限制,从而保证后续算法的准确和高效。

(4)TransformationEstimation3Point类,实现使用三个匹配点计算两点云变换矩阵。

(5)TransformationFromCorrespondences类,实现三个及以上匹配点间变换矩阵的计算。

(6)TransformationEstimationDQ类和TransformationEstimationDualQuaternion类

实现基于对偶四元数的点云姿态估计。

(7)TransformationEstimationLM类,实现基于对应匹配点对,用Levenberg-Marquardt优化的变换矩阵估计。

(8)TransformationEstimationPointToPlane类,实现基于Levenberg-Marquardt优化的匹配点对间最小点到平面距离的最优变换矩阵计算。

(9)TransformationEstimationPointToPlaneWeighted类,在TransformationEstimationPointToPlane类的基础上加入了对应匹配点的权重,以适应更为复杂场景点云配准任务。

(10)TransformationEstimationPointToPlaneLLS 类,基于线性最小二乘的点到平面距离累计最小化约束,对应点到平面的距离计算加入法向量约束,具体内容参照论文:Linear Least-Squares Optimization for Point-to-Plane ICP surface registration 2014

(11)TransformationEstimationPointToPlaneLLSWeighted类,在TransformationEstimationPointToPlaneLLS 类基础上加入了对应点匹配权重,从而更合理的计算匹配点间变换矩阵。

(12)TransformationEstimationSVD类,使用SVD分解策略完成匹配点对的变换矩阵计算。

(13)TransformationValidationEuclidean类,实现了给定对应匹配的变换,并计算可靠性得分。

(14)IterativeClosestPoint类,实现迭代最近点算法(ICP)。

(15)IterativeClosestPointNonLinear类,ICP算法的变体,后端使用Levenberg-Marquardt作为优化。

(16)GeneralizedIterativeClosestPoint类,ICP算法的变体,实现了一般化的ICP算法,具体参考Generalized-ICP论文。

(17)GeneralizedIterativeClosestPoint6D类,集成了L*a*b*颜色空间到Generalized-ICP算法中。

(18)IterativeClosestPointWithNormals 类,ICP算法的变体,以点到平面的最小距离作为迭代优化对象,实现点云配准。

(19)FPCSInitialAlignment 类,实现《4-points congruent sets for robust pairwise surface registration》中的4PCS算法;

(20)KFPCSInitialAlignment类,实现《Markerless point cloud registration with keypoint-based 4-points congruent sets》中的k4PCS算法。

(21)NormalDistributionsTransform(NDT)类,统计分析点云中法向量分布,来实现点云的转化和配准。具体参考The Three-Dimensional Normal-Distributions Transform an Efficient Representation for Registration(2009)

4.配准方法介绍

4.1采样一致性初始配准算法SAC-IA(Sample Consensus Initial Aligment )

4.1.1介绍

采样一致性初始配准算法通常基于特征描述子PFH和FPFH进行配准。

PFH(Point Feature Histograms)是一种点云特征点的特征描述子,是一种的姿态不变的局部特征,其目标是编码k邻域中的几何特征,关于PFH描述子生成的原理,网上有很多介绍,在此不再赘述,在PCL中PFH经常会生成125维的向量,有些同学可能不太明白这个特征描述子为什么是125维,其实可以这样想,PCL中主要使用经典的PFH描述子k个邻域内两两点之间的四联体(三个角度一个距离)中的三个角度变量(先叫三联体),然后每个角度变量分成五份,我们可以先不要想125维的一维向量,先生成一个具有5*5*5维度的125个小格子的三维直方图,然后每计算一个三联体,在三维直方图中符合的位置加1,然后计算结束之后,摊开,即成为了125维的一维向量。

FPFH特征描述子,对PFH特征进一步优化升级就得到了快速点特征直方图(FPFH)。其计算过程如下:

(1)为查询点求得它和其k邻域内每个点之间的三个特征元素值,然后统计成一个SPFH;

(2)分别对k邻域中的每个点确定k邻域,按第一步分别形成自己的SPFH;

(3)加权统计生成最终的33维度的特征向量(每个特征维度生成一个直方图,最后连在一起)

PFH和FPFH的主要区别

(1)FPFH没有对全互联点Pq的所有邻近点的计算参数进行统计,因此可能漏掉了一些重要的点对,而这些漏掉的点对可能对捕捉查询点周围的几何特征有贡献。

(2)PFH特征模型是对查询点周围的一个精确的邻域半径内,而FPFH还包括r范围以外2r以内的额外点对。

(3)因为重新计算权重的方式,FPFH通过结合SFPH的值,重新捕获邻近重要点对的几何信息。

(4)FPFH的整体复杂性低,FPFH在实际的应用中更为常见。

4.1.2流程

(1)计算PFH或者FPFH特征描述子

(2)SAC配准(配准的采样记录要大于某个阈值,保证采样点具有不同的特征),使用Huber作为罚函数

(3)进行精配准

4.1.3算法适用范围

粗配准,可以看到该配准方法还是基于局部特征描述子的一种配准方法。在医疗图像软件中基于特征描述子配准方法使用较少,更多的是先人工选择一些特征点,完成粗配准。

4.1.4参考资料:

(1)PFH和FPFH_xinxiangwangzhi_的博客-CSDN博客

(2)SAC-IA粗配准+ICP精配准_peach_blossom的博客-CSDN博客_sac-ia

4.2 Point to Point ICP算法

4.2.1算法介绍

方法来自论文《A method for registration of 3-D shapes》,网上介绍比较多,在后续项目中也使用了该算法,总体来说效果还可以,主要公式如下:

算法主要包含两个步骤

(1)在moving点云在fixed点云中每个点的最近点,在PCL中默认会构建fixed点云KD-tree,所以在配准时,速度比ITK要快很多

(2)基于找到的最近点对,求解最优变换矩阵,在PCL中使用SVD来求解。

4.2.2算法中设置需要设置的变量说明

(1)setMaximumIterations,设置最大迭代次数

(2)setEuclideanFitnessEpsilon,收敛条件,均方误差小于此值就停止迭代。

(3)setTransformtionEpsilon,收敛条件,设置两次变化矩阵之间的差值小于此值就停止迭代。

(4)setMaxCorrespondenaceDistance,设置对应点对之间的最大距离,在步骤1中使用。

4.2.3算法使用中需要注意的问题

(1)ICP算法对初始值很敏感,极容易陷入局部最优解,所以在迭代之前最好设计好初始值。

(2)ICP算法原来上来讲要对moving中找到在fixed点云中的对应点,然后来计算转换矩阵,如果在moving点云中包含了不应该配对的点,这会导致计算误差,这种情况应该避免

(3)ICP的moving点云中最好少用一些平面或者扫描面的点,这种类型点太多的话,对结果影响较大,对于ICP算法来讲,moving点云中尽量包含较多有一定曲率,并且距离较远的点,这样可能会提高精度。

(4)如果moving点云中包含了太多点,可以使用降采样来过滤一些点。

4.2.4适用范围

地球人都知道在精配准中使用.

4.3 Point to Plane ICP

4.3.1算法介绍

出自《Object Modeling by Registration of Multiple Range Images》,基本原理如下:

后续由《Linear Least-Squares Optimization for. Point-to-Plane ICP Surface Registration》这篇论文将该问题转换成了近似的线性最小二乘问题,可以使用SVD求解

4.3.2算法适用范围

(1)算法比point to point 方法可以提高收敛速度,但论文中提到不一定会收敛到全局最优解

(2)算法中主要使用了法向量来计算,所以在配准中使用准确的法向量至关重要,主要可以通过两个方法来保证①对比较平滑、质量较好的点云使用该方法②如果原始点云质量不太好,那么在相对smooth区域采样,然后进行配准。

参考文献

【1】https://blog.csdn.net/pingjun5579/article/details/118546565

4.4 Plane to Plane ICP

4.4.1介绍

该方法在论文《Generalized-ICP》中最先提出来,Generalized-ICP其实是一种基于概率论的算法框架,将point to point 和point to plane作为该框架中的一种特例,并且又提出了plane to plane方法,该方法的特点是综合考虑了距离和法向量,收敛效果较好,可以纠正最大匹配距离设的值比较大的情况,具体算法介绍可以参照如下文章:

[论文阅读][ICP变种] Generalized-ICP_你代码像一首诗的博客-CSDN博客

4.4.2适用范围

由于该方法也使用了法向量,如果点云中噪声比较多,那么计算的法向量就不太准确,也会影响最终精度,对于医疗图像来说,如果骨质成像不好,直接使用移动立方体生成的stl网格是及其不平滑的,这时候可以先平滑后再使用该方法,综合icp三种方法,油管有个up主建议generalized icp应该是使用icp算法时首选的方法。

4.5 NDT算法

4.5.1原理介绍

NDT(Normal Distribution Transformation)算法主要有三篇论文:

1. <A new approach to laser scan matching> 认为是它首先提出的,不过是2D2. <The Three-Dimensional Normal-Distributions Transform - an Efficient Representation for Registration,Surface Analysis, and Loop>领域应用到了3D3. <A 3-D Scan Matching using Improved 3-D Normal Distributions Transform for Mobile Robotic Mapping>做了全面的总结和拓展,博士论文

网上写该算法原理的最多是第二篇,这也是激光点云配准中经常使用的一种方法,通过学习该算法,可以知道,该算法的思想与Generalized ICP算法非常类似,都使用了概率分布,而且都假设点主要分布服从正态分布,不同的是Generalized ICP直接假设点的位置符合高斯分布,而在NDT算法中假设每个分成的小格子内部的点符合高斯概率分布(实现时会加入均匀分布),这样做我个人感觉会减少计算时间,加快计算速度。NDT基本原理和步骤如下:

(1)分成小格子,计算每个小格子中的高斯分布参数,主要是均值和协方差矩阵(协方差矩阵表征了当前小格子中点分布的平滑性和方向)

(2)通过转换矩阵T将浮动点云(moving cloud)变换到(1)中分成的小格子中,然后计算每个变换点在小格子中的概率,这个概率是该变换点在周围邻近小格子中概率之和,最后通过最大似然估计原理,将每个变换点的概率相乘得到最终的目标函数。

(3)使用牛顿迭代法求解变换矩阵,查看是否满足收敛条件,不满足,则转到(2)中。

4.5.2适用范围

这种方法相对于icp等算法,具有更好的鲁棒性,但也会受到初始条件的影响,主要通过计算概率分布作为主要的收敛目标,其应该能达到较好的形状匹配,可用于精确配准。

4.5.3一些质量较高的参考链接

(1)学习教程:点云匹配-正态分布变换NDT(Normal Distributions Transform)算法_哔哩哔哩_bilibili

(2)

点云 | 配准之NDT算法漫谈 - 墨天轮

(3)https://www.youtube.com/watch?v=MLpaC-ZG2RA

4.6 4PCS算法

没时间写了,有时间再写。

5.总结

通过这个项目,把点云配准中几个具有代表性的算法进行了梳理,小有收获。

6.其他参考文献:

[1] Lorensen, W. E. and H. E. Cline(1987). “Marching cubes: A high resolution 3D surface construction algorithm.” Computers & Graphics.

[2]【泡泡点云时空-PCL源码解读】PCL中的点云配准方法_算法

医疗图像配准-点云配准总结相关推荐

  1. DeepI2P:基于深度分类的图像对点云配准

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 小黑导读 论文是学术研究的精华和未来发展的明灯.小黑决心每天为大家带来经典或者最新论文的解读和分享,旨 ...

  2. 基于全景图像与激光点云配准的彩色点云生成算法(2014年文章)

    标题:The algorithm to generate color point-cloud with the registration between panoramic imageand lase ...

  3. 该如何学习三维点云配准的相关知识?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 知乎用户 上海交通大学 电子与信息博士在读 点云配准综述 本文意在 ...

  4. 点云配准的传统算法ICP与NDT概述

    公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起交流一起进步,有兴趣的可联系微信:920177957.本文来自点云PCL博主的分享,未经作者允许请勿转载, ...

  5. 点云配准——经典配准算法及配准效果对比

    目录 点云配准基础知识 什么是点云配准? 点云配准的步骤 粗配准 精配准 点云配准的经典算法 ICP算法 NDT算法 3DSC算法 PFH FPFH 完全配准效果对比 点云配准基础知识 什么是点云配准 ...

  6. 重磅直播 | PointDSC:基于特征匹配的点云配准方法(CVPR2021)

    大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微信群内完成答疑. 本期由香港科技大学计算机系白旭阳博士分享,分享的主题为<基于特征匹配的鲁棒 ...

  7. 在医学图像分析中使用ICP算法进行点云配准

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文转载自「计算机视觉工坊」,该公众号重点在于介绍深度学习.智能驾驶等领域,一个小众的公众号. 论文标 ...

  8. 综述|2021最新关于点云配准的全面介绍

    标题:A comprehensive survey on point cloud registration 作者:Xiaoshui Huang[1], Guofeng Mei[2], Jian Zha ...

  9. CVPR2020:训练多视图三维点云配准

    CVPR2020:训练多视图三维点云配准 Learning Multiview 3D Point Cloud Registration 源代码和预训练模型:https://github.com/zgo ...

  10. 点云配准的端到端深度神经网络:ICCV2019论文解读

    点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...

最新文章

  1. Java Lambda表达式入门
  2. python引用文件 mode写在后面还是前面,python3 文件操作常用mode参数用法详解
  3. WebSocket——[Error during WebSocket handshake: Unexpected response code: 200]解决方案
  4. 透明大页相关内核参数_Linux7.4 关闭透明大页
  5. 第五章 软件下载与安装(二、Ubuntu安装Mininet)
  6. 转载:使用 GNU Libtool 创建库
  7. MSSQL-to-MySQL v5.3, 从MSSQL迁移到mySQL的最佳工具
  8. GridControl动态添加 颜色列
  9. c++ socket学习(1.1)
  10. 阿里云 超级码力在线编程大赛初赛 第3场 题目2. 房屋染色(DP)
  11. Springcloud 高效率本地加Redis双级缓存
  12. 华为路由器防火墙配置命令总结(上)
  13. 在Asciidoc中的多级列表以及缩进的使用
  14. BZOJ4570: [Scoi2016]妖怪
  15. qca9535 tftp32 刷机_【U-Boot】U-Boot 刷机方法大全
  16. 复活吧,我的僵尸路由器们,wrt1041n v2再战江湖,路由器硬改硬刷手把手超详细教学
  17. 【网络安全】企业内网中的横向移动
  18. 如何删除ie浏览器缓存文件、缓存js
  19. 高红梅:第一章 ​​​​​​​第二节 文学创作与自我身份认同问题
  20. Redis Cluster与Codis的选择

热门文章

  1. MySQL 基本语法
  2. 社区分享|Arm 中国生态技术市场经理教你玩转 TFLite Micro 端云一体解决方案
  3. 软考初级程序员---题目(六)
  4. Java抽签小程序(可控制抽几个人)(利用随机数与数组想结合)
  5. 启动SQL Server服务器以及新建连接的方法
  6. 期末前端web大作业——基于HTML当当图书网项目的设计与实现 网上书城 网上书店 在线书店网页
  7. 开源免费的录屏gif工具
  8. 如何搭建一个好的测试环境
  9. 【Unity3D】动态更换天空盒(场景不受天空盒影响 等问题)
  10. linux强行退出线程,Linux 多线程编程--线程退出