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

news2024/11/29 8:00:49

在这里插入图片描述

基本信息

论文题目: 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.coloradmin.cn/o/2249612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何为 ext2/ext3/ext4 文件系统的 /dev/centos/root 增加 800G 空间

如何为 ext2/ext3/ext4 文件系统的 /dev/centos/root 增加 800G 空间 一、引言二、检查当前磁盘和分区状态1. 使用 `df` 命令检查磁盘使用情况2. 使用 `lsblk` 命令查看分区结构3. 使用 `fdisk` 或 `parted` 命令查看详细的分区信息三、扩展逻辑卷(如果使用 LVM)1. 检查 LVM …

命令行使用ssh隧道连接远程mysql

本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…

Vatee万腾平台:以数字之名,筑企业未来之路

在当今这个瞬息万变的数字化时代,企业若想在激烈的市场竞争中脱颖而出,就必须紧跟时代步伐,实现全面数字化转型。而Vatee万腾平台,正是这样一款能够帮助企业迈向数字化未来的强大工具。 Vatee万腾平台,作为数字化转型…

深度学习——损失函数与BP算法

一、损失函数 1. 线性回归损失函数 1.1 MAE损失 MAE(Mean Absolute Error,平均绝对误差)通常也被称为 L1-Loss,通过对预测值和真实值之间的绝对差取平均值来衡量他们之间的差异。MAE的公式如下: 其中: 是…

机器学习-决策树(ID3算法及详细计算推导过程)

决策树是一种基于树结构进行决策的机器学习算法 ,以下是关于它的详细介绍: 1.基本原理 决策树通过一系列的条件判断对样本进行分类或预测数值。它从根节点开始,根据不同的属性值逐步将样本划分到不同的分支,直到到达叶节点&…

【AI系统】LLVM 架构设计和原理

LLVM 架构设计和原理 在上一篇文章中,我们详细探讨了 GCC 的编译过程和原理。然而,由于 GCC 存在代码耦合度高、难以进行独立操作以及庞大的代码量等缺点。正是由于对这些问题的意识,人们开始期待新一代编译器的出现。在本节,我们…

浅谈网络 | 应用层之HTTPS协议

目录 对称加密非对称加密数字证书HTTPS 的工作模式重放与篡改 使用 HTTP 协议浏览新闻虽然问题不大,但在更敏感的场景中,例如支付或其他涉及隐私的数据传输,就会面临巨大的安全风险。如果仍然使用普通的 HTTP 协议,数据在网络传输…

基于 JNI + Rust 实现一种高性能 Excel 导出方案(上篇)

每个不曾起舞的日子,都是对生命的辜负。 ——尼采 一、背景:Web 导出 Excel 的场景 Web 导出 Excel 功能在数据处理、分析和共享方面提供了极大的便利,是许多 Web 应用程序中的重要功能。以下是一些典型的场景: 数据报表导出&am…

最新Linux下使用conda配置Java23或17保姆教程(附赠安装包)

随着技术的不断进步,越来越多的开发者开始在Linux环境下进行Java应用的开发。Java 17作为长期支持版本(LTS),提供了许多新特性和性能改进。当然现在最新的是Java23,这个还作为实验版本未广泛使用。对于需要管理多个编程…

RHEL7+Oracle11.2 RAC集群-多路径(multipath+udev)安装步骤

RHEL7Oracle11.2RAC集群-多路径(multipathudev)安装 配置虚拟存储 使用StarWind Management Console软件,配置存储 dggrid1: 1g*3 Dggrid2: 1g*3 Dgsystem: 5g*1 系统表空间,临时表空间,UNDO,参数文件…

PyTorch 模型转换为 ONNX 格式

PyTorch 模型转换为 ONNX 格式 在深度学习领域,模型的可移植性和可解释性是非常重要的。本文将介绍如何使用 PyTorch 训练一个简单的卷积神经网络(CNN)来分类 MNIST 数据集,并将训练好的模型转换为 ONNX 格式。我们还将讨论 PTH …

VM Virutal Box的Ubuntu虚拟机与windows宿主机之间设置共享文件夹(自动挂载,永久有效)

本文参考如下链接 How to access a shared folder in VirtualBox? - Ask Ubuntu (1)安装增强功能(Guest Additions) 首先,在网上下载VBoxGuestAdditions光盘映像文件 下载地址:Index of http://…

CA系统(file.h---申请认证的处理)

#pragma once #ifndef FILEMANAGER_H #define FILEMANAGER_H #include <string> namespace F_ile {// 读取文件&#xff0c;返回文件内容bool readFilename(const std::string& filePath);bool readFilePubilcpath(const std::string& filePath);bool getNameFro…

【Git】Git 命令参考手册

目录 Git 命令参考手册1. 创建仓库1.1 创建一个新的本地仓库1.2 克隆一个仓库1.3 克隆仓库到指定目录 2. 提交更改2.1 显示工作目录中已修改的文件&#xff0c;准备提交2.2 将文件添加到暂存区&#xff0c;准备提交2.3 将所有已修改的文件添加到暂存区&#xff0c;准备提交2.4 …

【Linux系列】Chrony时间同步服务器搭建完整指南

1. 简介 Chrony是一个用于Linux系统的高效、精准的时间同步工具&#xff0c;通常用于替代传统的NTP&#xff08;Network Time Protocol&#xff09;服务。Chrony不仅在系统启动时提供快速的时间同步&#xff0c;还能在时钟漂移较大的情况下进行及时调整&#xff0c;因此广泛应…

数据库日志

MySQL中有哪些日志 1&#xff0c;redo log重做日志 redo log是物理机日志&#xff0c;因为它记录的是对数据页的物理修改&#xff0c;而不是SQL语句。 作用是确保事务的持久性&#xff0c;redo log日志记录事务执行后的状态&#xff0c;用来恢复未写入 data file的已提交事务…

【vue for beginner】Vue该怎么学?

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 vue2 和 vue3 Vue2现在正向vue3逐渐更新中&#xff0c;官方vue2已经不再更新。 这个历程和当时的pyt…

【Ubuntu 24.04】How to Install and Use NVM

参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发&#xff0c;开发自己的软件&#xff0c;例如&#xff1a;【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等&#xff0c;不管是您用来个人学习 还是公司研发需求&#xff0c;都相当合适&#xff0c;包您满…

Python轴承故障诊断 (21)基于VMD-CNN-BiTCN的创新诊断模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…