znlgis 博客

GIS开发与技术分享 — GDAL · GeoServer · PostGIS · QGIS · OpenLayers · Cesium · FreeCAD · NPOI

第04章:选择工具与高斯点数据编辑

清理高斯模型的核心工作流是:选中要处理的高斯点 → 隐藏或删除 → 反复迭代。本章详解 SuperSplat 丰富的选择工具与数据编辑能力,对应源码 src/tools/src/edit-ops.ts

1. 选择与编辑的底层模型

回顾第 02 章:每个高斯点都有 selectedhiddendeleted 三个状态位(src/splat-state.ts)。本章所有操作的本质,就是用各种工具圈定一批点,然后对它们的状态位做修改:

  • 选择工具:把目标点的 selected 位置位/清除/切换;
  • 隐藏/显示:操作 hidden 位;
  • 删除/恢复:操作 deleted 位(导出前都可恢复)。

这些修改通过 edit-ops.ts 中的可撤销操作(StateOp 等)执行,并压入 edit-history.ts 的历史栈,因此任何操作都能 Ctrl + Z 撤销

2. 选择工具一览

SuperSplat 通过 ToolManagersrc/tools/tool-manager.ts)管理工具,同一时刻只有一个工具处于激活状态。激活工具后,按 Esc 可退出(tool.deactivate)。各选择工具如下:

工具 快捷键 源码文件 适用场景
矩形选择 R rect-selection.ts 快速框选规则区域
套索选择 L lasso-selection.ts 手绘任意闭合区域
多边形选择 P polygon-selection.ts 逐点点击勾勒精确多边形
画笔选择 B brush-selection.ts 像“涂抹”一样刷选,笔刷可调大小
球体选择 (工具栏) sphere-selection.ts 用 3D 球体范围选择空间内的点
包围盒选择 (工具栏) box-selection.ts 用可变换的 3D 长方体框选
洪水填充选择 O flood-selection.ts 按连通性/相似性自动蔓延选择
滴管选择 Ctrl + E eyedropper-selection.ts 点击拾取相似属性的点

2.1 2D 屏幕空间选择(矩形/套索/多边形/画笔)

这类工具在屏幕上画出 2D 形状,再把落入该形状投影范围内的高斯点选中:

  • 矩形(R):按下拖出一个矩形,松开即选中;
  • 套索(L):按住自由绘制闭合曲线;
  • 多边形(P):依次点击顶点,双击或回车闭合;
  • 画笔(B):按住涂抹,凡是笔刷扫过的点都被选中。笔刷大小用 [ 缩小、] 放大(tool.brushSelection.smaller/bigger)。

2.2 3D 体积选择(球体/包围盒)

球体与包围盒选择在 3D 空间中定义一个体积,选中其内部的点,特别适合剔除某个空间区域的漂浮物只保留主体

  • 球体选择:放置并缩放一个球体,选中球内/球外的点;
  • 包围盒选择:放置一个可平移/旋转/缩放的长方体(box-shape.ts),精确框选立体区域。

2.3 智能选择(洪水填充/滴管)

  • 洪水填充(O):从点击处出发,按空间连通性与属性相似度自动蔓延,快速选中“一整块”——例如选中整面墙或整片背景;
  • 滴管(Ctrl+E):点击一个点,自动选中与之属性(如颜色/不透明度)相近的所有点。

3. 选择的组合:加选、减选、反选

多数选择工具支持配合修饰键进行集合运算(具体修饰键以编辑器内提示为准,通常 Shift 为加选、Alt/Ctrl 为减选)。配合菜单/快捷键的全局选择操作(src/editor.ts 中注册):

  • 全选Ctrl + ASelectAllOp);
  • 取消选择Ctrl + Shift + ASelectNoneOp);
  • 反选Ctrl + ISelectInvertOp)。

典型技巧:先用洪水填充选中“主体”,再 Ctrl + I 反选得到“背景”,一键删除背景。

4. 隐藏、显示与删除

选中点后,可执行以下编辑(均可撤销):

  • 隐藏选区Hselect.hideHideSelectionOp),把选中点的 hidden 置位,使其暂时不可见。隐藏用于“专注观察”或“保护这部分不被误删”;
  • 取消所有隐藏Shift + Hselect.unhideUnhideAllOp);
  • 删除选区Delete / Backspaceselect.deleteDeleteSelectionOp),标记 deleted。注意删除在导出前都是逻辑删除,可用撤销恢复;
  • 重置ResetOp 可将模型恢复到初始状态。

隐藏(hidden)与删除(deleted)的区别:隐藏只是临时不显示,导出时仍会包含;删除会在最终导出时真正剔除这些点(从而减小体积)。

5. 基于属性的筛选:数据面板与直方图

除了空间选择,SuperSplat 还能按高斯点的属性值进行筛选,这是清理噪点的利器。打开数据面板:Ctrl + DdataPanel.toggle,源码 src/ui/data-panel.tshistogram.ts)。

数据面板以直方图展示某个属性的分布,可筛选的属性通常包括:

  • 不透明度(opacity):背景噪点往往不透明度很低,拖动阈值即可一次性选中并删除所有“半透明垃圾点”;
  • 缩放(scale):异常巨大的高斯往往是漂浮的“面片噪声”,按 scale 上限筛选并删除;
  • 位置(x/y/z):按坐标范围筛选,剔除远离主体的离群点;
  • 颜色 / 球谐:按颜色分量筛选特定色块。

操作方式:在直方图上拖选一个数值区间,编辑器会实时高亮(选中)落在该区间的点,确认后即可隐藏或删除。这种“按数据分布清理”的方式比纯手工框选高效得多。

6. 撤销、重做与历史

所有编辑操作都进入 EditHistorysrc/edit-history.ts):

  • 撤销Ctrl + Zedit.undo);
  • 重做Ctrl + Shift + Zedit.redo)。

因为采用 do/undo 模式(每个 EditOp 都实现了 do()undo()),你可以大胆尝试激进的清理操作,发现过度删除后逐步回退。src/editor.ts 还会在场景元素被移除时清理引用它的历史操作,保证一致性。

7. 实战:清理一个 3DGS 扫描模型

一个典型的清理工作流:

  1. 整体观察:飞行模式巡视,找出主要噪声区域(第 03 章);
  2. 按不透明度粗清Ctrl + D 打开数据面板,拖低不透明度阈值,选中并删除低透明度噪点;
  3. 按 scale 清漂浮物:切换到 scale 直方图,删除异常大的高斯;
  4. 空间裁剪:用包围盒/球体选择保留主体,反选删除外围背景;
  5. 精修:用画笔/套索手动清理残留的漂浮点;
  6. 隐藏保护:把已清理干净的主体隐藏,专注处理剩余区域;
  7. 复核Shift + H 全部显示,整体检查;如有误删用 Ctrl + Z 回退。

完成清理后,模型点数显著减少、画面更干净,为后续变换、调色与导出打好基础。

8. 本章小结

本章系统介绍了 SuperSplat 的选择与编辑体系:

  • 选择工具分为 2D 屏幕选择(矩形/套索/多边形/画笔)、3D 体积选择(球体/包围盒)与智能选择(洪水填充/滴管);
  • 通过加选、减选、全选、反选进行集合运算;
  • 选区可隐藏(hidden)、删除(deleted),删除在导出前可逆;
  • 数据面板 + 直方图支持按不透明度、缩放、位置、颜色等属性高效筛选清理;
  • 所有操作可无限撤销/重做。

下一章我们学习变换(平移/旋转/缩放)、裁剪与多模型场景管理。


← 上一章 目录 下一章 →