pcl点云的离群点去除
来源:互联网 发布:最好的扫描识别软件 编辑:程序博客网 时间:2024/04/30 18:46
pcl离群点的去除
点云及其文件下载:https://github.com/zhouyelihua/PointCloudProcessing
pcl的离群点计算是利用单点计算其周边的方差,利用方差的大小来判断其取舍
cmake文件
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)project(filter)find_package(PCL 1.2 REQUIRED)include_directories(${PCL_INCLUDE_DIRS})link_directories(${PCL_LIBRARY_DIRS})add_definitions(${PCL_DEFINITIONS})add_executable (filter filter.cpp)target_link_libraries (filter ${PCL_LIBRARIES})
c++程序代码
#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/registration/icp.h>#include <pcl/features/normal_3d.h>#include <pcl/visualization/pcl_visualizer.h>#include <pcl/surface/mls.h>#include <pcl/common/centroid.h>#include <pcl/common/transforms.h>#include <pcl/filters/statistical_outlier_removal.h>//#include <pcl/filters/convolution_3d.h>#include<iostream>#include<fstream>#include<vector>typedef pcl::PointXYZRGB PointT;typedef pcl::PointCloud<PointT> PointCloudT;int main (int argc, char** argv){ std::vector<double> X_vector; std::vector<double> Y_vector; std::vector<double> Z_vector; std::vector<double> R_vector; std::vector<double> G_vector; std::vector<double> B_vector; //X_vector.reserve(100000); //Y_vector.reserve(100000); //Z_vector.reserve(100000); //R_vector.reserve(100000); //G_vector.reserve(100000); //B_vector.reserve(100000); //X_vector.reserve(100000); double x_temp, y_temp, z_temp, r_temp, g_temp, b_temp,U,V; std::fstream in; char filename[30] = {0}; sprintf(filename, "data%d.asc", 0); /*fstream in(filename);*/ in.open(filename, fstream::in); //cout<<"process "<<filename<<endl; //in.open("Data0.txt", fstream::in); in.seekg(0); int NumPoint; //int nnnn=10000; int i=0; while (!in.eof())// while(nnnn--)// while(i<10) { //cout<<x_temp<<"\t"; in >> x_temp >> y_temp >> z_temp >> r_temp >> g_temp >> b_temp>>U>>V; //cout<<i++<<"\t"<<U<<"\t"<<V<<endl; //cout<<x_temp<<"\t"; X_vector.push_back(x_temp); Y_vector.push_back(y_temp); Z_vector.push_back(z_temp); R_vector.push_back(r_temp); G_vector.push_back(g_temp); B_vector.push_back(b_temp); } cout<<"read done"<<filename<<endl; NumPoint =X_vector.size(); cout<<NumPoint<<endl; cout<<"begin!\n"; // Load point cloud from disk pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_in (new pcl::PointCloud<pcl::PointXYZRGB>); // Fill in the cloud data cloud_in->width = NumPoint; cloud_in->height = 1; cloud_in->points.resize (cloud_in->width * cloud_in->height); cout<<"cloud_in->points.size ()"<<cloud_in->points.size ()<<endl; //for (size_t i = 0; i < cloud->points.size (); ++i) for (size_t i = 0; i < cloud_in->points.size (); ++i) { //cout<<i<<endl; cloud_in->points[i].x = X_vector.at(i) ; cloud_in->points[i].y = Y_vector.at(i) ; cloud_in->points[i].z = Z_vector.at(i) ; cloud_in->points[i].r = (int)(R_vector.at(i)*255 ); cloud_in->points[i].g = (int)(G_vector.at(i)*255 ); cloud_in->points[i].b = (int)(B_vector.at(i)*255 ); //cout<<i<<endl; } X_vector.clear(); Y_vector.clear(); Z_vector.clear(); R_vector.clear(); G_vector.clear(); B_vector.clear(); pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_out_filtered (new pcl::PointCloud<pcl::PointXYZRGB>); pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB>sor; sor.setInputCloud(cloud_in); sor.setMeanK(100); sor.setStddevMulThresh(1.0); sor.filter(*cloud_out_filtered); //pcl::filters::GaussianKernelRGB<pcl::PointXYZRGB,pcl::PointXYZRGB> sor_in; //sor_in.setInputCloud (cloud_in); // sor_in.setSigma(0.1); //sor_in.setThreshold(1.0); // sor_in.setThresholdRelativeToSigma(0.1f); //sor_in.initCompute(); //sor_in.(cloud_out_filtered); std::fstream out2; out2.open("data1out.txt", fstream::out); for (size_t i = 0; i < cloud_out_filtered->points.size (); ++i) { //cout<<i<<endl; out2<<cloud_out_filtered->points[i].x<<"\t" <<cloud_out_filtered->points[i].y<<"\t" <<cloud_out_filtered->points[i].z<<"\t" <<(int)cloud_out_filtered->points[i].r<<"\t" <<(int)cloud_out_filtered->points[i].g<<"\t" <<(int)cloud_out_filtered->points[i].b<<"\n"; //cout<<i<<endl; } out2.close(); return (0);}
点云文件的格式
效果涉及实验室机密不展示了
2 1
- pcl点云的离群点去除
- pcl 学习 离群点删除
- pcl离群点删除 方法2
- 离群点
- PCL点云的显示
- PCL点云滤波
- 点云python-pcl
- 基于聚类的离群点检测
- 离群点检测方法
- 离群点检测方法
- 离群点过滤
- PCL入门<一> 点云的数据结构
- PCL入门<二>点云的滤波
- pcl--不同格式点云的转换
- PCL点云压缩的,--自己输入点云
- 点云PCL估计一个点云的表面法线
- [数据挖掘]离群点检测---基于kNN的离群点检测、LOF算法和CLOF算法
- 65.[PCL]点云及PCL基础
- Velocity最简单基础入门
- mschart如何显示x轴标题
- Professor Q's Software---拓扑排序
- 每天一篇python: json对象操作
- 码农小汪-设计模式之-策略模式
- pcl点云的离群点去除
- Apache服务器限制并发连接和下载速度
- Linux下安装女朋友啦
- ipa重新签名
- [leetcode-328]Odd Even Linked List
- 深度学习之后向传输(BP)算法
- 贪心算法-1004
- poj
- 【LeetCode】46. Permutations 的两种解法及注释、分析