This commit is contained in:
2026-04-22 09:26:39 +08:00
parent c3bd750a66
commit ccc059edc0
11 changed files with 4371 additions and 3 deletions

186
说明文档 Normal file
View File

@ -0,0 +1,186 @@
# 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`
---