- 博客(59)
- 资源 (5)
- 收藏
- 关注
原创 QOpenGLWidget自定义控件— 2D点云显示(支持平移、放缩、绘制网格)
摘要:该代码实现了一个基于Qt和OpenGL的点云可视化工具PointCloudViewer。主要功能包括:1) 支持三维点云的加载和显示;2) 提供网格背景和坐标轴辅助观察;3) 实现鼠标交互(平移、缩放)操作;4) 支持点大小和颜色的自定义设置。关键技术点包括:使用OpenGL着色器绘制点云和网格,正交投影实现2D视图,鼠标事件处理实现视图变换,以及动态调整网格间距的智能算法。该工具可用于点云数据的快速可视化检查和分析。
2025-07-16 16:24:52
196
原创 SimLOD代码精读(六) Rendering—DrawNodes
【摘要】SimLOD是一种基于相似性的多层次细节算法,用于大规模3D点云/网格数据的动态简化。其核心是通过分析数据相似性自适应调整细节层次,在保持视觉质量的同时提升渲染效率。算法采用八叉树结构组织数据,通过CUDA并行实现高效渲染,主要特点包括:1) 基于视锥剔除和像素尺寸的节点可见性判定;2) 针对边缘区域的特殊LOD处理;3) 双重渲染流程(先深度后颜色)确保正确性;4) 支持两种可见性计算方法(DISJUNCT和ADDING模式);5) 采用持久线程模式和工作窃取策略优化GPU利用率。
2025-07-15 15:26:54
884
原创 2D下的几何变换(C#实现,持续更新)
(1)已知2D下,新坐标系的原点、X轴方向向量、Y轴方向向量在原始坐标系下的表示,求原始坐标系中直线。(2)求直线与2D包围盒的交点,可能有0、1或2个交点;,在新坐标系下的直线方程;
2025-07-11 23:08:38
260
原创 SimLOD代码精读(五)Rendering——Node可见性判定 Disjunct VS Additive
SimLOD是一种基于相似性的多层次细节算法,用于大规模3D点云的高效渲染。其核心区别在于Additive和Disjunct两种可见性策略:Additive允许父子节点同时可见,保留更多细节但增加渲染负载;Disjunct则互斥显示父子节点,降低负载但可能丢失细节。代码实现中采用Disjunct策略的并行计算,通过八叉树节点筛选和统计可见节点数量,确保在减少渲染负载的同时维持视觉质量。该算法通过动态调整细节层次,有效平衡了渲染效率和视觉保真度。
2025-07-10 14:14:19
329
原创 LKH-3算法求解TSP问题基本原理与应用
LKH-3(Lin-Kernighan-Helsgaun)是求解旅行商问题(TSP)的最强启发式算法之一,由丹麦计算机科学家Keld Helsgaun在LKH-2基础上改进而来。它的核心思想是:通过智能的“局部破坏与修复”策略,逐步优化路径,最终找到接近最优的解。
2025-07-09 16:08:58
897
原创 SimLOD代码精读(四)Allocate Chunks + Insert Points & Voxels
SimLOD是一种创新的3D数据简化算法,通过建立八叉树结构实现动态LOD管理。算法流程包含:1)八叉树构建(计数与分裂阶段);2)体素采样确定节点对应数据;3)内存分配(为叶节点分配点数据块,为内部节点分配体素数据块);4)数据填充(处理新批次点集和溢出数据)。该技术通过相似性分析平衡渲染质量与效率,适用于大规模点云/网格处理。相关代码实现位于progressive_octree_voxels.cu文件,包含详细注释。
2025-07-07 15:13:03
553
原创 SimLOD代码精读(三)Voxel Sampling 体素采样
SimLOD是一种基于相似性的多层次细节算法,用于大规模3D点云或网格数据的高效渲染。该算法通过构建八叉树结构实现动态数据简化,在Voxel采样阶段将每个内部节点划分为128³体素网格,使用位掩码标记占用状态。计算点云在各层级节点的局部体素坐标,通过原子操作确保线程安全,并生成简化后的点云数据。算法在保持视觉质量的同时显著提升渲染性能,适用于海量3D数据的实时处理。代码实现包含坐标转换、体素索引计算等核心步骤,通过GPU并行处理优化计算效率。
2025-07-03 15:45:44
412
原创 SimLOD代码精读(二)建立Octree之Splitting Pass分裂阶段
SimLOD是一种基于相似性的多层次细节算法,用于大规模3D点云数据的动态简化。其核心是通过分析数据相似性自适应调整细节层次,在保持视觉效果的同时提升渲染效率。算法实现包含Octree构建的CountingPass和SplittingPass两个关键阶段:CountingPass负责统计节点数据量并标记需要分裂的节点;SplittingPass则处理节点分裂,包括创建8个子节点、初始化节点属性、建立继承关系、回收点数据和分配占用网格等操作。这些操作通过并行计算高效执行,最终实现点云数据的层次化组织与管理。
2025-06-30 23:39:56
428
原创 SimLOD代码精读(一)建立Octree之Counting Pass计数阶段
SimLOD提出了一种GPU并行八叉树点云处理算法,通过原子操作和线程协作优化计算效率。算法采用八叉树结构组织点云数据,使用Warp-Level Reduction技术减少原子操作调用,降低GPU全局内存访问竞争。关键步骤包括:1) 量化坐标并定位叶节点;2) 通过分组原子操作高效计数;3) 处理溢出节点并重新分配数据。当溢出节点数为0时,算法结束Expanding阶段进入Voxel Sampling阶段。该方法实现了高效的点云统计与管理,适合大规模3D数据处理。
2025-06-29 23:43:27
478
原创 CUDA使用coalesced_threads配合labeled_partition减少原子操作提升并行效率
摘要: 本文介绍了CUDA的两个线程协作函数cg::coalesced_threads()和cg::labeled_partition()在点云计数优化中的应用。前者获取当前活跃线程(如Warp中实际运行的线程),后者按叶节点地址分组,使访问同一节点的线程合并操作。通过每组仅执行1次原子操作(如atomicAdd),而非每个线程1次,显著减少竞争。例如,8个线程访问同一叶节点时,只需1次+8而非8次+1。该方法适用于八叉树、哈希表等场景,有效提升GPU并行效率。
2025-06-29 11:34:03
846
原创 2D曲线点云平滑去噪
本文提出了一种二维曲线点云平滑去噪方法,采用移动最小二乘法(MLS)分段拟合抛物线并投影,将宽曲线点云细化为单条曲线。针对曲线方向与Y轴不同偏差情况(偏离较远或较近),分别采用不同投影策略:当偏离较远时使用y=ax²+bx+c拟合,较近时用x=ay²+by+c表示。该方法通过局部曲率估计和PCA分析自适应调整平滑参数,避免二阶多项式过拟合问题。文中给出了基于Eigen库的C++实现代码,包括邻域搜索、曲率计算、抛物线拟合和投影等核心步骤,并指出考虑距离和曲率权重的优化方向。
2025-06-21 22:43:17
216
原创 CGAL 求点到凸包最近点及对应法向
本文介绍了一个基于CGAL库的三维点集处理工具类(cgal_utils.h/cpp),主要功能包括:1) 将点集转换为三维凸包(Polyhedron或Surface_mesh格式);2) 计算各点到凸包的最近邻点及其对应法向量。该工具采用CGAL 5.6.2实现,支持点集格式转换(glm::dvec3与CGAL点互转)、凸包计算、AABB树加速最近邻查询,以及法向量计算等功能。
2025-06-06 10:14:20
220
原创 PCL绘制圆锥
本文介绍了如何通过单例模式(懒汉式)创建一个PCLViewer类,用于点云数据的可视化。PCLViewer类通过双重检查锁定机制确保线程安全,并提供了多种可视化功能,如点云、聚类结果、半透明圆锥等的显示。类中包含了将glm::dvec3向量转换为PCL点云的工具函数,以及处理点云数据的辅助方法。通过PCLVisualizer库,用户可以方便地进行3D点云的可视化操作,并通过viewSpin函数实现实时渲染循环。该设计模式确保了全局唯一实例的创建,简化了可视化接口的调用。
2025-05-19 11:36:43
129
原创 3D曲面上的TSP问题(二):ACO蚁群算法 + 2-opt搜索求解TSP问题
本文介绍了使用蚁群算法(ACO)结合2-opt局部搜索优化方法解决3D曲面上的旅行商问题(TSP)。文章首先通过OpenCV库中的cv::Mat类型距离矩阵distMap作为输入,初始化了ACO算法的参数,包括信息素矩阵、启发信息矩阵等。接着,详细描述了蚂蚁构建路径的过程,包括随机选择起点城市、计算转移概率、选择下一个城市等步骤。在每次迭代中,算法通过2-opt局部搜索对前20%的优秀蚂蚁路径进行优化,并更新信息素矩阵。最后,文章展示了如何动态调整算法参数以提高搜索效。
2025-05-15 17:21:09
323
原创 3D曲面上的TSP问题(一):曲面上点集距离求解
本文介绍了如何在3D曲面上计算两点之间的测地线距离,而非欧式距离。通过使用CGAL5.6.2和OpenCV4.11.0库,实现了从点集到凸包的计算,并进一步计算了测地线距离矩阵。代码中包含了点格式转换、凸包计算、最近点查询以及测地线距离计算等功能。具体实现中,首先将点集转换为CGAL格式,计算凸包,然后使用AABB树进行最近点查询,最后通过Surface_mesh_shortest_path计算测地线距离。代码还处理了可能出现的NaN或Inf值问题,确保计算的准确性
2025-05-15 17:11:37
335
原创 OpenGL超大分辨率图像显示
2)每绘制一块图像,对应绘制两个三角形((0,0),(1,1)单位矩形内的两个三角形),通过修改ModelMatrix,每次将两个三角形绘制在窗口的不同区域范围内,对ModelMatrix的修改包括平移和缩放两个部分(见代码RenderPattern接口实现)。1)将大图像拆分为多个小块(Tile),渲染整幅图像分解为每次绘制一块(Tile)图像,绘制多次,确保每块图像的纹理尺寸不超过OpenGL设备支持的纹理尺寸;bigimage.frag (GLSL着色器文件)1)Tile如何定义,如何划分Tile;
2025-05-06 14:41:10
312
1
原创 ROS2 开发踩坑记录(持续更新...)
这对于开发ROS程序时,需要包含特定的头文件时非常有用。查看包的安装位置和include路径详细文件列表。例如,xxx包名为pluginlib。在package.xml中添加。的路径,通常是为了找到与。这条指令的目的是查找。
2025-05-05 22:43:16
379
原创 固定尺寸矩形覆盖2D点云 + PCL可视化
在研究结构光传感器测量路径规划算法时遇到的问题:有一组2D点,如何用最少数量的固定尺寸的矩形框,覆盖所有点。通过DeepSeek,实现了一种解决方法并用PCL进行了结果的可视化。2)迭代多次,若查询到矩形框内无点,则删掉矩形框;若相邻矩形框的点可以用单个矩形框覆盖,则用单个矩形框代替两个矩形框;1)2D点按照矩形框尺寸,均匀划分网格;
2025-04-29 13:27:38
215
原创 2D无序点集曲线重建(沿曲线重新排序)
从队首的点出发,沿着第二个点到第一个点的方向,在允许角度偏差范围内寻找最近点。:从队尾的点出发,沿着前一点到当前点的方向,在允许角度偏差范围内寻找最近点。当两个方向都无法找到符合条件的点时,算法终止。可以通过构造函数调整这个参数来适应不同曲线。:控制搜索方向的角度偏差阈值(弧度)从任意点开始(代码中选择第一个点)找到它的最近邻作为第二个点。
2025-04-27 16:06:17
173
原创 高精度3D圆弧拟合 (C++)
本文的目的是C++实现高精度的3D圆弧拟合,基本思路为:1)RANSAC拟合平面,得到平面模型,去掉离群点;2)根据平面模型,构建新的坐标系:将源点云投影至此坐标系XOY平面,得到2D圆弧点云;3)拟合2D圆弧点云,得到圆心点和半径;4)将圆心点结合2)中的坐标系,反变换至源点云坐标系中,得到3D圆弧圆心,3D圆半径与3)半径结果一致。
2025-04-26 22:26:31
943
原创 高精度并行2D圆弧拟合(C++)
PCL库拟合圆弧的问题:PCL中坐标值默认使用float类型,在某些高精度场景中不适用。Step 2:使用ceres非线性优化的方法,拟合inliers点,得到圆心和半径;Step 1: RANSAC找到圆弧,保留inliers点;
2025-04-24 22:53:50
421
原创 并行RANSAC平面拟合(C++)
1)Eigen2)GLMStep 1:源点云随机采样3个点;Step 2:3个点拟合平面,统计符合该平面模型的点,为inlier点;Step 3:判断inlier点比例是否达到阈值,更新最佳模型和最佳模型对应的inlier点集。若inlier比例不到阈值,则继续Step 1;若已满足阈值或达到最大迭代次数,转Step 4;Step 4:针对最佳模型的inlier点集,使用最小二乘法,重新拟合平面;
2025-04-23 14:09:36
277
1
原创 C# 实现TCP/IP通信协议——Message结构设计
(1)通信Message包括报头+消息体+结束符;(2)报头包含报文Title、发送时间、报文类型,SequenceNo等数据。(3)内容采用明文,使用空格补足空缺位置。
2025-04-22 14:43:51
269
原创 C++高效读取大规模文本格式点云(windows)
C++高效读取大规模文本格式点云(windows)执行效率明显优于ifstream + stof
2025-04-03 15:50:16
178
原创 C++多项式Lasso回归(多变量函数拟合)
多项式回归和Lasso多项式回归的主要区别在于Lasso回归引入了 L1 正则化,从而具备了特征选择能力和对过拟合的抑制能力。如果数据存在明显的非线性关系且特征数量较少,多项式回归可能是一个不错的选择;但如果数据特征较多且需要进行特征选择和提高模型泛化能力,Lasso多项式回归则更为合适。
2025-02-21 22:36:00
1082
原创 PCL点云处理——球面点云提取+拟合
(3)点云聚类,忽略点数较少的簇,剩余较大的簇拟合球,计算球-平面距离。一平板上沾有多个球,使用激光扫描仪获取点云,包括平板点云+多个球冠点云;(2)剔除距离平面一定距离范围内的点,余下所有球冠点;提取各球点云,拟合球面参数,求取球到平板距离。(1)求平板平面:降采样,提取最大平面;
2025-02-20 08:19:17
390
原创 四边形网格处理——沿Edge遍历 & 矩形域顶点提取
四边形网格沿Edge遍历的大致思路,Edge首尾点分别为a,b,首先分别找到a,b邻接的所有面,取b邻接面的所有与b邻接的顶点,从这些顶点中再筛选出不属于a的邻接面的顶点,即沿Edge遍历的下一个顶点。
2025-02-07 15:04:46
845
原创 双归一化(Dual Normalization)在点云匹配任务中的应用
dual_normalization的含义 在点云匹配中,dual_normalization(双重归一化)是一种用于优化匹配过程的技术,旨在通过两次归一化操作来提高匹配的鲁棒性和准确性。它主要用于处理点云特征之间的相似性矩阵,通过归一化操作平衡不同特征之间的匹配得分
2025-02-07 11:01:43
545
原创 PPFStructualEmbedding & GeometricStructureEmbedding 模块实现源码精读
PPFStructureEmbedding 是一种基于 Point Pair Features (PPF) 的几何结构嵌入方法,通常用于点云处理任务中。PPF 是一种描述点云中局部几何关系的特征表示方法,广泛应用于点云配准、物体识别和姿态估计等任务。 GeometricStructureEmbedding 类是一个 PyTorch 模块,旨在将点云中的几何结构嵌入到高维空间中。该嵌入捕捉了点之间的成对距离和角度关系,这对于许多 3D 视觉任务(如点云分类、分割或目标检测)至关重要。
2025-02-06 00:00:40
465
原创 VCGLIB构造/深拷贝Mesh
深拷贝现有的Mesh数据,并考虑Face的删除(D)标记,新构造的Mesh中不含已删除的Face,且去除了未引用的顶点。
2025-01-31 21:51:40
180
原创 Soft Actor-Critic算法代码精解
SAC(Soft Actor-Critic) 是一种基于最大熵强化学习框架的算法,专门用于解决连续动作空间的任务。它结合了 Actor-Critic 框架和熵正则化的思想,能够在保证高效学习的同时,鼓
2025-01-22 14:08:05
453
原创 强化学习Actor-Critic算法代码精读(PyTorch,含详细注释)
强化学习Actor-Critic算法代码精读(PyTorch,含详细注释)Actor-Critic算法非常实用,TRPO、PPO、DDPG、SAC等深度强化学习算法都是在Actor-Critic框架下进行发展的。深入了解Actor-Critic算法对读懂目前深度强化学习的研究热点大有裨益。
2025-01-20 16:48:47
205
Visual Assist X 2025.2 v10.9.2556.0 (07 Apr 2025) + CRACK 适用于VS2022
2025-06-17
RIMLS点云滤波算法C++实现
2024-10-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人