当前位置: 首页 > article >正文

Paper -- 建筑物高度估计 -- 使用街景图像、深度学习、轮廓处理和地理空间数据的建筑高度估计

在这里插入图片描述

基本信息

论文题目: Building Height Estimation using Street-View Images, Deep-Learning, Contour Processing, and Geospatial Data
中文题目: 使用街景图像深度学习轮廓处理地理空间数据的建筑高度估计
作者: Ala’a Al-Habashna
作者单位: 加拿大统计局特别商业项目中心数据探索和集成实验室
会议名称: 2021 18th Conference on Robots and Vision (CRV) (第18届机器人与视觉会议)
论文发表时间: 2021年


摘要

  • 本文提出了一种使用卷积神经网络(CNNs)图像处理技术街景图像自动估计建筑高度的算法(及其开源实现)。
  • 该算法还利用了可从不同来源获得的地理空间数据
  • 该算法最终将用于丰富加拿大统计局发布的开放建筑数据库(ODB)

背景

  • 现有问题
    建筑高度信息对于丰富二维建筑平面图和增强分析很重要
    传统的LiDARSAR技术成本高,难以大规模应用

  • 研究动机
    开放街景图像的快速普及为建筑高度估计提供了新思路
    需要一个开源、低成本且可扩展的解决方案


数据集和评价指标

  • 测试数据
    在加拿大渥太华市20个建筑物上进行测试
    建筑高度范围:4米到54米

  • 评估结果
    平均估计误差2.32米
    85%的建筑估计误差在4米以内
    50%的建筑估计误差在2米以内


方法

在这里插入图片描述
这是一个系统框架图, 展示了BHEDC (Building Height Estimation using Deep-learning and Contours)算法的高层级流程图。

描述了从获取街景图像到最终估计建筑高度的完整流程。整个流程包含6个主要步骤:

  • 第一步:从Google Street View静态API获取目标建筑物的街景图像
  • 第二步:使用基于深度学习的语义分割进行建筑物识别
  • 第三步:对分割后的图像进行进一步处理,获取建筑物在图像中的像素尺寸信息
  • 第四步:从OpenStreetMap等数据源获取建筑物的平面图信息
  • 第五步:利用获取的平面图数据,计算相机到建筑物实际距离
  • 最后一步:结合前面获得的所有信息,使用相机投影模型计算建筑物的实际高度

建筑物图像尺寸提取的具体工作流程

在这里插入图片描述

建筑物图像尺寸提取的具体工作流程:

  • 使用语义分割识别图像中的建筑物
    使用深度学习模型对输入的街景图像进行语义分割,将建筑物区域与其他区域分开。
  • 应用图像阈值处理获取建筑物像素
    对分割结果进行二值化处理,得到建筑物区域的二值图像
  • 提取图像中最大的连通分量
    在二值图像中找出最大的连通区域,这通常代表主要目标建筑物
  • 提取轮廓
    从最大连通分量中提取建筑物的轮廓信息
  • 近似轮廓
    对提取的轮廓进行简化和平滑处理,减少噪声影响。
  • 获取近似轮廓中的最高点
    在处理后的轮廓中确定建筑物顶部的位置。
  • 寻找建筑物的底线
    确定建筑物在图像中的底部边界线
  • 计算建筑物在图像中的近似高度
    根据顶点底线计算建筑物在图像中的像素高度

理想的街景图像

在这里插入图片描述
展示了一张通过Google街景静态API获取的加拿大渥太华市的商业建筑物图像样本

这张图片是论文中用来说明算法输入数据的示例图像质量清晰,视角正面,建筑轮廓完整,这些特点都有利于后续的图像处理步骤:

  • 便于进行语义分割,清晰区分建筑物与背景
  • 建筑物边界明确,有助于轮廓提取
  • 建筑物底部和顶部都可见,便于计算高度
  • 图像中包含了地面参考点,有助于确定建筑物的底线

语义分割的结果展示

在这里插入图片描述
绿色区域:表示主要建筑物区域
紫色区域:表示天空部分
浅蓝色区域:表示人行道
灰色区域:表示其他环境元素
黑色区域:表示图像底部未使用的部分

这个语义分割结果显示:

  • CNN成功地识别并分割出了建筑物的主体部分(绿色区域)
  • 建筑物的边界轮廓清晰可见
  • 与周围环境(天空、人行道等)的分界明确
  • 分割质量较高,没有明显的错误分类现象

