简介:通过ICP配准,对齐CBCT提取牙齿与口内扫描获取牙冠,结果失败。原因:可能是因为两者重叠点云数据少,而不重叠部分过多,待后续分析。
1、CBCT提取牙齿 与口内扫描获取数据在同坐标系下显示,绿色是CBCT生成的牙齿点云;红色是口内扫描点云数据;
2、PCL库调用ICP进行配准
void registCTInteroral()
{
char strST[256] = "E:\\CBCT\\lower.ply";
char strCT[256] = "E:\\CBCT\\lower-CT.ply";
pcl::PointCloud<pcl::PointXYZ>::Ptr lowerSL(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr lowerCT(new pcl::PointCloud<pcl::PointXYZ>);
if (-1 == pcl::io::loadPLYFile(strST, *lowerSL))
{
cout << "error input!" << endl;
return;
}
if (-1 == pcl::io::loadPLYFile(strCT, *lowerCT))
{
cout << "error input!" << endl;
return;
}
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
icp.setInputSource(lowerSL);
icp.setInputTarget(lowerCT);
pcl::PointCloud<pcl::PointXYZ> Final;
icp.align(Final);
std::cout << "has converged:" << icp.hasConverged() << " score: " <<
icp.getFitnessScore() << std::endl;
std::cout << icp.getFinalTransformation() << std::endl;
pcl::io::savePLYFileASCII("E:\\CBCT\\align.ply", Final);
}
3、将结果和CBCT提取牙齿一起显示,红色是变换后的口内扫描数据
4、结果
没配上,待后续分析 。后面学习下:https://github.com/MIT-SPARK/TEASER-plusplus,
https://stackoverflow.com/questions/38754668/plane-fitting-in-a-3d-point-cloud