- 博客(61)
- 资源 (1)
- 收藏
- 关注
原创 点云处理系列 - 点云配准
1. 点云配准点云配准是将两个或多个点云数据集融合到一个统一的坐标系统中的过程。这通常是为了创建一个完整的模型或融合从不同视角采集的数据。点云配准一般分为粗配准和精配准,粗配准指的是在两幅点云之间的变换完全未知的情况下进行较为粗糙的配准,目的主要是为精配准提供较好的变换初值;精配准则是给定一个初始变换,进一步优化得到更精确的变换。2. 点云粗配准: 特征匹配、穷举搜索、概率分布3. 点云精配准:基于优化(ICP、GICP、NICP、图优化、GMM、半定规划)、特征学习、端到端学习
2025-02-12 12:15:00
2119
原创 点云处理系列 - 点云分割
1. 点云分割点云数据中包含目标物体,点云分割算法即将物体分割出来。2. 分割算法* [x] RANSAC(随机采样一致性)方法* [x] 区域生长分割* [x] 欧几里得聚类分割* [x] 霍夫变换分割
2025-02-12 07:00:00
472
原创 点云处理系列 - 点云特征提取
1. 点云特征与关键点的区别?关键点提取关键的一些点,旨在减少数据量;而特征提取旨在为每个点提供一个可用于后续任务的描述。通常点云特征与关键点结合使用。2. 特征提取算法* [x] 法线估计 : 每一个点的位置都有垂直于点表面的的矢量,但是这种方式比较耗时* [x] SHOT* [x] PFH 点特征直方图* [x] FPFH 快速点特征直方图* [x] VFH
2025-02-11 17:45:00
1031
原创 点云处理系列 - 点云关键点检测
1. 点云关键点是什么?关键点也称为兴趣点,它是2D图像、3D点云或曲面模型上,可以通过定义检测标准来获取的具有稳定性、区别性的点集。我们获得的数据量大,特别是几十万个以上的点云,里面有很多冗余数据,会导致处理起来比较耗时。降采样是一种有效的减少数据、缩减计算量的方法。2. 关键点检测算* [x] ISS关键点* [x] Harris关键点* [x] NAFR关键点* [x] SIFT关键点
2025-02-11 12:30:00
460
原创 点云处理系列 - 点云滤波(四)- 利用PCL点云下采样实现数据体素化
体素化是通过用空间均匀大小的体素网格(voxel grid)来模拟模型或者点云的几何形态的过程,实现模型体素化的方式有很多,比如基于八叉树的三模网格模型体素化,基于GPU并利用渲染管线中fragment shader部分实现的栅格化插值。本章主要讨论用PCL的下采样方式来实现模型点云的体素化,并且实现可视化。
2025-02-11 07:30:00
474
原创 点云处理系列 - 点云滤波(三)
在获取点云数据时,由于设备精度、操作者经验、环境因素等带来的影响,点云数据中将不可避免地出现一些噪声点。这便需要我们对点云进行后处理。在点云的处理流程中,滤波处理作为预处理的第一步,往往对后续处理管道影响最大,只有在滤波预处理中将噪声点、离群点、空洞等按照后续处理定制,才能更好地进行配准、特征提取、曲面重建、可视化等。PCL中的点云处理模块提供了很多灵活实用的滤波处理算法,例如双边滤波、高斯滤波、条件滤波、直通滤波、基于随机采样一致性滤波等。
2025-02-10 12:30:00
876
原创 点云处理系列 - 点云降采样
1. 为什么要降采样?我们获得的数据量大,特别是几十万个以上的点云,里面有很多冗余数据,会导致处理起来比较耗时。降采样是一种有效的减少数据、缩减计算量的方法。2. 降采样算法* [x] 随机降采样* [x] 均匀降采样* [x] 体素降采样* [x] 最远点降采样* [x] 移动最小二乘法降采样* [x] 法线空间采样
2025-01-08 11:30:00
871
原创 点云处理系列 - 点云滤波
1. 为什么要滤波?通常我们获取的点云数据中包含噪声,噪声会影响点云的特征提取、配准和语义处理。点云需要处理的主要情况包括:* [x] 数据量过大,不易于处理,需要进行下采样* [x] 通常由遮挡引起的离群点,需要去除* [x] 点云数据的密度不均匀需要平滑* [x] 噪声数据需要去除2. 滤波算法* [x] 索引滤波:* [x] 半径滤波:设置半径大小和半径内所需的点云数,用来去除稀疏处的噪声。* [x] 统计滤波* [x] 双边滤波
2025-01-08 07:30:00
659
原创 点云处理系列 - 数据采集
本文详细介绍了点云处理的关键步骤,包括点云数据的采集、滤波、降采样、关键点检测、特征提取和分割,以及使用Open3D和PCL库的实现示例。这些技术在3D建模、自动驾驶、机器人导航等领域有广泛应用。点云数据采集通常采用深度相机(如:红外结构光传感器、时间飞行传感器、双目立体相机)、激光雷达(Lidar)等。
2025-01-07 09:48:21
2400
原创 算法基础 - 冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复进行直到没有再需要交换的元素,这意味着数列已经排序完成。冒泡排序法采用不停地交换彼此位置来实现,故而形象地称之为冒泡。大致一个气泡从水底一直冒到水面。1、循环两个变量:外层(轮数)、内层每轮的次数;2、总轮数=元素长度-1=最大下标3.每轮次数=元素长度-1-轮数=最大下标-轮数;4.轮数(++),次数(++);5.两两交换,大的放后面
2025-01-07 06:30:00
236
原创 算法基础 -二叉树遍历
二叉树的常见操作包括:[x] 插入:在树中插入一个新的节点,同时保持二叉树的性质。[x] 删除:从树中删除一个节点,同时保持二叉树的性质。[x] 搜索:在树中查找一个特定的值。[x] 遍历:按照特定的顺序访问树中的所有节点,常见的遍历方式有: * 前序遍历:先访问根节点,然后左子树,最后右子树。 * 中序遍历:先访问左子树,然后根节点,最后右子树。 * 后序遍历:先访问左子树,然后右子树,最后根节点。 * 层序遍历:按照层次顺序访问节点,通常使用队列
2025-01-06 16:17:22
1481
原创 算法基础 - 求解线性方程组(高斯消元法)
消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换,消去方程式中的变量,通过简化方程式,从而获取结果的一种解题方法。 消元法主要有代入消元法、加减消元法、整体消元法、换元消元法、构造消元法、因式分解消元法、常数消元法、利用比例性质消元法等。
2025-01-06 06:30:00
1165
原创 算法基础 - 高斯牛顿法(点云配准)
算法基础 - 高斯牛顿法(点云配准)为了实现基于高斯-牛顿法的点云配准算法,通常需要以下几个步骤:(1)定义点云数据结构。(2)初始化变量。(3)定义雅可比矩阵和海森矩阵的计算方法。(4)进行迭代优化。
2024-11-27 15:02:54
495
原创 算法基础 - 高斯牛顿法(曲线拟合)
算法基础 - 高斯牛顿法(非线性最小二乘)1. 高斯牛顿法发展历程2、问题的引出3、高斯牛顿法的前世3.1、一阶,二阶梯度法共有原理3.2、最速下降法(一阶梯度法)3.3、牛顿法(二阶梯度法)4、高斯牛顿法4.1 高斯牛顿法的思想4.2 最小二乘问题4.3 高斯牛顿法原理4.4 高斯牛顿法算法流程4.5 高斯牛顿法缺点5、曲线拟合示例5.1 C++代码5.2 运行结果5.3 图形化显示
2024-11-26 14:00:00
2790
原创 算法基础 - 最小二乘法(线性拟合)
算法基础 - 最小二乘法1、最小二乘法的历史2、最小二乘法的原理3、典型应用场景 - 线性拟合4、线性拟合 C++ 示例 : 求解 y = kx + b
2024-11-26 08:56:33
3174
原创 算法基础:两点之间 按照固定距离插入点
两点之间 按照固定距离插入点1. 二维点插值1.1. 代码说明1.2. 输出示例2. 三维点插值2.1. 代码说明2.2. 输出示例2.3. 小结
2024-11-25 18:53:11
511
1
原创 算法基础 : 链表的插入与逆序
逆序实现思路: 若链表为空或只有一个元素,则直接返回; 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继; 重复2,直到q==NULL 调整链表头和链表尾
2024-11-25 16:48:13
259
原创 C++ Eigen - 使用旋转矩阵,实现两个传感器之间的坐标变换(仅平移)
(1)变换公式为:P_2 = T_2_1 * P_1, 可将1系下的P点,旋转至2系下。(2)公式中,T_2_1 的旋转部分,是指:由坐标系1 旋转至2的过程中,相对于1产生的角度。该角度的取值依据顺、逆时针进行判定(详见上节内容中的示例2中有详细说明);(3)公式中,T_2_1 的平移部分,也应该是指由坐标系1 平移至2的过程中,相对于1系产生的平移量。正、负的取值也应以原始坐标系1为基础,分析对1系坐标产生的后果: 向负轴移动,取正数;向正轴移动,取负值。 所以本示例中,应该取值:2,2.
2024-07-19 15:19:14
507
原创 C++ Eigen - 使用变换矩阵,实现两个传感器之间的坐标变换
C++ Eigen - 使用变换矩阵,实现两个传感器之间的坐标变换注意:这里的顺时针、逆时针的判定标准为:以旋转无关轴 面向相关轴所构成平面的方向视角。比如两次旋转是按照:(1)先绕Z轴旋转90度:从Z轴面向X、Y轴所构成的平面的视角来看,为逆时针。(2)再绕第一次旋转后的X轴旋转90度:从X轴面向Y、Z轴所构成的平面的视角来看,为顺时针;
2024-07-16 12:00:00
1277
原创 C++ Eigen - 使用旋转矩阵,实现两个传感器之间的坐标变换
(1)在使用旋转矩阵、旋转向量等进行坐标旋转时,使用公式: P_2 = T_2_1 * P_1, 可将1系下的P点,旋转至2系下; (2)对于 T_2_1 的计算,需要注意:若为顺时针旋转,则计算过程中旋转角度值为正数; 若为逆时针旋转,则计算过程中旋转角度值为负数;(3)若T_2_1计算中,逆时针时也将旋转角度设置为了正数,则实际计算的 旋转矩阵为: T_1_2, 需要将计算结果再求逆: T_1_2.inverse();
2024-07-16 08:30:00
1266
原创 C++ Eigen - 使用四元数实现三维点的坐标变换
1. 四元数的声明2. 四元数的相加3. 四元数的数乘(即缩放)4. 四元数的乘法:方法15. 四元数的乘法:方法26. 四元数的乘法:方法37. 四元数的旋转点综合示例
2024-07-08 10:07:59
472
原创 通过四元数实现三维点坐标变换的原理
1. 三维点旋转的方案2. 使用复数表示二维点的旋转2.1. 复数的概念2.2. 复数的三种形式及相互转换2.3. 复数概念扩展:实数、虚数、复数3. 四元数旋转三维点原理4. 使用四元数进行旋转的公式5. 旋转叠加6. 四元数转换为三维点
2024-07-08 08:30:00
984
原创 C++ std::map 取值方式
C++ std::map 取值方式1、常用取值方式2、遍历的方式取值3、.at()的方式取值4、数组下标[]的方式取值5、数组下标[]的方式取值的注意事项5.1 使用[] 取值,如果不存在,不会报错,但会打印空,并且会自动插入一条 该键值的数据5.2 C++ map容器在const修饰下将无法使用“[]“来获取键值
2024-02-07 18:21:57
2241
原创 C++ std::map几种遍历方式(正序、倒序)
C++ std::map几种遍历方式(正序、倒序)1、map 的定义方式2、正序遍历 map2.1 使用 for 循环2.2 使用 while 循环3、倒序遍历 map3.1 使用 for 循环3.2 使用 while 循环4、使用 std::greater 属性,直接定义倒序存储的 map4.1 使用 for 循环4.2 使用 while 循环
2024-02-04 19:25:20
22499
1
原创 使用boost::geometry::union_ 合并边界(内、外):方案二
使用boost::geometry::union_ 合并边界(内、外):方案二
2023-09-01 23:42:30
1050
原创 使用boost::geometry::union_ 合并边界(内、外)- 方案一
使用boost::geometry::union_ 合并边界(内、外):方案一结合 boost::geometry::read_wkt() 函数
2023-09-01 23:33:16
1354
1
原创 httplib 与 json.hpp 结合示例
httplib 与 json.hpp 结合示例1、使用POST 接口,发送 登陆 请求2、使用get 接口,获取联网状态
2023-09-01 09:39:26
761
1
原创 自动驾驶 - 滤波算法
自动驾驶 - 滤波算法目前比较常用的滤波算法有: * [x] 平均值滤波算法* [x] 中位值滤波算法* [x] 一阶滤波算法* [x] 卡尔曼滤波算法
2022-11-03 06:30:00
1048
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人