/OptICP

SJTU CS337 Project: Optimization of ICP-Based Point Cloud Registration Methods

Primary LanguageC++

基于迭代最近点的点云配准方法性能优化

简介

本项目为上海交通大学计算机图形学(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

标准 ICP 共有两个实现:一个是在 PCL 基础上简化的单线程版本,见 SingleThreadedICP;另一个是使用并行算法的优化版本 ICP。两者均使用优化版本的 K-d 树进行最近邻点查找。

测试 testICP 中考察了并行算法的性能提升。

Go-ICP

Go-ICP 实现在论文作者提供代码基础上改造完成,见 GoICP

测试 testGoICP 中对 Go-ICP 的配准结果和运行时间进行考察,testFpcsGoicpImprovement 对预先使用 4-PCS 进行初始对齐再使用 Go-ICP 配准的设想进行了探索。

K-d 树

K-d 树共有两个实现:一个是平凡的链接实现,见 NaiveKdTree;另一个为进行内存优化的版本 KdTree

测试 testKdTreeCorrectness 以蛮力搜索结果为标准,验证了各 K-d 树实现的正确性;testKdTreeEfficiency 考察了使用内存优化的性能提升。

DT

DT 共有三个实现,一个是直接使用 K-d 树进行搜索的平凡版本 NaiveDT;一个是 Go-ICP 中附带的 DT3D;第三个是使用线性时间算法的 LinearDT

测试 testdt 比较了三者构建时间的差异以及精确度差异。