# 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` ---