首页 > 编程语言 >C++_点云和C++函数处理

C++_点云和C++函数处理

时间:2023-11-02 19:23:32浏览次数:39  
标签:函数 point C++ radius https 点云 搜索 pcd

点云问题

原始点云拼接- 
   运动畸变是指在一帧时间内,激光雷达或者其载体在发生运动后,产生的点云位置不一样的问题
        点云是没有畸变的,每条激光线束最终会形成一个闭合的圆形===利用运动模型来做运动畸变补偿 和ICP方式
   这些数据包进行点云组帧
   
   激光雷达重叠区域
      
点云数量-- 
点云拼接: 
           从前往后叠帧,变为从中间向两边叠帧
		   环线下采样:环与环之间有一定的空隙,隔一个环、空一圈地去采样。常规环可以看成是空隙为0的扩张环
		   立方体滤波
点云预处理:
   噪点是指对模型处理无用的点云数据。离群点是指远离主观测区域的点云数据。	
     点云配准:ICP配准后叠帧
	     同源点云配准 是指从同一类型的传感器获取点云数据,但在不同的时间和视角下进行的点云配准
		 跨源点云配准 是指对不同类型传感器的点云进行配准
     点云滤波:直通滤波   双边滤波器  立方体滤波
	 点云下采样
点云与图像
    
点云搜索
  范围搜索
    范围搜索就是给定查询点和查询距离的阈值,从数据集中找出所有与查询点距离小于阈值的数据
	PCL 代码:
	   kdtree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance)
       int radiusSearch (const PointT &point, double radius,
          		  std::vector<int> &k_indices,
                std::vector<float> &k_sqr_distances, unsigned int max_nn = 0) const;
				
		point[in]:查询点
        radius[in]:搜索半径
        k_indices[out]:搜索到的最近邻点在点云中的下标
        k_sqr_distances[out]:搜索到的最近邻点距离查询点的距离的平方值
        max_nn[in]:默认为0,搜索到的点的上限,如果搜索到的点数目多于它,那么丢弃超出的部分;
		如果max_nn设为0或者大于搜索点云的大小,则返回所有找到的点。
        返回值:搜索到的最近邻点的数目		
				

     # 建立KD树索引
     pcd_tree = o3d.geometry.KDTreeFlann(pcd) 
	 
	 open3d.geometry.KDTreeFlann
	 search_radius_vector_3d(self, query, radius)


      # 使用半径R近邻,将第1500个点半径(0.02)范围内的点设置为绿色
      radius = 0.02  # 设置半径大小
      [n_radius, idx_radius, _] = pcd_tree.search_radius_vector_3d(pcd.points[1500], radius)  # 返回邻域点的个数和索引
      np.asarray(pcd.colors)[idx_radius[1:], :] = [0, 1, 0]  # 跳过查询点本身,对邻域点进行赋色
      print("半径r邻域内的点数为:", n_radius)
 ###search_point
 	 search_point.x = pose.x
     search_point.y = pose.y
     search_point.z = pose.z  		 

     # 建立octree树
     octree = o3d.geometry.Octree(max_depth=4)
     octree.convert_from_point_cloud(pcd, size_expand=0.01)
	 
	 或者
	   # 体素化
      voxel_grid = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd, voxel_size=0.2)

半径滤波

  半径滤波
  在给定阈值参数nb_points后,遍历点云所有点,对于点云中任意一点,设其半径radius内有K个点,当K< nb_points时,即可识别该点为噪声点,并去除该点。
  
  pc,idx=pcd.remove_radius_outlier(nb_points, radius, print_progress=False)
   nb_points:邻域球内的最少点个数,小于该个数为噪声点
   radius: 邻域半径大小
   pc:去噪后的点云
   idx:去噪保留的点索引

  BilateralFilter 双边滤波器
  点云平滑是点云后处理的重要一环
   导向滤波 Guided Image Filtering
   
对比定位思路来看

代码实现

 函数是一段可重用的代码块,它可以接受输入参数,并返回输出结果。除了返回结果,函数还可以修改传入的数据
 python 
    传引用调用是指将实参的引用传递给形参,在函数内部对形参的修改会影响到实参。这意味着在函数内部可以修改传入的可变对象,如列表和字典
	def append_one(lst):
        lst.append(1)
 C++ 
    3.1 按值传递:该方式不改变传入参数的值;
    3.3 按地址传递:该方式改变传入参数的值;
    3.3 按引用传递:该方式改变传入参数的值

