如何在 QGIS 中自动检测建筑物轮廓
我在巴黎市中心一块区域上运行了自动检测,一次就得到 635 个多边形。决定保留哪 82 个所花的时间,比检测本身还长,而这第二部分几乎每篇教程都会略过。


简要结论。 要在
中自动检测建筑物轮廓:从 plugin manager 安装一个 AI detection plugin,加载影像,绘制区域,为对象命名,然后运行。你会在项目 CRS 中得到一个多边形 layer。接着按置信度和面积过滤这份原始输出,因为返回结果中很大一部分不是建筑物。
什么是建筑物轮廓
建筑物与地面接触处的轮廓,以平面多边形表示。不是屋顶,不是地块,也不是地址点。
这点在这里很重要,因为垂直影像给你的是屋顶。在接近正射角拍摄的五层 Haussmann 建筑街区上,偏移很小。高塔则不是。在你向任何人承诺提供建筑物轮廓 layer 之前,最好先知道这一点。
先检查开放数据集
很多工作其实不需要检测任何东西。
- OpenStreetMap 在制图者活跃的地方非常出色,而且建筑物带有属性。使用 QuickOSM 将其加载进来。
- Microsoft Global ML Building Footprints 包含超过十亿个机器提取的建筑物,在北美表现最强。
- Google Open Buildings 覆盖 OSM 最薄弱的 Global South。

将其中一个数据集叠加到你的影像上。只有在覆盖范围存在空洞、数据年代不对,或轮廓必须匹配客户交给你的特定正射影像时,你才继续往下做。
不到五十栋建筑,就手工绘制
手工数字化。免费、精确,到了这个数量,我还是会自己做。先打开 snapping(Project -> Snapping Options,vertex 和 segment,开启 topological editing),否则你会花整个下午删除碎片。
到了第 60 栋建筑时,你开始走一些在第 6 栋时绝不会走的捷径,而且自己还注意不到。它已经进入了 layer。
自动方式
这里的 plugin 是 AI Segmentation,这是我和联合创始人在 TerraLab 开发的产品,所以读这一节时,请记得这是谁的工具。它和其他 plugin 一样从 plugin manager 安装:无需手动下载,无需 Python 环境,也无需专用显卡,因为模型运行在我们的服务器上。支持 Windows、macOS 和 Linux。
绘制一个区域,输入 buildings,点击 Detect。这就是完整的 prompt,如果你愿意,也可以使用自己的语言。结果会随着瓦片逐块传回来,作为项目 CRS 中的一个多边形 layer。

值得了解的一个设置是 precision,也就是瓦片大小。小瓦片让模型看得更近,这是小型目标所需要的。大瓦片为模型提供上下文,这是农场地块所需要的。瓦片也是计费单位:每块 1 个额度。每个账户每月都有免费额度,无需银行卡,而 Pro 会提高额度。检测运行在欧洲服务器上,我们不会使用你的影像进行训练;如果任何数据都不能离开你的机器,也有一个小型本地模型可用。
然后,面板会在任何内容成为 layer 前引导你完成三个步骤:过滤要 Keep 的内容,Correct 模型漏掉的内容,并选择输出的 Shapes。完整指南涵盖了这三步。第一步决定成败,所以下一节专门讲它。
过滤就是全部工作
原始检测输出是一组带有置信度分数的候选多边形。在密集影像中,大多数都很小且不确定。我将这次巴黎运行的两个过滤器都调到最宽松,因此每个候选结果都进入了 layer:在 1.18 km² 上共有 635 个多边形。
返回结果中有一半比停车位还小:通风口、天窗、楼梯间顶棚、庭院棚屋。它们都是真实出现在影像中的东西,轮廓也画得没错,但没人所谓的建筑物轮廓是这些东西。
所以要过滤。拖动 panel 中的两个滑块,或者在属性表里用 Select by Expression 做同样的事:
"area_m2" >= 50 AND "score" >= 0.5
这样会留下 635 个中的 82 个多边形,覆盖 263,658 m² 总面积中的 222,338 m²。与其直接相信我的阈值,不如自己移动滑块。绿色会通过你的过滤,白色不会。

