Skip to content

ArtichoKaleyard/SplitGrid

Repository files navigation

SplitGrid - Intelligent Array Visual Splitting System

SplitGrid Logo Python PyQt6 License

智能阵列视觉分割与标注系统 | Fluent Edition

核心特性安装与环境操作指南技术细节软件著作权说明贡献与许可


📖 项目简介 (Introduction)

SplitGrid 是一款专为高精度阵列标注设计的智能视觉分割工具。针对光伏面板、建筑窗户、货架商品等密集排列对象的标注场景,SplitGrid 从底层重构了核心算法与交互界面。

版本 1.0.0 Release / Fluent Edition 采用 Windows 11 Fluent Design 风格界面,集成波形投影分析透视矫正Sobel 定向梯度增强以及批量投票机制,用于提升阵列类目标的标注与分割效率。

app.png

当前状态: v1.0.0 Release (Stable) - 基于 PyQt6 与 Fluent Widgets 全新重构


✨ 核心特性 (Key Features)

🎨 极致交互体验 (Fluent UX)

  • 沉浸式界面: 全新设计的 Home 界面与工作区,支持云母特效(Mica)与亚克力效果。
  • 深色/浅色模式: 完美适配系统主题,提供舒适的视觉体验。
  • 实时交互预览: 支持参数调整后的实时预览,Canvas 画布支持平滑缩放与鹰眼(Minimap)导航。
  • 历史记录管理: 支持多级撤销(Undo)与重做(Redo)。

🧠 智能核心算法 (Algorithm Core)

  • 智能波峰分割 (Wave-Split): 基于图像像素投影分析,自动识别物体间隔,无需手动划线。
  • 透视自动矫正: 内置四点透视变换算法,即使拍摄角度倾斜,也能准确还原网格逻辑。
  • 定向形态学增强: 引入 Sobel 梯度算子与定向形态学滤波,有效处理低对比度或模糊边界。
  • 自适应参数推荐: 根据图像内容自动计算最佳行/列数及灵敏度阈值。

🚀 批量生产力 (Batch Engine)

  • 批量投票分析: 多线程并行分析选中的多个区块,通过投票机制(Voting)得出全局最优分割参数。
  • 智能/统一模式: 支持针对每个区块独立计算参数,或应用统一标准。
  • 非线性工作流: 可以在“批量调整模式”下随时干预任意区块的分割结果。

📊 可视化调试 (Debug Mode)

  • 算法显微镜: 独有的调试面板,可视化展示水平/垂直投影波形、噪声底噪及峰值检测逻辑。
  • 交互式阈值: 直接在波形图上点击即可反算并应用灵敏度,所见即所得。

🛠️ 安装与环境 (Installation)

本项目基于 Python 开发,默认使用原生 uv 管理依赖,同时保留 pip 兼容安装方式。

1. 环境要求

  • Python 3.12+
  • Windows 10/11 (推荐以获得最佳 Fluent 效果)

2. 安装依赖

项目依赖由 pyproject.tomluv.lock 管理。如果需要使用 pip,可通过仓库内提供的 requirements.txt 进行兼容安装。

# 默认:使用 uv
uv sync

# 兼容:使用 pip
pip install -r requirements.txt

核心依赖列表:

  • PyQt6 & PyQt6-Fluent-Widgets: 核心 GUI 框架
  • OpenCV-Python (headless): 图像处理与计算机视觉算法
  • NumPy & SciPy: 矩阵运算与信号峰值检测
  • Matplotlib: (可选) 用于底层数据绘图

3. 启动应用

# 默认:在 uv 环境中启动
uv run python main.py

# 兼容:在 pip / venv 环境中启动
python main.py

4. 快速体验与验证

仓库随附一组可直接上手的示例数据:

  • docs/example-data/example.jpg:测试图像
  • docs/example-data/example.json:对应的 LabelMe 预标注文件

