匹配器
2.1 icp点云精配准
template bool ex_segmentor::icp_registration(pointcloudptr &input_obj, pointcloudptr &input_scene, pointcloudptr &output_obj, eigen::matrix4f &result_transform, float &result_error, uint max_iteration, float max_distance, float ransac_th) // icp匹配 { pcl::iterativeclosestpoint icp; // icp对象 icp.setinputsource(input_obj); //设置输入源点云 icp.setinputtarget(input_scene); //设置输入目标点云 // set the max correspondence distance to 5cm (e.g., correspondences with higher distances will be ignored) icp.setmaxcorrespondencedistance(max_distance); //设置最大匹配距离 0.05 // set the maximum number of iterations (criterion 1) icp.setmaximumiterations(max_iteration); //设置最大迭代次数 50 // set the transformation epsilon (criterion 2) // icp.settransformationepsilon (1e-5); //1e-8 // set the euclidean distance difference epsilon (criterion 3) // icp.seteuclideanfitnessepsilon (0.000001); //1 icp.setransacoutlierrejectionthreshold(ransac_th); //设置ransac阈值 icp.align(*output_obj); // icp匹配 if (icp.hasconverged()) //如果icp匹配成功 { result_transform = icp.getfinaltransformation(); //获取最终变换矩阵 result_error = icp.getfitnessscore(); //获取最终匹配误差 return true; } else { result_transform = eigen::matrix4f::identity(4, 4); result_error = 1.0; return false; } }/** icp_registration(object_aligned, cluster, final, icp_result_transform, icp_error);**/2.2 fpfh点云粗配准
void fpfh_generation(pcl::pointcloud<pointxyzrgb>::ptr &input, fpfhcloud::ptr &output) // fpfh特征提取 { // 首先,生成法线 pcl::normalestimationomp<pointnormal, pointnormal> nest; // omp线程数 pcl::pointcloud<pointnormal>::ptr temp(new pcl::pointcloud<pointnormal>); //构建暂时点云 pcl::copypointcloud(*input, *temp); //拷贝点云 nest.setradiussearch(0.01); //设置半径搜索范围 nest.setinputcloud(temp); //设置输入点云 nest.compute(*temp); //计算暂时点云 // 然后生成fpfh点云 pcl::fpfhestimationomp<pointnormal, pointnormal, fpfh> fest; // omp线程数 fest.setradiussearch(0.01); // 0.025 fest.setinputcloud(temp); fest.setinputnormals(temp); fest.compute(*output); } template <typename pointtype, typename pointcloudptr> bool fpfh_matching(pointcloudptr &object, fpfhcloud::ptr &object_feature, pointcloudptr &scene, fpfhcloud::ptr &scene_feature, pointcloudptr &result_cloud, eigen::matrix4f &result_transformation) // fpfh粗配准方法 { pcl::sampleconsensusprerejective<pointtype, pointtype, fpfh> align; //采样一致性预排除算法 align.setinputsource(object); //设置输入源点云 align.setsourcefeatures(object_feature); //设置输入源特征点云 align.setinputtarget(scene); //设置输入目标点云 align.settargetfeatures(scene_feature); //设置输入目标特征点云 align.setmaximumiterations(5000); // 设置最大迭代次数 align.setnumberofsamples(7); // 设置采样点数 align.setcorrespondencerandomness(10); // 设置随机匹配点数 align.setsimilaritythreshold(0.5f); // 设置相似度阈值 align.setmaxcorrespondencedistance(0.01f); // 设置最大匹配距离 align.setinlierfraction(0.05f); // 设置内点比例 align.align(*result_cloud); if (align.hasconverged()) { result_transformation = align.getfinaltransformation(); //获取最终变换矩阵 // pcl::console::print_info(inliers: %i/%i , %in, align.getinliers().size(), scene->size(), object->size()); // return (float(align.getinliers().size()) / float(object->size())); return true; } // return 0.0f; return false; }/** fpfhcloud::ptr cluster_feature(new fpfhcloud); fpfh_generation(cluster, cluster_feature); ros_info(cluster_size : %d, feature size : %d, cluster->size(), cluster_feature->size()); bool fpfh_match_success = fpfh_matching<pointxyzrgb>(object_, object_feature_, cluster, cluster_feature, object_aligned, align_result_transform);**/2.3 pca点云粗配准
void ex_segmentor::pca_registration(pcl::pointcloud::ptr
绿米完成由赛博联合基金领投、云沐资本跟投的战略融资
回流焊常见的质量缺陷及解决方法
稳压管2cw231参数
“区块链疲劳”出现,44%美国高管认为“区块链被过度炒作”
为什么越来越多的企业会用到 NTP网络时间服务器
PCL匹配器滤除点云方法
极致出品,可靠至上:晶丰明源测试实验室首次公开
单车用量增长的电池管理芯片们(BMIC)
两款电子灭蝇器的电路图分享
被动方法在城市街区和道路网络中使用广泛部署的传感器
从时序角度来探讨不同类型的源同步协议技术分析
如何选择音质好的音响
dfrobot耐高温硅胶高压线10AWG6平方毫米简介
虚拟运营商的移动通信转售业务正式发牌
DC电源模块在智能家居中的作用与发展潜力
新款iPhoneX不会降价起码需要899美元
可控饱和电抗器的基本原理分析
基于飞凌嵌入式FETMX8MM-C核心板的血细胞分析仪
新品发布 | Vertiv™ Liebert® DA,双重动力,无限可能
赛迪研究院电子信息研究所发布了白皮书《“新基建”发展白皮书》