Ubuntu22.04结合fast_livo2进行3DGS三维重建

Ubuntu22.04结合fast_livo2进行3DGS三维重建

环境:

Ubuntu22.04  ROS2

        3DGS和Fast_livo2的构建以及复现具体看前两篇文章

ubuntu22.04复现3DGS,包含双系统、cuda、conda、colmap的安装

Ubuntu22.04及ROS2复现Fast_livo2,包含ROS2的安装、cmake的版本选择等等

一、对fast_livo2进行修改

        1、修改avia.yaml文件

        在 /fast_ws/src/fast_livo/config 里找到 avia.yaml 文件,找到下面内容把 false 改成 true ,后续在运行launch文件时会自动保存点云文件到 fast_livo/log 文件夹里

        进入 /fast_ws/src/fast_livo/Log文件夹里,若无PCD或者Colmap文件夹,需要提前创建,进入Colmap,检查是否有 images 和 sparse 文件夹,若无需要提前创建,否则运行launch文件时无法同步保存图片与点云信息

        2、修改launch文件       

        找到 mapping_avia.launch.py 这个文件,首先launch文件里找到#play ros2 bag部分,修改成如下样式:(把原来的"-l"去掉不让循环播放,播完一次包就自动暂停)

可选项:(不一定要改,不影响主体程序,但改之后运行launch文件会后更方便和直观)     

        (1)将 default_value="False" 改成 "True" ,这样在执行launch文件会自动打开rviz,无需在后面加上 use_rviz:=True 

        (2)同时,在 /fast_ws/src/fast_livo/rviz_cfg 文件夹中找到 fast_livo2.rviz 文件,找到 Image 的话题订阅,将 Value 改为 /left_camera/image ,使其在自动打开rviz时就能接收到图像数据,在rviz的左下方就能同步看到画面

        对fast_livo功能包重新编译,运行launch文件输出点云数据并保存图片,进入 /fast_ws/src/fast_livo/Log 文件夹内检查各文件,均有输出即为成功

source fast_ws/install/setup.bash cd ~/fast_ws colcon build --packages-select fast_livo --symlink-install ros2 launch fast_livo mapping_avia.launch.py

        3、雷区!!所踩的坑

        由于一开始并未在 /fast_ws/src/fast_livo/Log/Clomap 中创建 images 文件夹,导致在运行launch文件时并不会同步保存图像,launch文件完成后 /Colmap 下只有 /sparse 一个文件夹,于是本人便在launch文件中添加节点用于保存图像,同时打开 sparse 文件里的 image.txt 文件,查看图片编号,删掉图像文件夹里面的多余图片,使图片能和 image.txt 文件里的编号一一对应。

        这样做貌似没啥问题,图片也能正常保存,/sparse 文件夹的点云数据也能正常获取,但其实问题很大,点云数据与照片的保存并非同步,导致后续训练高斯点云出来的画面极差!找了很久的原因,最后发现就是这个问题,这种新建节点保存图像的方式并不可取,对比同一编号的照片,左边是通过新建节点保存的,右边是通过创建images文件夹同步保存的,明显发现两者视角上存在差异,点云与图像是并不匹配的

二、利用3DGS进行三维重建  

        首先将 /fast_ws/src/fast_livo/Log/Clomap 下的 images 和 sparse 文件夹拷贝到 /gaussian-splatting/data/RS/ 下,接着可以开始训练进行重建

#激活虚拟环境 conda activate gs cd ~/gaussian-splatting/ python train.py -s data/RS -m data/RS/output #优化生成高斯点云 ./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m ~/gaussian-splatting/data/RS/output/ 

        若是在运行 train.py 阶段提示显存不足,也可以通过降低图片分辨率的方式进行训练,不过最终呈现的效果也会打折扣

# --resolution 2 表示分辨率降为原来的1/2, --resolution 3 则表示降为原来的1/3,以此类推 python train.py -s data/Chomper -m data/RS/output --resolution 2