82 / 635polygons kept (13%)
84%of the built area (222,338 m²)
The same 635 detections the attribute table holds. Drop the confidence to zero and the courtyard sheds and skylights come back.
拖动第一个滑块时,观察第二个数字。丢掉 87% 的多边形,只损失 16% 的面积。其余都是你反正也会手动删除的噪声,只不过得一个个删,同时怀疑这个工具到底好不好用。
根据工作调整两者。工业棚屋测绘可以把面积下限提高到 200 m²。绘制非正规住区时,50 m² 会丢掉真实房屋,所以降到 15,并更多依赖置信度分数。
干净的结果是什么样
巴黎是个难题。同一个工具用于以西约 10 km 的独立式住宅:

85m²
median polygon area
Paris run: 3.2 m²
0.79
median confidence
Paris run: 0.26
251polygons
kept, out of 251 returned
Paris run: 82 out of 635
同一个工具,同一座城市,几乎没有可丢弃的结果。变化的是建筑形态,而不是模型。
它在哪里失效:密集连续街区

每个多边形都沿着街道边缘描出整块街区的建筑外轮廓,并正确挖出庭院。对于建筑面积或不透水面有用,但如果你需要每个地址一个多边形,就不对了。任何读取垂直影像的模型都找不到两栋相连建筑之间的共用墙,因为从上面看那里什么也没有。
所以,如果你要的是历史城区按地址划分的 layer,我不会使用自动检测。地籍数据加手工修正更胜一筹。
清理几何图形
三个原生 QGIS 工具可以整理建筑物轮廓 layer,而且顺序很重要,因为 Simplify 会移动你刚刚弄成直角的顶点。
- Simplify,在航拍影像上使用 0.5 m 容差。大幅减少顶点数量,同时不会把边界移动到你能察觉的位置。
- Orthogonalize。 将接近直角的角点吸附成方正形状。在开放数据或手工描绘的工作中可以使用它,因为这些数据还没有被方正化。
- Delete holes,仅当你想要实心轮廓时使用。巴黎结果不要这样做:那些孔洞是庭院,而且是正确的。
在检测得到的 layer 上,第 2 步几乎等于不做任何事。我没有直接假定这一点,而是实际测量了它:对 190 个检测出的建筑运行 Orthogonalize,并比较全部 1,845 个角点前后的变化。
87.9%
corners already within 1° of square
before running anything
87.9%
after Orthogonalize
the same 1,845 corners
1.7cm
median vertex shift
9.1 cm at the worst

剩下那 12% 不方正的是相连的露台。看看贯穿街区中央的阶梯状边缘。没有任何角点工具能修正它,因为这些台阶沿着真实屋顶线分布,而不是建模错误。
该使用哪种方法
| 开放数据集 | 手工数字化 | 自动检测 | |
|---|---|---|---|
| 成本 | 免费 | 免费 | 免费额度,用完付费 |
| 设置 | 几分钟 | 无 | 几分钟 |
| 适合 | 已有良好覆盖的区域 | 少于约 50 栋建筑 | 数百到数千栋建筑 |
| 匹配你的影像 | 否 | 是 | 是 |
| 团队内一致 | 是 | 否 | 是 |
| 密集连续街区 | 视情况而定 | 是 | 仅街区外轮廓 |
| 可说明的来源 | 数据集及年代 | 你 | 你的影像,附置信度分数 |
常见问题
它适用于无人机影像吗? 比卫星影像更好。地面分辨率比来源更重要:5 cm 正射影像能提供比 30 cm 卫星场景更干净的边界和更高的置信度。
我需要 GPU 吗? 不需要。两种模式默认都在我们的服务器上运行,小型本地模型在你自己的 CPU 上运行,但速度更慢、准确度也更低。如果你希望所有内容都留在自己的机器上,Geo-SAM 和 samgeo 都是免费且好用的,但它们需要 NVIDIA 显卡。
一次运行要多少钱? 自动模式下每个瓦片消耗 1 个额度,半自动模式下每保存一个对象消耗 1 个额度。每个账户每月都有免费额度,本地模型则完全不收费。



