倾斜摄影模型 → 正射影像 → 建筑物轮廓 → 入库。这条路看起来是三个工具串联, 实际上每一段都有自己的坑,而且大部分坑不会报错,只会在最后的成果里以"位置偏了""边缘不对""图斑没法用" 的形式暴露出来。下面按生产顺序拆开讲。
典型的四段,本文覆盖前三段(第四段是人工质检,无法自动化):
倾斜摄影模型 / 3D Tiles
│ ① 换成 OBJ(Cesium ion 导出、Metashape、其他转换工具)
▼
OBJ + metadata.xml
│ ② ObjOrthoRender:分块渲染 + 写地理参考
▼
带坐标系的 GeoTIFF(DOM)
│ ③ Footprint-Creater:分割 + 校验 + 规则化
▼
buildings.shp(可入库)
│ ④ 人工质检:套合、拓扑、属性
制图、变化检测、建筑物提取都需要二维影像,但模型是三维的。 这一步的本质是沿 Z 轴正交投影,同时把模型局部坐标换算回真实地理坐标。
# 先用自带样例确认环境正常(约 60 秒)
python render_orthophotos.py --input examples/sample --output out --gsd 0.5
# 处理自己的模型
python render_orthophotos.py \
--input /path/to/obj_tiles \
--output /path/to/dom \
--gsd 0.05 \
--workers 4 \
--merge-mode all
这一步最容易被低估。直接拿语义分割掩码转矢量,得到的是锯齿边、粘连块和碎屑, 导入 GIS 之后几乎不可用。真正耗时间的是"掩码 → 可入库图斑"之间那段处理。
python web_app.py # 打开 http://localhost:5000 上传影像
# 或者按下面的参数在界面里配
BLOCK_SIZE 1024 # 分块推理尺寸,按显存调
BLOCK_OVERLAP 512 # 建议保持 50%
MIN_AREA_M2 100.0 # 最小建筑面积
BUFFER_EXPAND_M 0.6 # 平滑膨胀,米
BUFFER_SHRINK_M 0.3 # 平滑腐蚀,通常取膨胀的一半
SIMPLIFY_TOL 0.3 # Douglas-Peucker 公差,米
RECT_IOU_THRESH 0.90 # 与最小外接矩形重合度超过此值则矩形化
什么情况下该训:高密度城区建筑粘连、屋顶材质差异大导致漏检、 阴影方向不同导致边界系统性偏移。判断标准很简单——看错误是否有规律。 随机误差靠加数据,系统性偏差只能靠换模型。
cp prepare/DATA.example.TXT prepare/DATA.TXT # 填入影像与矢量路径
python prepare/prepare_dataset_multiprocess.py # 滑窗切片
python train.py # HRNet-W48 + FCNHead
python predict.py --input mosaic.tif \
--checkpoint work_dirs/hrnet_w48_footprint/iter_40000.pth
交付前至少查这四件事,都能在 QGIS 里几分钟完成:
| 检查项 | 怎么查 | 不合格的表现 |
|---|---|---|
| 坐标系 | 图层属性看 CRS | 显示未知或与底图错位 |
| 套合精度 | 叠到原影像,抽 10 处看边 | 整体平移或旋转 → 回查 GSD 与 SRSOrigin |
| 几何有效性 | 拓扑检查器跑自相交 | 有自相交面 → 简化公差可能过大 |
| 面积分布 | 统计字段直方图 | 出现大量 < 20 m² 图斑 → 最小面积阈值偏低 |
九成是 metadata.xml 的 SRSOrigin 与出模时不一致。其次是 SRS 写成了 EPSG:4326 而实际是 3857。
OpenGL 没起来。Docker 下确认 DISPLAY=:99 与 Xvfb;本机跑先执行 glxinfo | grep OpenGL 看有没有 3.3+。
说明跳过了规则化,或者 SIMPLIFY_TOL 设得过小。默认 0.3 m 是配合 0.05–0.1 m GSD 的经验值。
改用 --merge-mode subfolder,或用 --subdir 按区块分批处理。all 模式会把全部影像并成一张巨型 TIFF。
不能,链路第一段需要先把 3D Tiles 转成 OBJ(Cesium ion 导出或第三方转换工具)。本工具从 OBJ 开始。