pcl中ransac提取直线_SIFT关键点提取
尺度不变特征转换(Scale-invariant feature transform,SIFT)是David Lowe在1999年发表,2004年总结完善。其应用范围包括物体辨识,机器人地图感知与导航、3D模型建立、手势辨识、影像追踪和动作对比。此算法已经申请专利,专利拥有者属于英属哥伦比亚大学。SIFT算法在3D数据上的应用由Flint等在2007年实现。这里所讲的提取点云关键点的算法便是由Flint等人实现的SIFT3D算法。
pcl中sift关键点提取算法如下
#include <pcl/registration/ia_ransac.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/fpfh.h>
#include <pcl/search/kdtree.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/filter.h>
#include <pcl/registration/icp.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <time.h>
#include <pcl/common/io.h>
#include <iostream>
#include <pcl/keypoints/sift_keypoint.h>//关键点检测using pcl::NormalEstimation;
using pcl::search::KdTree;
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloud;//点云可视化
void visualize_pcd(PointCloud::Ptr pcd_src,PointCloud::Ptr pcd_tgt)//PointCloud::Ptr pcd_final)
{pcl::visualization::PCLVisualizer viewer("registration Viewer");pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> src_h(pcd_src, 0, 255, 0);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> tgt_h(pcd_tgt, 255, 0, 0);//pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> final_h(pcd_final, 0, 0, 255);viewer.setBackgroundColor(255, 255, 255);viewer.addPointCloud(pcd_src, src_h, "source cloud");viewer.addPointCloud(pcd_tgt, tgt_h, "tgt cloud");//viewer.addPointCloud(pcd_final, final_h, "final cloud");viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, "tgt cloud");while (!viewer.wasStopped()){viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}//pcl中sift特征需要返回强度信息,改为如下:
}
namespace pcl
{template<>struct SIFTKeypointFieldSelector<PointXYZ>{inline floatoperator () (const PointXYZ &p) const{return p.z;}};
}int
main(int argc, char** argv)
{//加载点云文件PointCloud::Ptr cloud_src_o(new PointCloud);//原点云,待配准pcl::io::loadPCDFile("E:/PointCloud/data/dragon/dragon.pcd", *cloud_src_o);cout << "原始点云数量:"<<cloud_src_o->size() << endl;//PointCloud::Ptr cloud_tgt_o(new PointCloud);//目标点云//pcl::io::loadPCDFile("E:/PointCloud/data/pc_4.pcd", *cloud_tgt_o);//clock_t start = clock();//去除NAN点//std::vector<int> indices_src; //保存去除的点的索引//pcl::removeNaNFromPointCloud(*cloud_src_o, *cloud_src_o, indices_src);//std::cout << "remove *cloud_src_o nan" << cloud_src_o->size()<<endl;//std::vector<int> indices_tgt;//pcl::removeNaNFromPointCloud(*cloud_tgt_o, *cloud_tgt_o, indices_tgt);//std::cout << "remove *cloud_tgt_o nan" << cloud_tgt_o->size()<<endl;//设定参数值const float min_scale = 0.002f; //the standard deviation of the smallest scale in the scale spaceconst int n_octaves = 3;//尺度空间层数,小、关键点多const int n_scales_per_octave = 3;//the number of scales to compute within each octaveconst float min_contrast = 0.0001f;//根据点云,设置大小,越小关键点越多//sift关键点检测pcl::SIFTKeypoint<pcl::PointXYZ, pcl::PointWithScale > sift_src;pcl::PointCloud<pcl::PointWithScale> result_src;pcl::search::KdTree<pcl::PointXYZ>::Ptr tree_src(new pcl::search::KdTree<pcl::PointXYZ>());sift_src.setSearchMethod(tree_src);sift_src.setScales(min_scale, n_octaves, n_scales_per_octave);sift_src.setMinimumContrast(min_contrast);sift_src.setInputCloud(cloud_src_o);sift_src.compute(result_src);clock_t end = clock();cout << "sift关键点提取时间" << (double)(end - start) / CLOCKS_PER_SEC << endl;cout << "sift关键点数量" << result_src.size() << endl;PointCloud::Ptr cloud_src(new PointCloud);pcl::copyPointCloud(result_src, *cloud_src);//可视化visualize_pcd(cloud_src_o, cloud_src);return (0);
}
实际中sift效果较慢。
pcl中ransac提取直线_SIFT关键点提取相关推荐
- PCL NARF关键点提取、SIFT关键点提取、Harris关键点提取
一.NARF关键点提取 1.背景 关键点也称为兴趣点,是通过定义检测标准来获取的具有稳定性.区别性的点集.从技术上来说,关键点的数量要比原始点云的数目少很多,与局部特征描述子结合在一起,组成关键点描述 ...
- PCL中RANSAC模型的使用
RANSAC算法是什么 RANSAC算法于1981年由Fischler和Bolles提出,全程是RANdom SAmple Consensus,一般中文翻译为"随机抽样一致性算法" ...
- pcl中ransac提取直线_复杂场景中的一个图像配准思路
在很多时候,我们可能需要使用到图像的识别与配准工作,来判断某个特征或者是划出某个特定特征的位置.现在的深度学习已经能够比较好地解决这个问题,比如常见的YOLO,可以利用几行设定代码就能够划出所需要识别 ...
- pcl中ransac提取直线_多目标跟踪中的相机运动模型
前言 之前的博客中我介绍了Kalman滤波器,这个算法被广泛用于多目标跟踪任务中的行人运动模型.然而实际场景中存在有很多相机运动,仅仅依赖行人运动模型是不够的.这次我主要介绍下相机运动模型,以对极几何 ...
- PCL中点云关键点提取
PCL中点云关键点提取 1 关键点概念及相关算法 1.1 NARF关键点 1.2 Harris关键点 1.3 PCL中keypoints模块及类介绍 2 关键点入门级实例解析 2.1 如何从深度图像中 ...
- PCL:RANSAC算法拟合直线的两种实现方式
pcl利用ransac实现直线拟合的方法 pcl::SampleConsensusModelLine pcl::SACSegmentation pcl::SampleConsensusModelLin ...
- PCL中3D点云特征描述与提取(三)
PCL中3D点云特征描述与提取(三) 1 如何从一个深度图像中提取NARF特征 2 RoPs特征 2.1 理论基础 2.1.1 生物视觉认知学启示 2.1.2 局部参考坐标框架构建 2.1.3 RoP ...
- PCL点云处理与关键点提取
关键点简介 关键点也称为兴趣点,它是 2D 图像或 3D 点云或曲面模型上,可以通过检测标准来获取的具有稳定性.区别性的点集.从技术上来说,关键点的数量比原始点云或图像的数据量少很多,其与局部特征描述 ...
- 利用PCL库从点云数据生成深度图像及关键点提取
利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...
- 关键点提取:face_recognition、疲劳检测、人脸校准、人脸数据库
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...
最新文章
- CDN的原理及对SEO的影响
- php中的意外type字符串,关于php:解析错误:语法错误,意外’文本’(T_STRING),期待’,’或’;’...
- 2015 10月21日 工作计划与执行
- Scala入门到精通——第二十七节 Scala操纵XML
- 倒排索引原理_搜索引擎都在用的倒排索引——原理与实现
- 自己动手开发调试器 01
- 【ACM】nyoj_139_我排第几个_201308062046
- 程序员谈网络改变我们的生活
- 第5章 数据的共享与保护
- Java 面向对象:重写的理解
- mysql创建表有则删除_MySQL创建表和删除表
- Unity 随机生成中文名字
- Nature综述|整合组学分析护航健康,推动精准医学时代的到来!
- linux系统清理命令行,告诉你Ubuntu系统较全面清理的方法及命令
- 如何给女朋友解释什么是面向对象编程?
- 网络文件系统——上(samba,NFS,实现网络共享文件)
- 停止对初创企业的限制
- 【网络通信】【GNS3】Window10 下 GNS3 安装与配置
- 怎样用python定位别人在哪_python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?...
- mac/windows下查看端口号占用情况以及杀死端口进程