参考

 http://www.open3d.org/docs/release/python_api/open3d.geometry.KDTreeFlann.html
 详解激光雷达点云处理那些事,点云预处理、感知、定位 https://zhuanlan.zhihu.com/p/611322357
寻找两个点云重叠部分	
https://blog.csdn.net/xinxiangwangzhi_/article/details/122517017  
两个点云的重叠部分查找(附open3d python 代码)
https://blog.csdn.net/a394467238/article/details/131981798  
Guided Filter点云降噪
https://aipiano.github.io/2019/04/28/Guided-Filter%E5%AF%B9%E4%B8%89%E7%BB%B4%E7%82%B9%E4%BA%91%E9%99%8D%E5%99%AA/
https://github.com/aipiano/guided-filter-point-cloud-denoise
https://www.cnblogs.com/yibeimingyue/p/11458592.html
cv2.bilateralFilter 双边滤波
PCL 双边滤波器API使用
https://blog.51cto.com/u_14355665/6101928
 https://github.com/MNewBie/PCL-Notes/blob/master/README.md

标签:函数,point,C++,radius,https,点云,搜索,pcd
From: https://www.cnblogs.com/ytwang/p/17806092.html

相关文章

  • c++ 程序打印 core dump 信息
    linux环境下c++程序打印coredump信息linux信号机制c++打印堆栈信息#include<signal.h>#include<execinfo.h>#include<dlfcn.h>#include<cxxabi.h>#include<QFile>#include<QTextStream>//捕获信号,对于这些信号都执行coreDumpHandlesignal(SIG......
  • PHP代码审计遇到的函数
    PHP strpos() 函数实例查找"php"在字符串中第一次出现的位置:<?phpechostrpos("Ilovephp,Ilovephptoo!","php");//输出7?>定义和用法strpos()f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。注释:strpos()函数是区分大小写的。注释:该函数是......
  • Hive / ClickHouse 行转列函数 collect_set() / groupUniqArray() 入门
    Hive/ClickHouse行转列函数collect_set()/groupUniqArray()入门在数据处理和分析中,我们经常会遇到需要将一行数据转换为多列的情况。在Hive和ClickHouse中,可以使用collect_set()和groupUniqArray()函数来实现行转列操作。collect_set()1.功能说明collect_set()函......
  • dev like 函数 widechar 版本
    functionLike(p1:PChar;l1:Integer;p2:PChar;l2:Integer;percent_char,underline_char,escape_char:Char):Boolean;overload;varc:Char;AEscapeFlag:Boolean;beginAEscapeFlag:=False;repeatDec(l2);ifl2<0thenBreak;......
  • C语言中静态函数和非静态函数的区别
     C语言中,静态函数和非静态函数的区别主要体现在以下方面:可见性:静态函数只能在当前文件内使用,不能被其他文件调用,而非静态函数可以被当前文件以外的其他文件调用,具有全局可见性。生命周期:静态函数在程序运行期间一直存在,不会被释放,而非静态函数则是在被......
  • spark代码示例---explode()炸裂函数使用
    数据结构,及bean的结构root|--eventName:string(nullable=true)|--itmeList:array(nullable=true)||--element:struct(containsNull=true)|||--did:string(nullable=true)|||--dno:long(nullable=true)|||--d......
  • Java 匿名函数的概念和写法
    匿名函数的实现1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口//1.定义一个函数式接口。只有一个抽象方法的接口就是函数式接口interfaceILike{voidhit(longparam);}没有类名,必须借助接口或父类通过实例化函数式接口就可以完成匿名内部类实现此接口......
  • 原型模式--C++实现
    浅克隆#include<iostream>#include<algorithm>usingnamespacestd;//计算类classCompute{public: int*p; intlen;//向量长度 Compute(intlen); Compute(constCompute&compute);//构造函数 ~Compute();//析构函数 intoperator[](inti)const{ return......
  • OpenFunction 1.2.0 发布:集成 KEDA http-addon 作为同步函数运行时
    OpenFunction是一个开源的云原生FaaS(FunctionasaService,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发。我们非常高兴地宣布OpenFunction又迎来了一次重要的更新,即v1.2.0版本的发布!本次更新中,我们继续致力于为开发者们提供更加灵活和强大的工具,并在此基础上加入了......
  • 【转载】CUDA编程学习记录 C++
    参考Yuezero的CUDA编程基础(https://blog.csdn.net/weixin_54338498/article/details/127947551)CUDA编程模型host指代CPU及其内存,包含host程序device指代GPU及其内存,包含device程序经典CUDA程序的执行流程如下:分配host内存,并进行数据初始化;分配device内存,并从host将......