SplitGrid 是一款专为高精度阵列标注设计的智能视觉分割工具。针对光伏面板、建筑窗户、货架商品等密集排列对象的标注场景,SplitGrid 从底层重构了核心算法与交互界面。
版本 1.0.0 Release / Fluent Edition 采用 Windows 11 Fluent Design 风格界面,集成波形投影分析、透视矫正、Sobel 定向梯度增强以及批量投票机制,用于提升阵列类目标的标注与分割效率。
当前状态: v1.0.0 Release (Stable) - 基于 PyQt6 与 Fluent Widgets 全新重构
- 沉浸式界面: 全新设计的 Home 界面与工作区,支持云母特效(Mica)与亚克力效果。
- 深色/浅色模式: 完美适配系统主题,提供舒适的视觉体验。
- 实时交互预览: 支持参数调整后的实时预览,Canvas 画布支持平滑缩放与鹰眼(Minimap)导航。
- 历史记录管理: 支持多级撤销(Undo)与重做(Redo)。
- 智能波峰分割 (Wave-Split): 基于图像像素投影分析,自动识别物体间隔,无需手动划线。
- 透视自动矫正: 内置四点透视变换算法,即使拍摄角度倾斜,也能准确还原网格逻辑。
- 定向形态学增强: 引入 Sobel 梯度算子与定向形态学滤波,有效处理低对比度或模糊边界。
- 自适应参数推荐: 根据图像内容自动计算最佳行/列数及灵敏度阈值。
- 批量投票分析: 多线程并行分析选中的多个区块,通过投票机制(Voting)得出全局最优分割参数。
- 智能/统一模式: 支持针对每个区块独立计算参数,或应用统一标准。
- 非线性工作流: 可以在“批量调整模式”下随时干预任意区块的分割结果。
- 算法显微镜: 独有的调试面板,可视化展示水平/垂直投影波形、噪声底噪及峰值检测逻辑。
- 交互式阈值: 直接在波形图上点击即可反算并应用灵敏度,所见即所得。
本项目基于 Python 开发,默认使用原生 uv 管理依赖,同时保留 pip 兼容安装方式。
- Python 3.12+
- Windows 10/11 (推荐以获得最佳 Fluent 效果)
项目依赖由 pyproject.toml 与 uv.lock 管理。如果需要使用 pip,可通过仓库内提供的 requirements.txt 进行兼容安装。
# 默认:使用 uv
uv sync
# 兼容:使用 pip
pip install -r requirements.txt核心依赖列表:
PyQt6&PyQt6-Fluent-Widgets: 核心 GUI 框架OpenCV-Python (headless): 图像处理与计算机视觉算法NumPy&SciPy: 矩阵运算与信号峰值检测Matplotlib: (可选) 用于底层数据绘图
# 默认:在 uv 环境中启动
uv run python main.py
# 兼容:在 pip / venv 环境中启动
python main.py仓库随附一组可直接上手的示例数据:
docs/example-data/example.jpg:测试图像docs/example-data/example.json:对应的 LabelMe 预标注文件
示例数据已经放在独立目录 docs/example-data/ 中,可以直接把该目录作为体验数据集导入,避免与 README 配图和演示素材混在一起。
推荐验证流程:
- 启动应用并导入
docs/example-data/目录。 - 点击已有的绿色多边形标注,切换到智能分割模式。
- 使用“立即推荐参数”观察网格预览,再按
Enter应用结果。 - 使用
Ctrl + S保存,确认生成的 JSON 已按同名文件规则写回。
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 文件操作 | Ctrl + O |
导入数据集目录 |
Ctrl + S |
保存标注结果 (JSON) | |
| 编辑 | Ctrl + Z |
撤销上一步操作 |
Ctrl + Y |
重做 | |
Enter |
确认/应用分割结果 | |
| 选择 | Shift + Click |
多选/反选区块 |
Ctrl + A |
全选当前图像所有区块 | |
Esc |
清除选择 / 退出调整模式 | |
| 视图 | R |
重置视图适配窗口 |
D |
打开/关闭算法调试面板 | |
← / → |
切换上一张/下一张图像 |
-
数据导入:
- 在主页点击“开始新的任务”或直接拖入文件夹。
- 系统会自动关联同名的 LabelMe 格式 JSON 标注文件。
-
选择对象:
- 在画布上点击已有的标注框(绿色高亮)。
- 按住
Shift可框选或点击多个对象进行批量操作。
-
智能分割:
- 在右侧控制面板选择“智能分割”模式。
- 点击“立即推荐参数”,观察预览出的切割网格(橙色线)。
- 微调: 调整“灵敏度(Sensitivity)”滑块或“对比度”以过滤噪声。
-
应用与保存:
- 满意后按
Enter键应用分割。 - 使用
Ctrl + S保存更改到本地。
- 满意后按
SplitGrid/
├── core/ # 核心算法模块
│ ├── wave_analyzer.py # 波形投影分析、峰值检测、透视变换
│ ├── batch_splitter.py # 批量并行分析与参数投票逻辑
│ └── polygon_splitter.py # 多边形几何切割与坐标逆变换
├── data/ # 数据管理
│ ├── app_state.py # 全局共享状态管理
│ ├── history_manager.py # 撤销/重做栈管理
│ └── parameters.py # 分割参数数据类
├── ui/ # 界面层 (PyQt6 + Fluent)
│ ├── components/ # 自定义UI组件 (Canvas, Panels, Cards)
│ ├── dialogs/ # 弹窗 (BatchManager)
│ ├── home_interface.py # 启动页与粒子特效
│ ├── split_interface.py # 主工作区布局
│ └── main_window.py # 主窗口逻辑
├── utils/ # 工具类
└── main.py # 程序入口
SplitGrid 不依赖深度学习模型,而是使用经典的图像处理技术实现零样本(Zero-shot)分割。
- 预处理: 图像经过直方图均衡化与高斯模糊。
- 变换: 将非矩形的四边形区域通过
cv2.warpPerspective映射为正交矩形。 - 投影: 计算水平(
axis=1)和垂直(axis=0)方向的像素累加值。 - 信号处理: 使用
scipy.signal.find_peaks结合动态 Prominence 阈值识别网格线位置。
在处理无人机航拍的光伏阵列时,光照不均常导致自动参数跳变。SplitGrid v1.0.0 Release 引入了 BatchSplitter:
- 并发: 使用
ThreadPoolExecutor并行计算所有选中区块的特征。 - 投票: 对所有区块推荐的
(Rows, Cols)进行加权投票(置信度加权),选出该批次的“模范参数”。 - 应用: 将模范参数回填至所有区块,确保阵列分割的整齐划一。
- 更早的 Git 历史版本统一视为开发阶段版本,不再与正式 Release 口径混用。
- [Refactor] 界面全面迁移至
PyQt6-Fluent-Widgets,移除旧版原生样式。 - [Feat] 新增“批量调整模式”,支持非破坏性的参数预览与找回。
- [Feat] 新增全局历史记录管理器 (HistoryManager),支持多级撤回。
- [Algo] 优化波峰检测算法,新增“强制波形翻转”以应对深色背景浅色网格的场景。
- [Algo] 新增 Sobel 定向梯度增强功能,提升低对比度下的分割稳定性。
- [UI] 新增 Debug Panel 可视化波形调试窗口。
本项目自 v1.0.0 Release 起采用正式发布版本序列,并与已登记的软件著作权版本保持一致。
README 中使用的 v1.0.0 Release 对应软件著作权登记版本 V1.0。
- 软件名称:
SplitGrid智能阵列视觉分割与标注系统 - 登记版本:
V1.0 - 登记号:
2026SR0480584 - 证书号:
软著登字第17694865号 - 登记日期:
2026年03月24日
Git 历史中的 2.0、3.0-alpha 等旧版本标识仅对应早期开发阶段,不属于当前正式发布版本序列。
本项目采用 MIT License 开源。 欢迎通过 Issue 或 Pull Request 参与改进。
- 当前主要支持 Windows 10/11 环境。
- 开发与依赖管理默认使用
uv。 - 提交问题时,建议附带运行环境、复现步骤和必要的示例数据说明。
Designed for High-Precision Array Annotation.

