点云问题
原始点云拼接-
运动畸变是指在一帧时间内,激光雷达或者其载体在发生运动后,产生的点云位置不一样的问题
点云是没有畸变的,每条激光线束最终会形成一个闭合的圆形===利用运动模型来做运动畸变补偿 和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