本项目为上海交通大学计算机图形学(CS337)课程大作业,由王梓涵和刘权完成。
本小组在现有标准 ICP 和 Go-ICP 代码基础上尝试若干性能优化。
- Windows 10
- MSVC 14.0 及以上
- CMake 3.16
- PCL 1.9
- VTK 8.2
- Qt 5.12.5
- Eigen 3.3.7
- Boost 1.71
- FLANN 1.7.1
所有源文件位于 src 目录下,后续提及的测试函数均在 src/main.cpp 中。
标准 ICP 共有两个实现:一个是在 PCL 基础上简化的单线程版本,见 SingleThreadedICP
;另一个是使用并行算法的优化版本 ICP
。两者均使用优化版本的 K-d 树进行最近邻点查找。
测试 testICP
中考察了并行算法的性能提升。
Go-ICP 实现在论文作者提供代码基础上改造完成,见 GoICP
。
测试 testGoICP
中对 Go-ICP 的配准结果和运行时间进行考察,testFpcsGoicpImprovement
对预先使用 4-PCS 进行初始对齐再使用 Go-ICP 配准的设想进行了探索。
K-d 树共有两个实现:一个是平凡的链接实现,见 NaiveKdTree
;另一个为进行内存优化的版本 KdTree
。
测试 testKdTreeCorrectness
以蛮力搜索结果为标准,验证了各 K-d 树实现的正确性;testKdTreeEfficiency
考察了使用内存优化的性能提升。
DT 共有三个实现,一个是直接使用 K-d 树进行搜索的平凡版本 NaiveDT
;一个是 Go-ICP 中附带的 DT3D
;第三个是使用线性时间算法的 LinearDT
。
测试 testdt
比较了三者构建时间的差异以及精确度差异。