最终输出效果:

        最后还可以通过 render.py 输出渲染图片,并用ffmpeg工具拼接成视频,最终可以得到原视频经过3DGS后的重建效果

python render.py -s data/Chomper -m data/RS/output cd data/RS/output/train/ours_30000/renders ffmpeg -framerate 30 -i %05d.png -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -c:v libx264 -pix_fmt yuv420p output.mp4

Read more

蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】

蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】

【背景说明】本文的作者是一名算法竞赛小白,在第一次参加蓝桥杯之前希望整理一下自己会了哪些算法,于是有了本文的诞生。分享在这里也希望与众多学子共勉。如果时间允许的话,这一系列会分为上中下三部分和大家见面,祝大家竞赛顺利! 【文风说明】本文主要会用代码+注释的方式来解释内容。相信学过编程的人都会发现程序比长篇大论更易理解! 目录 一、语言基础 1.1 编程基础 1.2 竞赛常用库函数 1.2.1 sort 函数 1.2.2 最值查找 1.2.3 二分查找 1.2.4 大小写转换 1.2.5 全排列 1.2.6 其它库函数整理 1.3 STL的用法 1.

By Ne0inhk

LeetCode 24. 两两交换链表中的节点

题目链接 24. 两两交换链表中的节点 思路 核心思路是通过「虚拟头节点 + 节点删除 / 插入」的方式实现两两交换: 1. 先创建一个虚拟头节点(dummy) 指向原链表头节点,避免处理头节点交换的特殊情况; 2. 遍历链表时,每次定位到需要交换的两个相邻节点(记为 first、second); 3. 先将 first 节点从原位置 “删除”,再将 first 节点插入到 second 节点的后面; 4. 移动遍历指针,重复上述过程直到所有两两节点交换完成。 图解过程 输入:head = [1,2,3,4] 输出:[2,1,4,3] 1.初始化链表 ListNode dummy = new

By Ne0inhk
通俗易懂->哈希表详解

通俗易懂->哈希表详解

目录 一、什么是哈希表? 1.1哈希表长什么样? 1.2为什么会有哈希表? 1.3哈希表的特点 1.3.1 取余法、线性探测 1.3.2 映射 1.3.3负载因子 1.4哈希桶 1.5闲散列与开散列 1.6总结 二、设计hash表 1、哈希表的设计   1)插入   2)查找  3)删除 4)字符串哈希算法 2、封装map和set 1、完成对hash表的基础功能 2、完成封装 3、对应的迭代器 4、【】方括号重载 三、

By Ne0inhk

PDF-Extract-Kit技术揭秘:文档布局分析算法

PDF-Extract-Kit技术揭秘:文档布局分析算法 1. 引言:智能PDF提取的技术演进 随着数字化办公和学术研究的深入发展,PDF文档已成为信息传递的核心载体。然而,传统PDF解析工具在处理复杂版式(如科研论文、财报、教材)时普遍存在结构识别不准、公式表格错乱、图文混排丢失等问题。为解决这一行业痛点,科哥基于深度学习与多模态融合技术,开发了开源项目 PDF-Extract-Kit —— 一个集布局检测、公式识别、OCR文字提取、表格解析于一体的智能PDF内容提取工具箱。 该工具箱不仅提供WebUI交互界面,更开放底层算法逻辑,支持二次开发,广泛应用于论文数字化、知识库构建、自动化报告生成等场景。其核心竞争力在于精准的文档布局分析能力,即通过计算机视觉模型理解页面中标题、段落、图片、表格、公式的空间分布与语义关系。 本文将聚焦于PDF-Extract-Kit中的文档布局分析算法,深入剖析其技术原理、实现路径与工程优化策略,帮助开发者理解如何从一张PDF渲染图像中还原出结构化的文档骨架。 2. 布局分析的技术挑战与设计目标 2.1 复杂文档的结构多样性 现代PDF

By Ne0inhk