对语义分割结果进行图像阈值处理和连通分量提取后的结果图像

在这里插入图片描述
这是一个二值图像:
白色区域:代表建筑物的主体部分
黑色区域:代表背景和其他非建筑物区域

处理过程:

  • 阈值处理:
    将语义分割后的建筑物区域(之前的绿色区域)转换为白色
    将其他所有区域(天空、人行道等)转换为黑色
    创建了清晰的二值化图像

  • 连通分量提取:
    从二值图像中提取最大的连通区域
    移除了可能存在的小型噪声区域
    保留了完整的建筑物轮廓

这一步处理的意义:

  • 简化了后续的轮廓提取过程
  • 确保只处理主要目标建筑物
  • 减少了干扰因素的影响
  • 为计算建筑物高度提供了清晰的轮廓基础

找到建筑物的顶点

在这里插入图片描述
黑色粗线:表示建筑物的轮廓线
蓝色和浅蓝色圆点:标记了建筑物的最高的两个点

  • 对分割结果提取建筑物的轮廓(contour)
  • 对轮廓进行近似处理(approximation)
  • 从近似后的轮廓中提取最高的两个点
    *这些最高点代表了建筑物在图像中的屋顶线(roofline)

摄像机到建筑物的距离是怎么得到的?

在这里插入图片描述
该图展示了OpenStreetMap (OSM)中建筑物的俯视图表示

(a) 左侧图像显示了建筑物在OSM中的边界表示:

橙色区域:表示建筑物的完整平面轮廓
白色线条:表示周边道路或其他地理要素
灰色背景:表示地图底图

(b) 右侧图像突出显示了建筑物边界上的一个节点:

浅粉色区域:表示建筑物的平面轮廓
橙色圆点:表示建筑物边界上的一个节点(顶点)
白色线条:表示周边道路或其他地理要素
灰色背景:表示地图底图

这张图的意义:
– 展示了OSM中建筑物的矢量数据表示方式
– 说明建筑物边界是由一系列节点构成的多边形
– 显示了用于定位和测量关键节点位置
– 展示了建筑物在地理信息系统中的空间表达

摄像机到建筑物的距离是怎么得到的?

  • 从OSM(OpenStreetMap)获取建筑物轮廓数据:

    • 首先使用Nominatim工具通过地址或名称获取建筑物的位置信息,包括经纬度、记录类型和OSM ID
    • 然后使用OSMPythonTools API根据OSM ID获取建筑物轮廓数据
    • 轮廓数据包含建筑物中心点的经纬度以及建筑物边界上各个节点的经纬度
  • 获取摄像机位置:

    • 从Google Street-View API下载图像时会同时下载一个元数据文件
    • 该元数据文件中包含了摄像机的位置信息
  • 计算距离:

    • 将建筑物边界节点构建成一个多边形
    • 根据摄像机位置建筑物多边形的位置信息, 计算摄像机到建筑物的实际距离
    • 这个距离信息后续会被用在摄像机投影模型中,与图像中提取的建筑物高度等信息一起,用来估算建筑物的实际高度。

相机投影模型

