# pathology-crop-tool
**Repository Path**: peakb_admin/pathology-crop-tool
## Basic Information
- **Project Name**: pathology-crop-tool
- **Description**: https://github.com/Funvvell/pathology-crop-tool
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-19
- **Last Updated**: 2026-06-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

# 病理裁剪工具
**Pathology Crop Tool**
SDPC 全切片病理图像浏览 · ROI 标注 · IHC 热点检测 · AI 分析 · 批量裁剪导出
[](https://github.com/Funvvell/pathology-crop-tool/releases)
[](pyproject.toml)
[](LICENSE)
[](#)
[快速开始](#-快速开始) · [功能特性](#-功能特性) · [架构设计](#-架构设计) · [开发指南](#-开发指南)
---
## ✨ 功能特性
|
### 🔬 WSI 金字塔浏览
- 基于 QGraphicsView 的金字塔渲染引擎
- 支持超大切片(120,000 × 80,000+ px)
- LRU Tile 缓存(512 张),按需加载
- 导航缩略图实时定位 + 点击跳转
- 滚轮自动切换金字塔层级
|
### ✏️ ROI 标注与管理
- 浮动框跟随鼠标,空格键快速创建
- 八方向缩放手柄拖拽调整
- 倍率 / 视野比例自动计算像素尺寸
- 右侧面板实时同步坐标,精确编辑
- ROI 角度旋转支持
|
|
### 🧬 组织区域检测
- HistoKit 三通道 Otsu 阈值算法
- 形态学处理:开/闭运算、孔洞填充、碎片移除
- **网格模式** — 组织区域内均匀生成 ROI
- **连通域模式** — 按区域大小排序生成
- 实时参数预览
|
### 🎯 IHC 阳性热点检测
- Ruifrok & Johnston 色彩反卷积(H-DAB / H-AEC / H-E)
- OD 查找表预计算加速
- 分块 tile 读取,峰值内存 ~100 MB
- 滑动窗口密度图 + Top-N 峰值提取
- 组织覆盖率 ≥ 50% 自动过滤
|
|
### 🤖 DeepLIIF AI 分析
- 本地 PyTorch + 云端 API 双模式推理
- GPU (CUDA) 自动检测与加速
- 交互式阈值调整 + 评分表格
- ROI 选择与参数配置对话框
|
### 🔗 ImageJ / Fiji 桥接
- numpy ↔ ImageJ2 双向无损转换
- GUI 可视化调参 + 参数自动捕获
- 无头批处理复现操作流程
- 测量结果批量导出 CSV
|
### 📦 批量导出
- 全分辨率坐标映射 → 居中裁剪 → TIFF(zlib 压缩)
- QThread 后台运行,实时进度条,支持中断
- 复用已有 reader 对象,避免 DLL 死锁
- ROI 预览对话框 — 缩略图网格 + 选择性导出
### 🎨 专业 UI
- macOS Big Sur 风格深色 / 浅色主题一键切换(v2 升级版)
- 统一 6 级圆角体系(4px → 14px)+ alpha 增量 hover/pressed 状态过渡
- Apple Blue `#007AFF` 强调色,列表 hover 色条指示,focus ring 一致性
- 参考 [PyQt-Fluent-Widgets](https://github.com/zhiyiYo/PyQt-Fluent-Widgets) / [napari](https://github.com/napari/napari) / [qt-material](https://github.com/dunderlab/qt-material) 开源项目优化
- PyInstaller 单文件打包(~200 MB)
- 自定义 SVG 图标,多分辨率渲染
---
## 🚀 快速开始
### 环境要求
| 项目 | 要求 |
|------|------|
| 操作系统 | Windows 10 / 11 |
| Python | ≥ 3.10 |
| VC++ Runtime | [下载](https://aka.ms/vs/17/release/vc_redist.x64.exe) |
### 安装与运行
```bash
# 克隆项目
git clone https://github.com/Funvvell/pathology-crop-tool.git
cd pathology-crop-tool
# 安装依赖
pip install -e .
# 启动
python main.py
```
### 打包为独立 exe
```bash
pip install pyinstaller
pyinstaller build.spec
# → dist/病理裁剪工具.exe
```
> [!TIP]
> 也可以直接从 [Releases](https://github.com/Funvvell/pathology-crop-tool/releases) 下载预编译的 exe 文件。
### 基本操作
```
打开 SDPC 文件 → 滚轮缩放浏览 → 空格键创建 ROI → 批量导出 TIFF
```
| 快捷键 | 功能 |
|:------:|------|
| `Space` | 创建 ROI / 切换 ROI 模式 |
| `Delete` | 删除选中的 ROI |
| 滚轮 | 缩放 WSI 视图 |
| 左键拖拽 | 平移浏览 / 拖拽 ROI |
| 右键拖拽 | 旋转视图角度 |
---
## 🏗️ 架构设计
### 项目结构
```
pathology-crop-tool/
├── main.py # 入口点 · 日志 · 主题加载
├── build.spec # PyInstaller 打包配置
├── pyproject.toml # 元数据与依赖
│
├── liver_portal_crop/
│ ├── app.py # MainWindow — 主窗口编排
│ ├── canvas.py # WSICanvas — 金字塔渲染 + ROI
│ ├── reader.py # SDPCReader — ctypes DLL 封装
│ ├── roi.py # ROIModel + ROIManager
│ ├── exporter.py # BatchExporter — 批量 TIFF 导出
│ ├── tissue_detect.py # HistoKit Otsu 组织检测
│ ├── ihc_hotspot.py # IHC 热点检测算法 + UI
│ ├── deepliif_runner.py # DeepLIIF 推理引擎
│ ├── analysis_dialog.py # DeepLIIF 参数对话框
│ ├── results_viewer.py # DeepLIIF 结果浏览器
│ ├── preview_dialog.py # ROI 预览 · 选择性导出
│ ├── imagej_bridge.py # ImageJ/Fiji 桥接
│ ├── navigator.py # 缩略图导航
│ ├── utils.py # 坐标映射工具
│ ├── constants.py # 全局常量
│ ├── theme.py / theme.qss # 主题系统
│ │
│ └── controllers/
│ ├── base.py # BaseController 基类
│ ├── file_controller.py # 文件管理
│ ├── roi_controller.py # ROI 生命周期
│ ├── preset_controller.py # 预设存储
│ └── export_controller.py # 导出编排
│
└── tests/
├── test_roi.py # ROI 数据模型测试
├── test_utils.py # 坐标映射测试
├── test_exporter.py # 导出功能测试
└── test_ihc_hotspot.py # IHC 算法完整测试
```
### 控制器架构
主窗口采用 **Controller 模式**,将领域逻辑委托给独立控制器:
```
┌─────────────┐
│ MainWindow │ 中央协调器
│ (app.py) │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
┌─────────▼──┐ ┌─────▼──────┐ ┌──▼───────────┐
│ File │ │ ROI │ │ Export │
│ Controller │ │ Controller │ │ Controller │
└────────────┘ └────────────┘ └──────────────┘
│
┌────────▼────────┐
│ Preset │
│ Controller │
└─────────────────┘
```
各控制器共享 `app` / `canvas` / `roi_manager` / `readers` 等属性,实现松耦合协作。
### 关键流程
ROI 生成 → 导出
```
用户操作 代码路径
──────────────────────────────────────────────────────────────
打开 SDPC 文件 → app._add_files → SDPCReader
浏览切片 → WSICanvas.load_slide → 金字塔 tile 渲染
切换 ROI 模式 → set_roi_mode(True) → 浮动框
空格创建 ROI → _place_roi_at_frame → ROIController → ROIManager
组织检测自动生成 → TissueDialog → detect_tissue → ROIManager
IHC 热点检测 → IHCHotspotDialog → detect_ihc_hotspots_tiled
预览选择性导出 → ROIPreviewDialog → ExportController.run_export
批量导出 TIFF → BatchExporter → QThread → tifffile.imwrite
```
IHC 热点检测流水线
```
IHCHotspotDialog(参数配置)
│
▼ detect_ihc_hotspots_tiled(QThread 后台)
│
├─ Phase 0 _get_tissue_tile_set
│ 组织区域 tile 集合 + 缩略图掩膜
│
├─ Phase 1 Tile-by-tile 色彩反卷积
│ OD LUT 预计算 → DAB 通道提取 → 阳性掩膜
│
├─ Phase 2 阳性信号累积
│ 逐 tile 阳性像素 → 全局降采样掩膜(~17 MB)
│
├─ Phase 3 compute_density_map + find_hotspots
│ 滑动窗口密度图 → Top-N 峰值检测
│
└─ Phase 4 _filter_hotspots_by_tissue_coverage
组织覆盖率 ≥ 50% → 生成 ROI
```
金字塔渲染
```
_resizeEvent / _mouseRelease
│
▼ _render_timer (200ms debounce)
│
▼ _render_visible_tiles
├─ _get_best_level → 根据缩放比选金字塔层级
├─ 分 tile (1024×1024) 读取
└─ LRU Cache → QGraphicsPixmapItem 放置场景
```
---
## 📊 技术栈
| 组件 | 版本 | 用途 |
|------|:----:|------|
| **PySide6** | ≥ 6.6 | Qt6 GUI 框架 |
| **sdpc-for-python** | ≥ 1.0 | SDPC 格式解析(ctypes → DecodeSdpcDll.dll) |
| **numpy** | ≥ 1.24 | 图像数据处理 |
| **scipy** | ≥ 1.10 | 形态学运算 · 峰值检测 |
| **scikit-image** | ≥ 0.21 | 图像 resize · 连通域分析 |
| **tifffile** | ≥ 2024 | BigTIFF 写入(zlib) |
| **Pillow** | ≥ 10 | 图像格式转换 |
| **opencv-python** | — | 连通域标记 · 图像缩放 |
| **torch** | ≥ 2.0 | DeepLIIF 深度学习推理 |
| **deepliif** | ≥ 1.2.6 | DeepLIIF 模型推理引擎 |
---
## 🧪 开发指南
### 运行测试
```bash
# 基础单元测试
pytest tests/test_roi.py tests/test_utils.py tests/test_exporter.py
# IHC 热点检测算法测试(mock DLL,无需实际 SDPC 文件)
python tests/test_ihc_hotspot.py
```
IHC 测试覆盖:色彩反卷积正确性 · 阈值判定 · 密度图计算 · Top-N 热点提取 · 分块处理流水线 · 组织覆盖率过滤 · 染色矩阵标签。
### 模块可测试性
| 模块 | 职责 | 独立测试 |
|------|------|:--------:|
| `reader.py` | ctypes DLL 读取 SDPC 金字塔 | ⚠️ 需 DLL |
| `canvas.py` | WSI 渲染 + ROI 标注 | ⚠️ 需 Qt |
| `app.py` | 主窗口编排 | ⚠️ 需 Qt |
| `roi.py` | ROI 数据模型 + JSON 序列化 | ✅ |
| `exporter.py` | 批量 TIFF 导出 | ✅ |
| `tissue_detect.py` | HistoKit Otsu 组织检测 | ✅ |
| `ihc_hotspot.py` | IHC 热点检测算法 | ✅ mock DLL |
| `deepliif_runner.py` | DeepLIIF 推理 | ⚠️ 需模型 |
| `imagej_bridge.py` | ImageJ/Fiji 桥接 | ⚠️ 需 JVM |
| `utils.py` | 坐标映射 | ✅ |
### 日志
打包后的 exe 运行日志写入用户主目录:
```
%USERPROFILE%\pathology-crop-tool.log
```
如遇问题可查看该文件进行诊断。
---
## 📄 许可
本项目基于 [MIT License](LICENSE) 开源。
---
**如果这个项目对你有帮助,请给一个 ⭐ Star!**
[Report Bug](https://github.com/Funvvell/pathology-crop-tool/issues) · [Request Feature](https://github.com/Funvvell/pathology-crop-tool/issues) · [Download Latest](https://github.com/Funvvell/pathology-crop-tool/releases)