请选择 进入手机版 | 继续访问电脑版

点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 33522|回复: 45

最近写了个ICP匹配教程

[复制链接]
发表于 2014-7-31 10:39:23 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2014-8-4 11:15:18 | 显示全部楼层
你的score是 多少?看看量化的结果
回复 支持 反对

使用道具 举报

发表于 2014-8-5 13:49:04 | 显示全部楼层
这个是pcl中icp算法的详解吗
回复 支持 反对

使用道具 举报

发表于 2014-8-5 20:39:22 | 显示全部楼层
我用pcl1.6 用你的参数"4个参数分别为:1.5,1e-10,0.01,100"做了rabbit的测试,但是结果不好,相当于0.1的效果,j但score竟然有0.0006{:3_41:}.另外, 你的小盒子的对应“4个参数分别为:1500,1e-10,0.1,300”,最大对应距离为什么选那么大?你根据什么来选的{:3_57:}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-6 14:34:39 | 显示全部楼层
FeelweeL 发表于 2014-8-5 20:39
我用pcl1.6 用你的参数"4个参数分别为:1.5,1e-10,0.01,100"做了rabbit的测试,但是结果不好,相当于0.1 ...

1. 我也很纳闷为什么会差别很大,难道是1.7.1的缘故,能否把你的源码发给我,littletinygo@sina.com
2. 我的小盒子单位是mm,所以选择了1500,其实是1.5m
3. dmax(第一个参数)其实是个阈值,icp匹配只是选择两个点集中距离在dmax以内的点进行匹配的
4. 因为我所给出的两个点集都是100%重合的,所以我设定了很大的阈值将它们全包围
回复 支持 反对

使用道具 举报

发表于 2014-8-6 21:56:28 | 显示全部楼层
༼_つ_◕_◕_༽ 发表于 2014-8-6 14:34
1. 我也很纳闷为什么会差别很大,难道是1.7.1的缘故,能否把你的源码发给我,
2. 我的小盒子单位是mm,所 ...

    源码和你的差不多。。你的效果实在太好,不用粗配准都能很好融合{:3_41:}
    下午用你的源码测试了,发现你的PCL 1.7支持双向的相互搜素,pcl1.6 不支持。把双向KD树注释掉,用你的参数,结果跟上面一样远达不到你的效果。。
核心代码如下:
// ICP
        pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
        //pcl::search::KdTree<pcl::PointXYZ>::Ptr tree1 (new pcl::search::KdTree<pcl::PointXYZ>);
        //tree1->setInputCloud(cloud_source);
        //pcl::search::KdTree<pcl::PointXYZ>::Ptr tree2 (new pcl::search::KdTree<pcl::PointXYZ>);
        //tree2->setInputCloud(cloud_target);
        //icp.setSearchMethodSource(tree1);
        //icp.setSearchMethodTarget(tree2);
        icp.setInputCloud(cloud_source);
        icp.setInputTarget(cloud_target);
        icp.setMaxCorrespondenceDistance(1.5);
        icp.setTransformationEpsilon(1e-10);
        icp.setEuclideanFitnessEpsilon(1e-10);

        //icp.setRANSACOutlierRejectionThreshold(0.3); /////

        icp.setMaximumIterations(30);
        icp.align(*cloud_source_registration);
        Eigen::Matrix4f transformation = icp.getFinalTransformation();
        std::cout << transformation << std::endl;
        std::cout <<"score= " <<icp.getFitnessScore() << std::endl;       
        std::cout <<"迭代进行次数: "<<icp.nr_iterations_;//////显示迭代进行的次数

         //pcl::io::savePCDFileASCII<pcl::PointXYZ>( "E/icp/rabbitsrcreg01.pcd", *cloud_source_registration);

        // display

后面又调整参数进行测试:四个参数设置成  1.5  1e-10   1e-10  30  (打算迭代30次收敛,看能达到怎样效果)
你敢想—— score:2.5e-11  ! 收敛
结果接近完美融合了

为何参数和你的差别这么大?!1.7 的双向KD树那么神奇?

另外,可否用你的pcl 帮我测试一下我自己的数据,我测试了很久效果一直很不好。文件我发给你

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-7 16:20:11 | 显示全部楼层
FeelweeL 发表于 2014-8-6 21:56
源码和你的差不多。。你的效果实在太好,不用粗配准都能很好融合
    下午用你的源码测试了 ...

已回复
查看你的邮箱
回复 支持 反对

使用道具 举报

发表于 2014-8-14 11:10:25 | 显示全部楼层
问下你的PCL1.7.1没有.EXE的  你是怎么配置成功的?求指教啊,楼主。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 14:58:36 | 显示全部楼层
湖南小学小小博 发表于 2014-8-14 11:10
问下你的PCL1.7.1没有.EXE的  你是怎么配置成功的?求指教啊,楼主。。。

可以关注下我的CSDN博客
http://blog.csdn.net/u012337034/article/details/38270109
有详细介绍
回复 支持 反对

使用道具 举报

发表于 2014-9-4 17:03:34 | 显示全部楼层
༼_つ_◕_◕_༽ 发表于 2014-8-14 14:58
可以关注下我的CSDN博客
http://blog.csdn.net/u012337034/article/details/38270109
有详细介绍 ...

你好,我配置PCL1.7.1出现这样的问题,请您帮我看看

The C compiler identification is MSVC 16.0.40219.1
The CXX compiler identification is MSVC 16.0.40219.1
Try OpenMP C flag = [/openmp]
Performing Test OpenMP_FLAG_DETECTED
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeCInformation.cmake:37 (get_filename_component):
  get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
  CMakeLists.txt:3 (PROJECT)


CMake Error: Internal CMake error, TryCompile configure of cmake failed
Performing Test OpenMP_FLAG_DETECTED - Failed
Try OpenMP C flag = [ ]
Performing Test OpenMP_FLAG_DETECTED
CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeCInformation.cmake:37 (get_filename_component):
  get_filename_component called with incorrect number of arguments
Call Stack (most recent call first):
  CMakeLists.txt:3 (PROJECT)



CMake Error: Internal CMake error, TryCompile configure of cmake failed
Performing Test OpenMP_FLAG_DETECTED - Failed
Could NOT find OpenMP (missing:  OpenMP_C_FLAGS OpenMP_CXX_FLAGS)
Not found OpenMP
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-3-28 23:27 , Processed in 2.326971 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表