跳转到内容
AI Segmentation
QGIS
教程

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

发布于 更新于

要在 QGIS 中检测建筑物轮廓,有三条路线:下载开源数据集、在自己的影像上运行 AI 检测插件,或手动数字化。最快的是第二条。从插件管理器安装插件,加载影像,画一个区域,输入 buildings,点击 Detect,一个多边形图层就会落入您的工程 CRS。

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

0:00 / 0:00
一个区域,一个词,848 栋建筑物。真实运行,3 倍速播放,未做任何剪辑。
您的输入方法时间
OpenStreetMap、Microsoft 或 Google 已经覆盖的区域方法 1:下载开源轮廓几分钟
几百到几千栋建筑物,且必须使用交给您的那套影像方法 2:自动检测(我们的,云端)57 秒检出 848 栋,然后是过滤
不到五十栋建筑物,或需要按地址逐栋划分的历史中心方法 3:手动数字化取决于您的速度

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

方法 1:下载开源轮廓

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

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

按所在区域选择数据集

OpenStreetMap 在制图者活跃的地方非常好,而且建筑带有属性。Microsoft Global ML Building Footprints 有超过十亿栋机器提取的建筑,在北美最强。Google Open Buildings 覆盖全球南方,那里 OSM 最稀疏。如果想在加载之前先看看它们各自在您所在区域有什么,可以在我们的免费建筑物轮廓下载器中画一个框,并把想要的那一个下载为 GeoJSON。

对照您的影像加载一个

用 QuickOSM 把 OSM 拉进来。

放大并查看边缘

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

同一个密集的罗安达街区在 Google Satellite 影像上的三幅图,建筑物轮廓以绿色显示。OpenStreetMap 一栋都没有,Microsoft 覆盖了大部分,Google Open Buildings 几乎全部覆盖。
罗安达同一块 1 km² 的区域,叠加在 Google Satellite 影像上。OpenStreetMap 在这里没有标出任何建筑物,Microsoft 收录 3,140 栋,Google Open Buildings 收录 4,468 栋。这只是一个街区,不是排名:请检查每个数据集在您自己的区域里收录了什么。

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

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

方法 2:自动检测

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

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

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

自动检测建筑物前后的巴黎密集街区 (after)
自动检测建筑物前后的巴黎密集街区 (before)
影像检测结果
拖动比较
巴黎市中心的一次自动检测,叠加在 Google Satellite 影像上。每个多边形各有自己的颜色,相邻的建筑物因此保持分开。拖动滑块进行对比。

安装并选择影像图层

从插件管理器安装插件,打开面板,选择要读取的栅格。

QGIS 中的 AI Segmentation 面板,带有半自动与自动的切换开关
自动模式:选择影像图层,画一个区域,说出对象名称。

画一个区域并说出对象名称

画一个区域,输入 buildings,点击 Detect。整个提示词就是这样,也可以用您自己的语言。结果按分块流式返回,成为工程 CRS 中的一个多边形图层。

对象较小时设置精度

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

过滤返回的结果

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

清理几何

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

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

过滤就是全部工作

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

1 m²101001 00010 000 m²50 m²
635 个检测结果按面积分箱,对数坐标。出现两个峰:5 m² 以下的噪声,160 m² 以上的真实建筑物。50 m² 这条线落在两者之间的谷底,所以它不是随意定的数字。中位数 3.2 m²,最大 13,528 m²,置信度中位数 0.26。

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

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

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

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

密集巴黎街区的航空影像,上面叠加了检测到的建筑物多边形

82 / 635个多边形被保留 (13%)

84%的建成面积 (222,338 m²)

属性表中的同样 635 个检测结果。把置信度降到零,庭院棚屋和天窗就会回来。

拖动第一个滑块时,请盯住第二个数字。扔掉 87% 的多边形,只损失 16% 的面积,被扔掉的本来就是您要手动一个个删除的噪声,删的时候还会怀疑工具好不好用。

按任务调整两个阈值。工业厂房普查可以把面积下限提高到 200 m²。绘制非正式住区时,50 m² 会扔掉真正的房屋,可以降到 15,改靠置信度分数来筛选。

干净的结果长什么样

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

