Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算
论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis
中文题目: 基于深度学习、图像处理和自动地理空间分析
的街景图像建筑高度估算
作者: Ala’a Al-Habashna, Ryan Murdoch
作者单位: 加拿大统计局特别业务项目中心数据探索和集成实验室
,加拿大渥太华
投稿时间:2023年5月16日
修改时间:2023年8月24日
接受时间:2023年9月28日
在线发表时间:2023年11月11日
期刊: Multimedia Tools and Applications
中国科学院SCI期刊分区的四区
摘要
近年来,许多研究致力于从街景图像中提取有关建筑和基础设施、交通与移动性、步行性以及健康与福祉的有价值数据
- 本文提出了
两种算法及其实现方法
,用于利用深度学习(DL)
和高级图像与地理空间数据处理算法
,从街景图像中自动估算建筑高度
- BHEDC算法:基础算法,用于估算建筑高度。
- iBHEDC算法:改进版算法,增加了
新的组件和优化步骤
。
- 本文旨在通过改进现有算法 (BHEDC),提出一种新的方法(iBHEDC),以提高建筑高度估算的精度和效率
点击查看BHEDC论文解析: https://tancer.blog.csdn.net/article/details/144121336
背景
建筑高度
是城市建模与规划、城市与经济分析等领域的重要数据。传统方法
依赖于昂贵的测量设备
或高分辨率遥感图像
,而街景图像提供了一种低成本、高可用性
的替代方案。- 尽管街景图像在地理空间数据提取中具有潜力,但如何从中准确估算建筑高度仍然是一个挑战,尤其是在复杂的城市环境中
相关研究
- 步行性分析:Smith等人提出了一种方法,通过街景图像提取
人行道的存在及质量数据
,用于设计步行友好型城市
。 - 道路表面分类:Marianingsih和Utaminingrum使用街景图像训练分类器,将道路表面
分类
为多种类型(如沥青、砾石
) - 视觉定位:通过与
地理标记图像
的比较,预测图像的地理位置
- Zhao等人提出了一种基于
语义分割和边缘检测
的建筑高度估算方法。 - Al-Habashna提出了BHEDC算法,利用
街景图像和建筑轮廓数据
进行高度估算。
方法
iBHEDC算法概述
- 预处理与语义分割:对输入图像进行
预处理
,使用CNN生成语义分割图像
,提取建筑物区域。 - 建筑维度提取:通过
颜色变换
和单应性变换
,提取建筑物在图像中的高度
。 - 轮廓与顶部点提取:使用
Ramer-Douglas-Peucker算法
提取建筑轮廓,并确定建筑顶部点
。 - 高度估算:结合
相机投影模型
和校正因子
,估算实际建筑高度
。
相关处理技术概览:
- 颜色变换:对图像像素进行
颜色变换
,以避免语义分割输出中的问题。 - 单应性变换:将图像归一化为
零俯仰角
图像。 - 语义分割:使用训练好的CNN生成
语义分割图像
- 阈值处理:提取
建筑物像素区域
,并通过提取最大连通区域
消除无关子区域。 - 轮廓提取:使用
Ramer-Douglas-Peucker算法
对轮廓进行近似,提取建筑物的顶部点
。 - 相机投影模型:结合图像中的建筑维度和
相机元数据
,估算实际建筑高度
数据集和评价指标
数据集
数据集包含400个建筑物
的街景图像
及其对应的建筑轮廓数据。
数据来源包括多个平台(如Open Street Map
和其他地理空间数据平台
)。
评价指标
高度估算精度:通过与真实建筑高度
的对比,评估算法的准确性。
算法鲁棒性:在复杂场景
(如遮挡、光照变化)下测试算法的表现
iBHEDC 算法(改进版建筑高度估算算法)高层次工作流程的框架图
整个工作流程从获取街景图像开始,通过数据预处理、深度学习相关处理、地理空间数据分析和图像处理一步步实现建筑高度的估算
- 获取测试图像
步骤:从Google Street-View Static API
中获取街景图像
。
目的:为算法的后续分析提供原始测试数据,确保街景图像具有良好的质量
,并附带元数据信息
(如图像的地理位置、相机信息等)。 - 图像预处理
步骤:对图像实施必要的预处理
操作。
内容:可能包括图像的裁剪、去噪、颜色校正
以及对元数据的验证和标准化处理。
作用:提高图像质量,确保后续深度学习和图像处理步骤的结果准确性和可靠性。 - 基于深度学习的语义分割
步骤:利用深度学习模型
(如卷积神经网络,CNNs)对图像进行语义分割
,以识别建筑物区域。
功能:通过像素级分割
,为后续的建筑物轮廓提取和高度估算提供信息。 - 下载建筑轮廓数据
步骤:从地图数据平台(如 Open Street Map)
下载与图像相关的建筑轮廓数据
(building footprint data)。
作用:获取建筑物的基本地理轮廓,为估算实际建筑高度提供地理空间信息支持。 - 地理空间处理与建筑与相机距离计算
步骤:结合地理空间数据
和图像元数据
计算建筑物与相机的位置和距离
。
方法:包括图像与地理位置的对应
以及基于透视技术的距离计算
。
目的:通过相机与目标建筑物的空间关系,完善建筑高度的估算公式。 - 提取建筑物图像维度
步骤:应用图像处理技术
提取建筑物在图像中的高度
(如顶部点到底部点的像素距离)。
技术:使用边缘检测、形状提取以及轮廓拟合等技术,从语义分割图像提取建筑物的主要维度。 - 估算建筑高度
步骤:通过相机投影模型
结合上述提取的建筑维度
和相机-建筑距离
,估算实际建筑高度。
方法:使用几何关系和透视变换技术,将图像中以像素表示的建筑物高度转换为实际物理高度。
在 iBHEDC 算法中提取建筑图像维度详细流程
该图主要描述了如何从语义分割
后的图像中提取建筑物在图像中的高度
流程主要三大部分:
- 语义分割与图像预处理:对图像进行
强度变换(Intensity Transformation
)、变换校正(Plane-to-Plane Homography)
和语义分割
等处理。- 应用强度变换(Apply Intensity Transformation on the Image)
作用:通过调整像素值分布,提高图像的对比度
,从而增强建筑物的清晰度。
方法:可能包括直方图均衡化
或伽马校正
。 - 应用平面到平面单应性变换(Apply Plane-to-Plane Homography if Needed)
作用:校正
由于相机角度造成的建筑物倾斜问题
,使得图像中的建筑物呈现直立状态
。
方法:将非垂直平面
的像素校正到同一视角(垂直)平面。 - 使用语义分割识别图像中的建筑物(Use Semantic Segmentation to Identify Buildings in the Image)
作用:通过卷积神经网络(CNN)等深度学习方法,将建筑物区域从图像中精准分割出来
,标记背景和建筑物像素区域。
- 应用强度变换(Apply Intensity Transformation on the Image)
- 建筑轮廓提取:通过
阈值
和连通性分析
提取建筑物的连通区域以及轮廓- 应用搜索区域算法确定建筑区域(Apply the Search-Region Algorithm to Determine the Building’s Region)
作用:通过分析建筑物的位置和大小,划定建筑物的感兴趣区域(Region of Interest)
。 - 应用图像阈值处理获取建筑像素(Apply Image Thresholding to Obtain Pixels of Buildings)
作用:根据像素强度,将图像二值化
,提取与建筑物相关的像素区域。 - 提取最大的连通区域(Extract the Biggest Connected Component)
作用:分析连通像素区域(Connected Components),保留覆盖面积最大的区域
,排除无关或背景噪声
。
- 应用搜索区域算法确定建筑区域(Apply the Search-Region Algorithm to Determine the Building’s Region)
- 高度计算:找到建筑轮廓的
最高点
,根据校正
获取建筑在图像中的大致高度- 提取轮廓(Extract the Contour)
作用:通过边界检测,提取建筑物像素区域的边缘轮廓
,形成精确的建筑物形状信息。 - 轮廓拟合(Approximate the Contour)
方法:使用Ramer-Douglas-Peucker 算法
对轮廓进行多边形拟合,从而去除冗余复杂信息,保留重要的轮廓特征。 - 在拟合轮廓中获取最高点(Get the Highest Point in the Approximated Contour)
功能:通过分析轮廓顶点
,确定建筑物在图像中的最高位置
,为后续高度计算提供基础数据。 - 计算大致的建筑图像高度(Calculate the Approximate Building-Image Height)
方法:计算建筑物最高点
和最低点
在图像中的像素间距,得出建筑在图片中的高度。 - 应用建筑图像高度校正(Apply Building-Image Height Correction)
功能:通过结合图像元数据
(如相机和建筑距离)、视角参数
进行校正,得到更准确的图像高度。
- 提取轮廓(Extract the Contour)
预处理步骤对输入图像的影响
左图(a):原始街景图像,体现了捕获数据的初始状态,但可能包含一些不利影响,比如色彩不均、光照问题、视角偏差等。
右图(b):经过强度变换(Intensity Transformation)和图像校正(Plane-to-Plane Homography)后的图像,处理后建筑物呈现更好的可见性,同时减小了因拍摄角度引起的倾斜和失真问题
-
强度变换(Intensity Transformation)
目的:增强图像的对比度
,为后续任务提供更清晰的边缘
与物体分界线
。- 直方图均衡化(Histogram Equalization):均衡像素的分布,突出重要视觉特征。
- 伽马校正(Gamma Correction):调整图像的亮度,修复过暗或过亮区域。
-
单应性变换(Plane-to-Plane Homography)
目的:校正因相机拍摄角度
引起的图像倾斜
和投影变形
问题。- 利用地面平面和垂直建筑平面的几何特性,对图像进行投影变换。
- 将带有倾斜感的建筑物拉直,使其在图像中看起来更加正立。
视觉改进:从左图到右图,光照和建筑物边界的清晰度明显提高
,图像大部分噪声消除
,例如色彩均衡和锐化效果。
建筑形状拉直:预处理后的图像中,建筑物看上去更加对齐
,并且轮廓(如建筑的边缘和顶部点)更易于识别
预处理步骤对语义分割的影响
左图(a):未经处理的原始街景图像
(来自 Google Street View)。
右图(b):未经预处理情况下
的语义分割结果
,展示了算法在分割建筑物区域时的失败案例
左图 (a):显示经过伽马校正
(Gamma Correction)后的预处理图像,目的是改善图像亮度和对比度
。
右图 (b):展示了在应用预处理后
,语义分割的改进结果。图示中不同颜色代表语义分割后的分类结果,例如建筑物、草地、天空等。
定义感兴趣的区域
图6中的分割是令人满意的;然而,相邻的建筑被组合成一个单一的连接组件
(都是同一个连接子区域的一部分)
高度估计的下一步是识别建筑物子区域中的最高点。然而,当相邻的建筑组合成一个连接的组件时,最高点可能属于错误的建筑。为了帮助避免选择属于不正确建筑物的点,开发了以下水平搜索区域识别算法。
红色闭合线
代表建筑物的实际轮廓的俯视投影
,提供了与视线方向相关的边界信息
。
所有分割点
显示了建筑边缘在该坐标系下的表现,是高度提取过程中最核心的数据来源
绿色直线
代表了摄像机视线方向
,直接与目标建筑进行对准。
用于定义建筑物的中心线,对应建筑投影区域的主要方向
。
蓝色虚线三角形
表示建筑物的感兴趣区域投影范围,可根据相机视角范围(Field of View, FOV)定义。
角度范围为
θ
m
i
n
\theta_{min}
θmin ~
θ
m
a
x
\theta_{max}
θmax,分别为感兴趣区域的两侧边界
(a) 语义分割结果:显示经过语义分割模型
处理后的街景图像,图像中使用不同颜色表示各语义类别(如建筑物、道路、天空等)。
(b) 提取的搜索区域:表示从语义分割结果中提取的感兴趣区域
(搜索区域),主要聚焦于与建筑物相关的部分,为后续建筑高度
估算奠定基础。
建筑物轮廓提取和顶点检测
(a) 最大连通区域 (Largest connected component):提取了被语义分割所得的建筑物区域中最大的连通区域
,排除了无关区域。
白色区域代表建筑物,黑色区域则为背景或被过滤掉的小连通区域。
只保留覆盖面积最大的连通区域,以确保目标区域的完整性,同时消除语义分割时可能的误分类噪声
(b) 建筑轮廓与顶部点 (Building contour and top points):基于最大连通区域,进一步提取建筑轮廓并标注建筑的顶部点
,为后续的高度计算提供关键数据。
黑色线条显示建筑物的轮廓线,是通过对最大连通区域进行边缘检测获取的。
图中标注了两个点:
红色点
:建筑物的一个参考顶点,可能是初步提取的最高点。
黄色点
:最终确定的建筑物最高点,用于估算建筑高度。
建筑高度估算的两步关键流程
(a) 搜索区域与顶点标注
背景
: 输入图像经过语义分割后,在图中使用不同颜色表示不同区域(如道路、天空、建筑等)。
黄色和紫色垂直线
: 界定了感兴趣的搜索区域,表示专业算法关注的建筑物宽度范围。
黑色轮廓
: 表示算法识别出的建筑物边界线,用于高度估算的基础。
浅蓝圆点
: 标记了建筑物的最高点,用于估算高度的顶部点位置。
(b) 高度估算结果
绿色水平线
: 对应建筑物的顶部轮廓线,用于估算高度的上界。
红色水平线
: 表示建筑物的底部线,通常与地面或一层的标准高度对齐。
黄色和紫色垂直线
: 对应搜索区域的左右边界,与左图 (a) 保持一致。
数字“7.596”
: 表示算法根据顶部和底部线的位置,结合摄像机参数估算出的建筑物实际高度
。
流程如下:
- 语义分割与目标区域提取:
输入的街景图像首先经过语义分割
,标注出建筑、天空、地面等不同类别,并生成分割掩模(如(a) 图所示)。
检测感兴趣区域的关键部分
,定义上边界
和下边界
,排除非建筑部分(如天空和道路)。 - 搜索区域划分与轮廓标记:
垂直方向上通过黄色
和紫色线
,划定建筑物的搜索范围,确保建筑物的完整性。
利用轮廓检测技术提取建筑物的边界
,并标记建筑物的最高点
(蓝色圆点)。 - 实际高度估算:
在右图(b) 对应的实际图像中,绘制顶部线(绿色)
和底部线(红色)
。
借助建筑物在图像中的位置、高度像素差异
以及摄像机参数
,利用几何投影关系计算建筑物的实际高度。
最终结果以数值形式显示(如“7.596”)
平面单应性变换和校正
(a) 原始输入图像,未经任何处理的街景视图;
(b) 经平面单应性变换(plane-to-plane homography)和校正后的图像,解决了建筑物倾斜和畸变的问题
通过平面映射算法(plane-to-plane homography),解决由于相机视角产生的
透视失真问题
, 建筑物得以“拉直”,变得垂直于图像。
校正后消除了由于拍摄角度导致的透视变形。
整体图像的框架和比例更规则,为后续的语义分割奠定了良好基础。
(c ) 基于校正图像生成的语义分割结果,显示了不同语义类别标记的像素区域
通俗解释:平面单应性变换(Homography Matrix)及应用
在建筑高度估算中,原始图像通常会因为相机的拍摄角度(pitch值
)不同而发生透视失真。
- 例如,拍摄高楼时,街景相机通常会向上倾斜。这会导致建筑看起来像是“向后倾斜”的样子,使图像中的线条并非垂直。
- 为了计算建筑高度,我们需要把这些倾斜的图像矫正为“正视图”,就好像是在建筑正前方以零角度拍摄的一样
什么是平面单应性 (Homography)?
单应性是描述同一平面上
两幅图像之间几何关系的数学模型。
- 假设你从
两个不同角度
拍摄同一平面
(例如建筑正面),图像会因拍摄角度不同而呈现变化(透视失真)。 - 单应性变换可以
调整一幅图像
,将它“对齐”到另一幅图像,使两幅图像的内容匹配(同步)。
如何实现单应性变换?
单应性用 3×3的矩阵
H
H
H 表示,它将一个图像的点映射到另一个图像中对应的点
p
′
=
H
⋅
p
p' = H \cdot p
p′=H⋅p
- p p p:在原图像中的一点(用坐标 x , y x, y x,y 表示);
- p ′ p' p′:在变换后新图像中的对应点;
- H H H:单应性矩阵,描述两幅图像之间的几何关系。
过程解释:
- 原始问题:相机倾斜的影响
在街景图像中,建筑由于相机的拍摄角度可能会产生倾斜或畸变
,这会破坏建筑的真实比例和高度
。
例如,当相机仰视拍摄时,建筑上部会显得比下部更小
,这种失真会导致高度估算不准确。 - 如何校正?使用单应性变换
首先,我们需要两幅图像:- 一个初始倾斜角度(有pitch)的图像;
- 一个假设为零倾斜角度(无pitch)的标准图像。
- 然后,我们选取两幅图像中对应的点对(例如同一个窗户的角点)。
- 只需选取至少 4 对点,这些点经过计算可以生成一个单应性变换矩阵 H H H
- 使用矩阵
H
H
H,可以将倾斜图像的所有像素点“投影”为
零倾斜角度
的标准视图,就像是从建筑的正面直接拍下来的效果
使用校正模型对建筑物实际高度估算结果的影响
(a) 搜索区域的分割结果,通过语义分割模型标注出建筑物的相关区域;
(b) 使用校正模型的高度估算结果,考虑透视失真的校正后,计算出较为准确的建筑物高度 (47.772)
(c ) 未使用校正模型的高度估算结果,未考虑透视失真,仅通过简单像素高度
计算出的高度值 (28.273)
校正模型作用:
- 修复**拍摄角度(如仰视拍摄)**导致的建筑顶部“远小近大”的透视失真问题。
- 使用
基于校正因子的数学模型
(关于校正模型的详细请查看论文),将图像中的像素高度正确映射到实际高度。
自动选择相机仰视角度 (pitch)
自动选取合适的仰视角度是为了使建筑物的顶部
能够完全出现在图像
中,同时去除冗余部分(如天空)
流程开始:
- 设置初始 pitch 值为 0
初始化
相机的仰视角度 0°,并将此角度作为初始输入。 - 图像捕获与分割
在当前 pitch 值
下,获取图像并进行语义分割
,以识别建筑物区域
以及判断建筑物是否完全显示
。 - 判断顶端连通区域是否出现在图像顶部
如果分割结果表明建筑物的连通区域
延伸到顶部,说明当前视角适合拍摄
。流程结束。
如果没有延伸到顶部,说明相机的视角需要调整。 - 增加 pitch 值
以一定的步长
增加pitch 值
(通常为固定的角度,例如 5° 或 10°),重新获取图像
并重复前述检查。 - 最高 pitch 值限制
如果 pitch 增加到最大值
时仍无法满足要求,说明无法获取到完整的建筑物顶部区域。流程停止
,并显示“No pitch value found”。 - 使用已有图片
若未找到顶端对应的 pitch 值,可以选择使用最接近的
下载图像进行后续处理
从OpenStreetMap (OSM) 数据中提取建筑的边界轮廓以及节点信息
(a) 建筑边界在 OSM 中的整体视图
(b) 建筑边界上的一个具体节点,作为后续分析的关键地理参考点
相机到建筑物水平距离的几何模型
Camera (相机位置):
表示相机在拍摄场景中的位置,作为坐标原点。使用相机参数(如焦距)结合几何关系估算建筑物的相对距离和高度。
Building(建筑物):
建筑物是目标对象,其底部靠近地面,被投影到不同的距离平面。
虚线框(黄色矩形框):
表示建筑物在相机视场中的投影视图
,模拟建筑在二维图像空间的数据表示。
关键距离:
红色箭头
d
m
d_m
dm:表示 实际测量的相机到建筑物的距离
,通过平面测量或 GPS 数据获得。
蓝色箭头
d
′
d'
d′:表示 相机到建筑物的投影距
离,是一个在计算中应用的几何约束距离
。
绿色箭头
:垂直方向上的辅助距离,用于连通不同设施或几何关系
高度补正:
通过蓝色箭头
d
′
d'
d′ 代替红色箭头
d
m
d_m
dm 参与计算,消除相机角度对建筑高度估算的误差
高度计算
公式:
h
^
b
=
h
u
⋅
d
′
/
f
+
h
c
\hat{h}_b=h_u\cdot d^{\prime}/f+h_c
h^b=hu⋅d′/f+hc
- h ^ b \hat{h}_b h^b: 估算的建筑高度 (Estimated Building Height)。
-
h
u
h_u
hu: 建筑最高点相对于图像的中线(水平中线)所占的
像素高度
,表示为像素单位的垂直距离 -
d
′
d'
d′: 相机到建筑的
水平距离 (Projected Distance to the Building)
- f f f: 相机的焦距 (Focal Length)
-
h
c
h_c
hc: 相机距地面的高度, 表示相机安装点到地面的固定高度,即
相机本身的基础高度
,通常由相机持有者(如人或车辆)的高度
决定,为一个常量
效果
展示了针对不同类型住宅建筑的高度估算结果示例
(a) 与 (b):高层公寓建筑 (apartment buildings)
在每张图片顶部显示了估算出的建筑高度值,分别为 44.451 米和 35.401 米。
两栋建筑均为城市中常见的高层公寓楼
,模型通过远程拍摄图像对其高度完成了估计。
(c ) 与 (d):低层住宅 (houses)
图片展示了独立式住宅的高度估算值,分别为 9.152 米和 9.154 米。
这些建筑大多为二层普通民用住宅
,是常见的低矮建筑。
针对不同类型的 非住宅建筑(Non-residential Buildings) 的高度估算结果可视化示例
(a) 办公楼 (Office Building)
估算高度为 21.683 米,属于较高类型的建筑。
(b) 小型办公建筑 (Small Office Building)
估算高度为 8.714 米,是一种相对较低的办公场所建筑。
(c ) 零售店 (Retail Store)
估算高度为 12.069 米,为常见的中型商业建筑高度。
(d) 餐厅 (Restaurant)
估算高度为 6.315 米,为低矮的单层小型商业建筑
两种算法**(BHEDC 和 iBHEDC)** 在建筑高度估算任务中的 绝对误差分析结果:
- iBHEDC
显著优于
BHEDC
iBHEDC(改进后的建筑高度估算算法) 中各项改进对估算性能提升的贡献
Image preprocessing(图像预处理):
对误差减少的贡献为 0.13 米
。
通过改进图像预处理步骤,优化了输入数据质量,对误差减少的贡献较小。
Search region identification(搜索区域识别):
对误差减少的贡献为 1.27 米
。
这是贡献最大的改进模块,表明通过更精确地定位建筑的搜索区域,显著提高了高度估算的准确性。
Post-homography height correction(单应性后高度校正):
对误差减少的贡献为 0.81 米
。
单应性(Homography)变换后进行校正,有效修正了几何偏差,显著减少了误差。
Projected camera-building distance(投影相机-建筑距离校正):
对误差减少的贡献为 0.34 米
。
通过精确估算相机与建筑之间的投影距离,纠正了距离测量误差,带来了适度的性能提升
挑战
该图说明由于相机到建筑物
的距离测量错误
,可能导致建筑高度估算出现偏差的问题
两条测量线:
红色线
:错误的距离测量线
表示从相机到建筑“入口”的距离,这是假设中的错误测量路径。
绿色线
:正确的距离测量线
表示从相机到建筑主体的基底(最靠近主结构的点)的距离,这是准确的测量路径
质疑
- 数据集是否
足够多样化
以涵盖不同类型的建筑和城市环境? - 数据集中是否包含
足够多的复杂场景
(如遮挡、光照变化)以验证算法的鲁棒性? - 在实际应用中,街景图像的
质量和分辨率
可能会影响算法的表现,这一点是否被充分考虑? - 系统在
实时应用
中的表现如何,例如在动态城市环境
中的部署?