跳转到内容
AI Segmentation
QGIS
教程

QGIS建筑轮廓提取:3种方法

发布于 更新于

要在 QGIS 中检测建筑轮廓,你有三条路线:下载开源数据集、在自己的影像上运行AI检测 plugin,或手动数字化。最快的是第二条。从 plugin manager 安装 plugin,加载影像,画一个 zone,输入 buildings,点击 Detect,一个 polygon layer 就会落入你的项目CRS。

过滤是工作的另一半。返回结果中很大一部分不是建筑,所以要按 confidence 和面积削减原始输出。我在巴黎市中心跑了一次,得到635个多边形,决定保留哪82个的时间比检测本身还长。

0:00 / 0:00
One zone, one word, 848 buildings. Real run, sped up 3x, nothing cut.
你的输入方法时间
OpenStreetMap、Microsoft 或 Google 已经覆盖的区域方法1:下载开源轮廓几分钟
几百到几千栋建筑, buyers 给你的那套影像上方法2:自动检测(我们的,云端)57秒检出848栋,然后是过滤
不到五十栋建筑,或需要按地址逐栋划分的历史中心方法3:手动数字化取决于你的速度

永远先看开源数据。只有当覆盖有缺口、年代不对,或轮廓必须与客户给定的那套正射影像对齐时,才继续往下走。

方法1:下载开源轮廓

你需要 QGIS 3.22 或更新版本、一套你信任的影像 layer,以及用于方法2的网络连接。三种方法都不需要独立显卡。

很多任务根本不需要检测。三个开源数据集加起来覆盖了地球大部分地区,在同一个街区上它们之间能差出几千栋建筑。

Pick the dataset for your area

OpenStreetMap 在制图者活跃的地方非常好,而且建筑带有属性。Microsoft Global ML Building Footprints 有超过十亿栋机器提取的建筑,在北美最强。Google Open Buildings 覆盖全球南方,那里 OSM 最稀疏。

Load one against your imagery

用 QuickOSM 把 OSM 拉进来。

Zoom in and look at the edges

看一眼边缘,就能决定是停在这里还是继续往下读。

Three panels of the same dense Luanda neighbourhood on Google Satellite imagery, with building footprints in green. OpenStreetMap shows none, Microsoft covers most, Google Open Buildings covers nearly all.
The same 1 km² of Luanda, on Google Satellite imagery. OpenStreetMap maps no buildings here, Microsoft finds 3,140, Google Open Buildings 4,468. Over a dense African neighbourhood the dataset you reach for decides whether you get everything or nothing.

适合 when: 该区域已有较好的制图覆盖,你能接受数据集的年代和许可。

跳过 when: 覆盖有缺口、年代不对,或轮廓必须与某一套特定正射影像对齐。

方法2:自动检测

建筑轮廓是建筑物与地面交界的外轮廓,是一个平面多边形。不是屋顶,不是地块,不是地址点。这在这里很重要,因为垂直影像给你的是屋顶:在接近天底拍摄的五层奥斯曼街区上偏移很小,在高塔上则不是。承诺任何 footprint layer 之前都要明白这一点,更长的解释见什么是建筑轮廓。

自动检测模型读取你的影像,以多边形形式返回建筑轮廓,每个带一个 confidence 分数。我们做的就是其中一个,AI Segmentation。本节讲的是我们自己的工具。

它和其它工具一样从 plugin manager 安装:不用手动下载,不用配 Python 环境,不用独立显卡,因为模型跑在我们的服务器上。Windows、macOS 和 Linux 都可用。

Dense Parisian city blocks before and after automatic building detection (after)
Dense Parisian city blocks before and after automatic building detection (before)
ImageryDetected
拖动比较
One automatic pass over central Paris, on Google Satellite imagery. Every polygon gets its own colour so neighbours stay separate. Drag the handle to compare.

Install it and pick your imagery layer

从 plugin manager 安装 plugin,打开面板,选择要读取的 raster。

The AI Segmentation panel in QGIS with the Semi-Auto and Automatic switch
Automatic mode: pick the imagery layer, draw a zone, name the object.

Draw a zone and name the object

画一个 zone,输入 buildings,点击 Detect。整个 prompt 就是这样,也可以用你自己的语言。结果按瓦片流式返回,成为项目CRS中的一个 polygon layer。

Set the precision when the objects are small

唯一值得学的设置是精度,也就是瓦片大小。小瓦片让模型看得近,小目标需要这个。大瓦片给它上下文,农场大地块需要这个。

Filter what came back

在成为 layer 之前,面板带你走三步:过滤要保留的内容,修正模型漏掉的部分,选择输出形状。第一步决定成败,下一节单独讲。

Clean the geometry

按顺序做简化、正交化和删除洞,只在每一步真正有用时做。三者的工具和顺序原因见下文。

一次运行按覆盖的地面计费。每个账户每月有免费额度,不用绑卡,Pro 可以提高额度。检测跑在欧洲服务器上,我们不用你的影像训练,如果数据不能离机,还有一个小的本地模型。完整指南见完整指南,其中讲透了保留、修正和形状。

过滤就是全部工作

原始检测输出是一组带 confidence 分数的候选多边形。在密集影像上,大多又小又不确定。我把这次巴黎运行的两个过滤器全放开导出,让每个候选都进入 layer:1.18 km² 上共635个多边形。