巴黎郊区的独栋和双拼住宅,每栋房屋填充各自的颜色
独栋住宅,已启用复核过滤。每栋房屋一个多边形,几乎没有需要扔掉的。

85m²

多边形面积中位数

巴黎的运行:3.2 m²

0.79

置信度中位数

巴黎的运行:0.26

251个多边形

保留,共返回 251 个

巴黎的运行:635 个中保留 82 个

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

断点:密集连片街区

奥斯曼街区的近景,每个街区是一个沿街线的彩色多边形,庭院已被挖除
轮廓精确贴合街线并挖除庭院。它做不到的,是把街区拆分成带地址的单栋建筑物。

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

清理几何

三个 QGIS 原生工具可以整理建筑物轮廓图层,顺序很重要,因为简化会移动您刚拉直的顶点。

  1. Simplify,航空影像上容差 0.5 m。顶点数大幅削减,边界移动肉眼不可见。
  2. Orthogonalize。把接近直角的角拉直。用在开源数据或手绘成果上,那里还没人拉直过。
  3. Delete holes,只在想要实心轮廓时用。巴黎这个结果不要用:那些洞是庭院,是对的。

在检测得到的图层上,第 2 步接近空操作。我没有凭空假设,而是实测过:对 190 栋检测到的建筑物运行 Orthogonalize,对比前后全部 1,845 个角。

87.9%

的角已在直角 1° 以内

运行任何处理之前

87.9%

运行 Orthogonalize 之后

同样的 1,845 个角

1.7cm

顶点位移中位数

最大为 9.1 cm

航空影像上检测到的建筑物轮廓近景,各个角呈直角相交
同样的检测结果,拉近来看。角本来就是直的,所以清理这一步没有什么可以再拉直的。

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

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

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

在 QGIS 中免费试用 AI Agent,无需信用卡

方法 3:手动数字化

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

打开捕捉

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

描绘,并留意自己的走形

画到第 60 栋左右,您开始走捷径,这在第 6 栋时绝不会发生,而且您自己察觉不到。它已经进图层了。

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

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

记住什么

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

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

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

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

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

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

常见问题

无人机影像可用吗?

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

需要 GPU 吗?

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

一次运行多少钱?

自动模式按区域覆盖的地面计费,云端 AI 每次保存计一个对象。自己机器上的半自动模式免费。每个账户每月有免费额度。

能按地址逐栋划分吗?

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

开源数据集从哪个开始?

有活跃制图者的区域从 OpenStreetMap 开始。没有的地方差距很大:在罗安达的那个 1 km² 街区,OSM 一栋建筑物都没有标出,而 Microsoft 收录 3,140 栋,Google Open Buildings 收录 4,468 栋。

什么软件可以为城市规划检测建筑轮廓?

做规划研究时,先从免费的 QGIS 开始:加载开放的建筑轮廓数据(OpenStreetMap、Microsoft、Google Open Buildings),再对照最新影像检查。对于缺失或过时的区域,像 AI Segmentation 这样的自动检测插件可以根据你自己的正射影像绘制建筑,让图层与你的影像日期一致。ArcGIS Pro 也有预训练的建筑模型,但需要付费许可证,还要有 GPU 才能跑得快。要完成整张地图,从数据到带样式的打印布局,AI Agent 只需一句话就能在 QGIS 中完成这些步骤。

屋顶与地面差距的完整解释,请读什么是建筑物轮廓。对于已分类的栅格,用栅格矢量化比任何模型都好,请读QGIS 中栅格转矢量。同样的“画区域加过滤”方法也能找到这些屋顶上的光伏板:QGIS 光伏板检测讲了具体做法。如果想在新的区域上重复这套检测和过滤流程,又不想重复每一次点击,AI Agent 可以根据 QGIS 中的一条指令完成。棕地场地在检测中常常表现为遗留的混凝土板和棚屋,而不是干净的屋顶,绿地与棕地这一页讲了二者从空中看分别是什么样。QGIS AI 专题页列出了我们做的其余产品。

立即使用我们的免费工具完成

Building footprint downloader

打开免费工具

在 QGIS 里,说一句就能完成

AI Agent 会在你自己的 QGIS 项目中,完成你描述的任务。免费使用,无需绑卡。

免费试用 AI Agent
由以下作者撰写Yvann Barbot
·3 min read