Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <gtest/gtest.h>
00039 #include <pcl/io/pcd_io.h>
00040 #include <pcl/registration/correspondence_estimation_normal_shooting.h>
00041 #include <pcl/features/normal_3d.h>
00042 #include <pcl/kdtree/kdtree.h>
00043
00045 TEST (CorrespondenceEstimation, CorrespondenceEstimationNormalShooting)
00046 {
00047 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1 (new pcl::PointCloud<pcl::PointXYZ> ());
00048 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2 (new pcl::PointCloud<pcl::PointXYZ> ());
00049
00050
00051 for (float i = 0.0f; i < 10.0f; i += 0.2f)
00052 {
00053 for (float z = 0.0f; z < 5.0f; z += 0.2f)
00054 {
00055 cloud1->points.push_back (pcl::PointXYZ (i, 0, z));
00056 cloud2->points.push_back (pcl::PointXYZ (i, 2, z));
00057 }
00058 }
00059
00060 pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
00061 ne.setInputCloud (cloud1);
00062
00063 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
00064 ne.setSearchMethod (tree);
00065
00066 pcl::PointCloud<pcl::Normal>::Ptr cloud1_normals (new pcl::PointCloud<pcl::Normal>);
00067 ne.setKSearch (5);
00068 ne.compute (*cloud1_normals);
00069
00070 pcl::CorrespondencesPtr corr (new pcl::Correspondences);
00071 pcl::registration::CorrespondenceEstimationNormalShooting <pcl::PointXYZ, pcl::PointXYZ, pcl::Normal> ce;
00072 ce.setInputSource (cloud1);
00073 ce.setKSearch (10);
00074 ce.setSourceNormals (cloud1_normals);
00075 ce.setInputTarget (cloud2);
00076 ce.determineCorrespondences (*corr);
00077
00078
00079 for (unsigned int i = 0; i < corr->size (); i++)
00080 {
00081 EXPECT_EQ ((*corr)[i].index_query, (*corr)[i].index_match);
00082 }
00083 }
00084
00086 TEST (CorrespondenceEstimation, CorrespondenceEstimationSetSearchMethod)
00087 {
00088
00089 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1 (new pcl::PointCloud<pcl::PointXYZ> ());
00090 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2 (new pcl::PointCloud<pcl::PointXYZ> ());
00091 for ( size_t i = 0; i < 50; i++ )
00092 {
00093 cloud1->points.push_back(pcl::PointXYZ(float (rand()), float (rand()), float (rand())));
00094 cloud2->points.push_back(pcl::PointXYZ(float (rand()), float (rand()), float (rand())));
00095 }
00096
00097 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree1 (new pcl::search::KdTree<pcl::PointXYZ> ());
00098 tree1->setInputCloud (cloud1);
00099 pcl::search::KdTree<pcl::PointXYZ>::Ptr tree2 (new pcl::search::KdTree<pcl::PointXYZ> ());
00100 tree2->setInputCloud (cloud2);
00101
00102 pcl::registration::CorrespondenceEstimation<pcl::PointXYZ, pcl::PointXYZ, double> ce;
00103 ce.setInputSource (cloud1);
00104 ce.setInputTarget (cloud2);
00105 pcl::Correspondences corr_orig;
00106 ce.determineCorrespondences(corr_orig);
00107
00108 ce.setSearchMethodSource (tree1, true);
00109 ce.setSearchMethodTarget (tree2, true);
00110 pcl::Correspondences corr_cached;
00111 ce.determineCorrespondences (corr_cached);
00112
00113 EXPECT_EQ(corr_orig.size(), corr_cached.size());
00114 for(size_t i = 0; i < corr_orig.size(); i++)
00115 {
00116 EXPECT_EQ(corr_orig[i].index_query, corr_cached[i].index_query);
00117 EXPECT_EQ(corr_orig[i].index_match, corr_cached[i].index_match);
00118 }
00119
00120 }
00121
00122
00123 int
00124 main (int argc, char** argv)
00125 {
00126 testing::InitGoogleTest (&argc, argv);
00127 return (RUN_ALL_TESTS ());
00128 }
00129