1 m²101001 00010 000 m²50 m²
Every one of the 635 detections, binned by area on a log scale. Two humps: noise under 5 m², real buildings above 160 m². The 50 m² line falls in the valley between them, which is why it is not an arbitrary number. Median 3.2 m², largest 13,528 m², median confidence 0.26.

返回结果的一半比停车位还小:通风口、天窗、楼梯间、庭院棚屋。影像上真实存在,勾画也正确,但没人会把它们叫建筑轮廓。

所以要过滤。在面板里拖两个滑块,或用 Select by Expression 在属性表中做同样的事:

"area_m2" >= 50 AND "score" >= 0.5

这样剩下635个中的82个多边形,面积从总计263,658 m²中保留222,338 m²。不用信我的阈值,自己拖一下。绿色是你的过滤器留下的,白色不是。

Aerial imagery of dense Parisian blocks with detected building polygons drawn over it

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,靠 confidence 分数来筛。

干净的结果长什么样

巴黎是难例。同一个工具在往西约10 km 的独栋住宅区:

Detached and semi-detached houses in a Paris suburb, each house filled with its own colour
Detached housing, review filter on. One polygon per house, almost nothing to throw away.

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

同一个工具,同一个城市,几乎不用扔。变的是建成肌理,不是模型。

断点:密集连片街区

Close view of Haussmann blocks, each block one coloured polygon following the street edge with courtyards cut out
The outline follows the street edge precisely and cuts out the courtyards. What it does not do is split the block into individual addressed buildings.

每个多边形描的是整个街区的建成包络,紧贴街线,正确挖除庭院。做建成区或不透水面很好,按地址要逐栋多边形则不行。从垂直影像读取的任何模型都找不到相邻建筑之间的共用墙,因为从上往下看那里什么都看不到。

清理几何

三个 QGIS 原生工具整理 footprint layer,顺序重要,因为简化会移动你刚拉直的顶点。

  1. Simplify,航空影像上容差0.5 m。顶点数大幅削减,边界移动肉眼不可见。
  2. Orthogonalize。把接近直角的角拉直。用在开源数据或手绘成果上,那里还没人拉直过。
  3. 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

Close view of detected building outlines on aerial imagery, corners meeting at right angles
The same detections, close in. The corners arrive square, so the cleanup step has nothing left to snap.

不成直角的12%是联排。看街区中间的阶梯状边缘。任何角工具都修不了它,因为那些台阶跟着真实屋顶线走,不是建模误差。

适合 when: 几百到几千栋建筑,影像必须对齐,或多人必须用同样方式产出同一个 layer。

跳过 when: 在历史市中心需要按地址逐栋划分。我不会在那里用自动检测,地籍数据加手动修正更合适。

Try it free in QGIS, no card needed

方法3:手动数字化

不到五十栋建筑,直接画。免费、精确,这个量级我自己也会手画。

Turn on snapping

Project -> Snapping Options,顶点和线段,打开拓扑编辑。不开的话,一下午都在删碎条。

Trace, and watch yourself drift

画到第60栋左右,你开始走捷径,第6栋时绝不会这样,而且你自己察觉不到。它已经进 layer 了。

适合 when: 大约五十栋以下,或在密集历史中心需要按地址逐栋划分。

跳过 when: 数量达到几百栋,或多个人必须用同样方式产出同一个 layer。

记住什么

开源数据集自动检测手动数字化
成本免费免费额度,之后付费免费
准备几分钟几分钟无
适合已有较好覆盖的区域几百到几千栋约50栋以下
与你的影像对齐否是是
团队多人一致是是否
密集连片街区视数据而定只有街区包络是
可说明的来源数据集和年代你的影像,带 confidence 分数你本人

先查开源数据集。在同一个街区上它们能差出几千栋建筑,所以对照你的影像看一眼边缘,就能决定是否继续。

必须与客户正射影像对齐的轮廓,无论覆盖多好,都排除开源数据集。

检测的主要工作是过滤:巴黎市中心635个中保留82个,占建成面积的84%。

在相连建筑处,垂直影像给不出按地址逐栋的多边形,花多少钱都不行。去关联地籍数据。

超过五十栋左右,手动数字化会悄悄走形而不自知。

常见问题

无人机影像可用吗?

比卫星更好用。地面分辨率比来源更重要:5 cm 正射影像的边界更干净、confidence 更高,比30 cm 卫星场景好。

需要 GPU 吗?

不需要。两种模式默认都跑在我们的服务器上,小的本地模型跑在你自己的 CPU 上,更慢、精度更低。如果你想全部留在本机,Geo-SAM 和 samgeo 免费且好用,它们确实需要 NVIDIA 显卡。

一次运行多少钱?

自动检测按 zone 覆盖的地面计费,Cloud AI 按每次保存计一个目标。自己机器上的半自动免费。每个账户每月有免费额度。

能按地址逐栋划分吗?

在建筑相连的市中心,从垂直影像做不到。模型返回的是整个街区的建成包络,庭院已挖除,做建成区是对的,做地址是错的。去关联地籍数据。

开源数据集从哪个开始?

有活跃制图者的区域从 OpenStreetMap 开始。没有的地方差距很大:在那1 km² 的罗安达上 OSM 一栋都没有,而 Microsoft 找到3,140栋,Google Open Buildings 找到4,468栋。

屋顶与地面差距的完整解释,读什么是建筑轮廓。分类 raster 转面用 polygonize 比任何模型都好,读QGIS 中 raster 转矢量。QGIS AI hub 列了我们做的其它东西。

Try it free in QGIS, no card needed