提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
扫描后得到的点云可能存在噪点,可以通过中值滤波对rgb进行去噪。
提示:以下是本篇文章正文内容,下面案例可供参考
一、原理简介
- 和图像的中值滤波一样,判断一个点周围领域的点,对领域点的像素值大小进行排序。取排序中间的像素值代替所选点
二、代码简介
void MedianFilter(pcl::PointCloud<PointT>::Ptr &input,pcl::PointCloud<PointT>::Ptr &output)
{
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::search::KdTree<PointT>::Ptr tree(new pcl::search::KdTree<PointT>);
tree->setInputCloud(input);
std::vector<int> pointIdxRadiusSearch;
std::vector<float> pointIdxRadiusSquaredDistance;
float radius = 0.02;
// 多线程
#pragma omp parallel for
for (int i=0;i<input->points.size();i++)
{
tree->radiusSearch(input->points[i],radius,pointIdxRadiusSearch,pointIdxRadiusSquaredDistance);
std::vector<int> r_indice(pointIdxRadiusSquaredDistance.size());
std::vector<int> g_indice(pointIdxRadiusSquaredDistance.size());
std::vector<int> b_indice(pointIdxRadiusSquaredDistance.size());
std::iota(r_indice.begin(),r_indice.end(),0);
std::iota(g_indice.begin(),g_indice.end(),0);
std::iota(b_indice.begin(),b_indice.end(),0);
std::sort(r_indice.begin(), r_indice.end(),[&pointIdxRadiusSearch,&input](int lhs, int rhs){
return input->points[pointIdxRadiusSearch[lhs]].r > input->points[pointIdxRadiusSearch[rhs]].r;
}); //排序由大到小
std::sort(g_indice.begin(), g_indice.end(),[&pointIdxRadiusSearch,&input](int lhs, int rhs){
return input->points[pointIdxRadiusSearch[lhs]].g > input->points[pointIdxRadiusSearch[rhs]].g;
}); //排序由大到小
std::sort(b_indice.begin(), b_indice.end(),[&pointIdxRadiusSearch,&input](int lhs, int rhs){
return input->points[pointIdxRadiusSearch[lhs]].b > input->points[pointIdxRadiusSearch[rhs]].b;
}); //排序由大到小
int mid_r = pointIdxRadiusSearch[r_indice[int(pointIdxRadiusSearch.size() / 2)]];
int mid_g = pointIdxRadiusSearch[g_indice[int(pointIdxRadiusSearch.size() / 2)]];
int mid_b = pointIdxRadiusSearch[b_indice[int(pointIdxRadiusSearch.size() / 2)]];
// int mid_indice = pointIdxRadiusSearch[Idx_indice[0]];
// std::cout<<mid_indice<<std::endl;
PointT p;
p.x = input->points[i].x;
p.y = input->points[i].y;
p.z = input->points[i].z;
p.r = input->points[mid_r].r;
p.g = input->points[mid_g].g;
p.b = input->points[mid_b].b;
cloud->points.push_back(p);
}
output->points = cloud->points;
}
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。