Files
StripStitch/说明文档
2026-04-22 09:26:39 +08:00

186 lines
6.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# StripStitch航带批量配准工具使用说明
## 1. 工具简介
`StripStitch.py` 用于将一个文件夹中的多幅 `.bip` 航带影像批量配准到一幅参考底图 `.tif`GeoTIFF输出配准后的 BIP 文件,并生成配准统计 CSV、日志与可视化结果若启用/代码包含)。
支持的能力(按当前脚本实现为准):
- GUI 图形界面:选择输入/输出、配置 matcher、选择变换模型、设置质量阈值与过滤参数
- 参考底图可选“掩膜”:先用 `tif_caijain.py` 对底图做 NoData 掩膜,再用掩膜后的底图执行配准
- 统计 CSV每次运行生成独立文件文件名包含时间戳
- 出错弹窗:处理线程异常会弹窗显示完整 traceback便于定位问题
---
## 2. 目录结构(建议)
建议将脚本与相关文件保持在同一目录(当前工程已是):
- `e:\code\vismatch-main\vismatch-main\test\StripStitch.py`
- `e:\code\vismatch-main\vismatch-main\test\tif_caijain.py`
- `e:\code\vismatch-main\vismatch-main\vismatch\`matcher 依赖)
---
## 3. 环境依赖
### 3.1 必需依赖(运行 GUI/配准)
- Python 3.9+(建议与现有环境一致)
- `numpy`
- `opencv-python`cv2
- `rasterio`
- `affine`
- `vismatch`(本仓库内模块)
### 3.2 可选依赖(对应功能可用/不可用)
- `scikit-image`piecewise/polynomial 变换相关
- `matplotlib` + `scipy`:凸包内点判定等
- `SimpleITK` / `pirt` / `scipy.interpolate`TPS 相关
- `tqdm`:掩膜处理进度条(已做无控制台环境兼容)
---
## 4. 输入数据要求
### 4.1 参考底图GeoTIFF
- 文件格式:`.tif` / `.tiff`
- 应包含正确 CRS 与 transform地理参考信息
### 4.2 待配准航带ENVI BIP
- 文件格式:`.bip`
- 建议包含合理的波段与 NoData若有
### 4.3 可选底图掩膜GeoTIFF
启用“底图掩膜”时:
- 掩膜必须是与底图 **严格对齐** 的 GeoTIFF同 CRS、同 transform、同 width/height
- `tif_caijain.py` 默认逻辑:掩膜中值等于 `1` 的像素会被置为 NoData可在后续扩展为 GUI 可配)
---
## 5. GUI 使用方法(推荐)
### 5.1 启动 GUI
在 Windows PowerShell 或 CMD 中运行:
```powershell
cd "e:\code\vismatch-main\vismatch-main\test"
python "StripStitch.py"
```
### 5.2 GUI 字段说明
- 参考TIF文件要配准到的底图
- 启用底图掩膜:勾选后需要选择掩膜 TIF并会先生成“掩膜后的底图”
- BIP文件夹包含待配准 `.bip` 的文件夹(程序会遍历 `*.bip`
- 输出文件夹:所有输出写入此目录
- 匹配算法:选择 matcher例如 `matchanything-roma`
- 设备:`cuda`(更快)或 `cpu`
- 变换方法:可多选,按优先级尝试(可上移/下移顺序)
- 参数设置匹配缩放、ROI 扩展、质量阈值、边缘/纹理过滤等
### 5.3 开始/停止
- 开始处理:开始批量配准
- 停止处理:设置停止标记,当前文件处理结束后停止
---
## 6. 命令行模式CLI
脚本保留了 CLI 模式入口(若实现支持 `--cli`
```powershell
python "StripStitch.py" --cli
```
说明:
- CLI 模式下通常使用脚本顶部的默认配置REF_TIF / BIP_DIR / OUT_DIR 等)。
- 若需要完整参数化 CLI可后续再扩展 argparse。
---
## 7. 输出说明
假设输出目录为 `OUT_DIR`
### 7.1 统计 CSV
每次运行会生成一个新 CSV
- `OUT_DIR\stats\registration_stats_YYYYMMDD_HHMMSS.csv`
内容包含(示例字段):
- 时间戳、文件名、匹配点/内点数、内点比例、所选方法、误差统计、成功与否等
### 7.2 掩膜后的底图(如果启用底图掩膜)
- `OUT_DIR\masked_refs\<底图名>_masked_<时间戳>.tif`
配准时会使用这个掩膜后的底图作为参考。
### 7.3 配准输出
- 脚本会将每个 `.bip` 配准后输出到 `OUT_DIR`(具体命名以代码为准,例如 `_registered.bip`)。
---
## 8. 常见问题与排查
### 8.1 处理过程中发生错误: No module named 'src'
原因:
- `matchanything-*` 依赖第三方源码目录(`vismatch/third_party/MatchAnything/.../src`),打包或运行时没有被正确加入 `sys.path`。
解决:
- 确保 PyInstaller spec 中把 `vismatch/third_party` 打进包里Tree 方式)
- 运行时脚本会尝试从 `_MEIPASS` 和 exe 目录自动寻找 third_party 并加入 `sys.path`
- 如果仍失败,检查 dist 目录下是否存在:
- `dist\StripStitch\_internal\vismatch\third_party\MatchAnything\imcui\third_party\MatchAnything\src\`
### 8.2 No module named 'loguru'
原因:
- MatchAnything 的第三方代码中引用了 `loguru`
解决:
- 打包时将 `loguru` 加入 hiddenimports或安装 loguru
- 脚本也提供了缺失时的兼容 stub以避免直接崩溃
### 8.3 底图掩膜时报错:'NoneType' object has no attribute 'write'
原因:
- PyInstaller `console=False` 时 tqdm 可能没有可写的输出流
解决:
- `tif_caijain.py` 已处理:无控制台环境会自动禁用 tqdm 或使用安全输出,不应再崩溃
- 重新打包并运行最新代码
---
## 9. 打包PyInstaller文件夹模式 onedir
### 9.1 使用 spec 打包
在 `test` 目录执行:
```powershell
pyinstaller --clean -y "e:\code\vismatch-main\vismatch-main\test\StripStitch.spec"
```
输出:
- `dist\StripStitch\StripStitch.exe`(以及同目录依赖文件)
### 9.2 打包注意事项
- 若你改动了 `.spec` 或 `.py`,务必 `--clean` 重新打包
- 深度学习 matcher 依赖多,出现 “No module named xxx” 时通常需要:
- spec 增加 hiddenimports
- 或把第三方源码目录作为 datas 打进去
- 或做运行时兼容 stub仅当该依赖不影响核心逻辑/可替代)
---
## 10. 建议的使用流程(从零到一)
1) 准备底图 `result.tif` 与待配准 `.bip` 文件夹
2) (可选)准备与底图对齐的掩膜 `result_mask.tif`(值=1 为去除区域)
3) 启动 GUI选择底图、BIP 文件夹、输出目录
4) 选择 matcher建议从 `matchanything-roma` 或你已验证可用的 matcher 开始)
5) 选择变换方法(建议先 `affine + homography`
6) 点“开始处理”,观察日志与进度
7) 处理结束后查看:
- 输出 BIP
- `stats\registration_stats_*.csv`
- (可选)`masked_refs\*_masked_*.tif`
---