在这里插入图片描述
坐标系统:
( x , y ) (x, y) (x,y):表示图像平面坐标系
( x ′ , y ′ , z ′ ) (x', y', z') (x,y,z):表示世界坐标系
O O O:表示图像坐标系原点
O ′ O' O:表示世界坐标系原点

建筑物表示:
右上方的蓝色立方体:表示实际建筑物
左下方小方框中的蓝色立方体:表示图像平面上的建筑物投影
h b h_b hb:表示实际建筑物的高度
h u h_u hu:表示图像平面上建筑物的投影高度

相机位置:
图中间的相机图标表示拍摄位置
d ′ d' d:表示相机到建筑物的实际距离

投影模型的工作原理:
通过相似三角形原理建立实际高度和投影高度的关系
– 利用已知的相机参数(焦距等)
– 结合从OSM获取的相机到建筑物的实际距离( d ′ d' d)
– 通过图像中测量的投影高度( h u h_u hu)
最终计算出建筑物的实际高度( h b h_b hb)


计算建筑物实际高度的公式
这个公式是基于针孔相机模型推导出来的,能够有效地将二维图像中的信息转换为三维世界中的实际高度值
h ^ b = h u ⋅ d ′ / f + h c {\hat{h}_b=h_u \cdot d^{\prime}/f+h_c} h^b=hud/f+hc

h ^ b \hat{h}_b h^b:表示估算的建筑物实际高度(Building height)
h u h_u hu:表示图像中测量的建筑物像素高度(Height in pixels)
d ′ d' d:表示相机到建筑物的实际距离(Distance)
f f f:表示相机的焦距(Focal length)
h c h_c hc:表示相机高度(Camera height):
– 因为相机不是从地面拍摄, 需要将相机本身的高度考虑进去
– 相机高度在街景采集车上约为2.7米


高度估算结果

在这里插入图片描述
在图像右上角显示了估算得到的建筑物高度:22.816米
这个数值是通过前面介绍的相机投影模型计算得出

在这里插入图片描述
(a) 左侧图像:估算高度为48.052米
(b) 右侧图像:估算高度为44.044米

这些结果说明该系统能够:

  • 适应不同建筑风格
  • 在有树木等遮挡物的情况下仍能进行估算
  • 对相似高度的建筑物给出一致性的估算结果
  • 在真实街景环境中有效运作

建筑物高度估算误差的经验累积分布函数

在这里插入图片描述
展示了建筑物高度估算误差的经验累积分布函数(ECDF, Empirical Cumulative Distribution Function)图

横轴:表示估算误差(Estimation error),单位为米(m),范围从0到6米
纵轴:表示ECDF值,范围从0到1,表示累积概率

  • 曲线特征:
    呈现阶梯状上升趋势
    0-2米误差范围内上升较快
    2-4米误差范围内上升速度减缓
    4米以后趋于平缓

  • 关键观察点:
    约50%的估算误差在2米以内
    约75%的估算误差在3米以内
    约90%的估算误差在4米以内
    几乎所有估算误差都在6米以内

这个图表的意义
直观展示了系统估算精度的分布情况
表明该方法具有良好的估算准确性
大多数估算结果的误差都在可接受范围内
验证了该系统在实际应用中的可靠性


存在问题

在这里插入图片描述
这张图片说明了系统在进行建筑物高度估算时面临的主要挑战之一:植被遮挡

  • 植被遮挡会影响建筑物轮廓的完整性
  • 可能导致建筑物高度测量不准确
  • 增加了图像处理和高度估算的难度
  • 需要特殊的处理策略处理遮挡问题

其他问题:

  • 在大城市中识别相邻建筑物的位置问题,正在开发算法使用地理空间数据和建筑足迹来解决
  • 需要消除有时出现的分割错误(如天空颜色接近建筑物颜色的情况)
  • 需要处理相机与建筑物之间存在锐角的情况
  • 植被遮挡问题,有时会使建筑物底边难以检测

http://www.kler.cn/a/420688.html

相关文章:

  • 经典C语言代码——part 19(链表)
  • 嵌入式蓝桥杯学习1 电量LED
  • Linux详解:文件权限
  • 408——数据结构(持续更新)
  • 【模电】常见电路参数计算
  • 53 基于单片机的8路抢答器加记分
  • React.memo 和useMemo 的区别
  • Python 调用 Umi-OCR API 批量识别图片/PDF文档数据
  • 【前端】小程序实现预览pdf并导出
  • Argon2-cffi:Python中的密码学哈希库
  • AI 计算基础设施的战略转折点分析
  • C++ 变量和常量:开启程序构建之门的关键锁钥与永恒灯塔
  • Go-MediatR:Go语言中的中介者模式
  • 基于 Vite 封装工具库实践
  • ABE 中的隐藏属性:DIPPE(去中心化内积谓词加密)
  • linux 压缩命令,压缩a目录,但是不压缩a目录下的b目录,zip命令
  • termius mac版无需登录注册直接永久使用
  • Mybatis 复习
  • MySQL 数据库学习教程二:深入 MySQL 数据库世界
  • uniapp进阶技巧:如何优雅地封装request实例
  • 《嵌入式硬件设计》
  • 架构学习第五周--Kubernetes(一)
  • python基础(六)
  • 依赖注入之登录验证(Java EE 学习笔记08)
  • [JuMP.jl] 线性规划
  • 107.【C语言】数据结构之二叉树求总节点和第K层节点的个数