示例数据已经放在独立目录 docs/example-data/ 中,可以直接把该目录作为体验数据集导入,避免与 README 配图和演示素材混在一起。

推荐验证流程:

  1. 启动应用并导入 docs/example-data/ 目录。
  2. 点击已有的绿色多边形标注,切换到智能分割模式。
  3. 使用“立即推荐参数”观察网格预览,再按 Enter 应用结果。
  4. 使用 Ctrl + S 保存,确认生成的 JSON 已按同名文件规则写回。

🖱️ 操作指南 (User Guide)

快捷键 (Shortcuts)

功能 快捷键 说明
文件操作 Ctrl + O 导入数据集目录
Ctrl + S 保存标注结果 (JSON)
编辑 Ctrl + Z 撤销上一步操作
Ctrl + Y 重做
Enter 确认/应用分割结果
选择 Shift + Click 多选/反选区块
Ctrl + A 全选当前图像所有区块
Esc 清除选择 / 退出调整模式
视图 R 重置视图适配窗口
D 打开/关闭算法调试面板
/ 切换上一张/下一张图像

工作流 (Workflow)

labelling.png

  1. 数据导入:

    • 在主页点击“开始新的任务”或直接拖入文件夹。
    • 系统会自动关联同名的 LabelMe 格式 JSON 标注文件。
  2. 选择对象:

    • 在画布上点击已有的标注框(绿色高亮)。
    • 按住 Shift 可框选或点击多个对象进行批量操作。
  3. 智能分割:

    • 在右侧控制面板选择“智能分割”模式。
    • 点击“立即推荐参数”,观察预览出的切割网格(橙色线)。
    • 微调: 调整“灵敏度(Sensitivity)”滑块或“对比度”以过滤噪声。
  4. 应用与保存:

    • 满意后按 Enter 键应用分割。
    • 使用 Ctrl + S 保存更改到本地。

🧩 项目结构 (Project Structure)

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                 # 程序入口

🔬 技术细节 (Technical Details)

1. 投影波形分析 (Projection Analysis)

SplitGrid 不依赖深度学习模型,而是使用经典的图像处理技术实现零样本(Zero-shot)分割。

  • 预处理: 图像经过直方图均衡化与高斯模糊。
  • 变换: 将非矩形的四边形区域通过 cv2.warpPerspective 映射为正交矩形。
  • 投影: 计算水平(axis=1)和垂直(axis=0)方向的像素累加值。
  • 信号处理: 使用 scipy.signal.find_peaks 结合动态 Prominence 阈值识别网格线位置。

2. 批量一致性引擎 (Batch Consistency)

在处理无人机航拍的光伏阵列时,光照不均常导致自动参数跳变。SplitGrid v1.0.0 Release 引入了 BatchSplitter

  • 并发: 使用 ThreadPoolExecutor 并行计算所有选中区块的特征。
  • 投票: 对所有区块推荐的 (Rows, Cols) 进行加权投票(置信度加权),选出该批次的“模范参数”。
  • 应用: 将模范参数回填至所有区块,确保阵列分割的整齐划一。

📅 更新日志 (Changelog)

v1.0.0 (Release)

  • 更早的 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.03.0-alpha 等旧版本标识仅对应早期开发阶段,不属于当前正式发布版本序列。


🤝 贡献与许可 (License)

本项目采用 MIT License 开源。 欢迎通过 Issue 或 Pull Request 参与改进。

  • 当前主要支持 Windows 10/11 环境。
  • 开发与依赖管理默认使用 uv
  • 提交问题时,建议附带运行环境、复现步骤和必要的示例数据说明。

Designed for High-Precision Array Annotation.

About

一个专为太阳能电池板等阵列结构设计的智能分割标注工具,支持均匀分割和基于波形分析的智能分割。A semi-automatic annotation tool for regular array structures such as photovoltaic panels, featuring uniform splitting and waveform-based smart segmentation.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors