从车道级导航说起
前几天在B站看到某地图推出车道级导航功能,可以高清展示真实道路场景,显示当前道路的车道数量、地面标识标线、出入口、特殊车道等。同时,结合高清信号,还可以实时显示用户的车道位置。具体的导航画面如下图所示:
对于复杂的立交桥,则更加直观:
当然,说这些内容不是给地图APP做广告,而是想由表及里地分析这种技术背后的原理。作为一个三维GIS从业者,我比较好奇的是这种车道级道路模型是怎么生成的。坦白说,刚开始我有点迷惑,毕竟我们常用的路网数据不可能生成这么精细的模型。不过,只要把思路跳出GIS圈子,也就豁然开朗了。
现在各大汽车厂商都在研发自动驾驶技术,而自动驾驶技术的一个重要组成部分就是高精度地图。高精度地图的制作包括四个步骤:
地图采集 由装备有激光雷达、相机、GPS、IMU等传感器的数据采集车完成,采集的内容包括:
激光点云、图像、GPS数据、IMU数据等。
地图制作 对采集的数据进行加工,简单来说就是通过激光雷达扫描整个街道,建立整个街道的三维模型。
地图标注 在点云地图的基础上,标注出车道线信息、交通标志信息、红绿灯信息等,得出道路的结构化信息。
地图保存 把标注好的信息保存为固定的格式。
由此可见,高精度地图中包含的道路信息是远高于一般的路网数据的,由高精度地图生成车道级道路模型是完全没有问题。至此,我们的疑问就解开了,那我们就探讨下一个问题:这种模型与实景三维模型,如倾斜摄影测量模型,有什么区别?
其实我觉得最大的区别在于表达上:
倾斜摄影测量用三角面片作为图元,整个模型就是一张巨大的三角网
车道模型则是以矢量存储,用矢量面的集合来表达三维对象
用一系列面的集合来表达三维实体,在几何造型领域中,称为B-Rep表示法。相比较于三角网,B-Rep的表达更加紧凑,可有效节省模型存储的数据量。
经常看我文章的读者应该知道,我一直说倾斜摄影测量并不是一种好的建模技术。原因在于:
倾斜摄影测量生成的模型中有大量的变形,近看的视觉效果不好
倾斜摄影测量生成的模型数据量非常大,三维引擎无法加载超大场景
因此,我一直认为现在的倾斜摄影测量技术不会长久,肯定会被更新的技术所取代。倾斜摄影测量用图像建模:先由图像匹配生成点云,然后对点云构网生成三维模型。可以认为倾斜摄影测量是由点作为基元来完成三维场景的建模。然而,图像中不仅包含点,还包含线、面。线是点的聚合,而面是线的聚合。点是零维,线是一维,面是二维。这种更高维度的几何对象所包含的信息更加丰富,也更加适合作为三维重建的基元。
然而,在图像中检测线和面具有其本身的复杂性,这也是为什么没有基于线和面建模的产品推出。但是,对于基于线的三维重建却早已有人在探索,下面就和大家分享基于线特征的三维重建相关进展,希望能给大家带来一些启迪。
基于直线的三维重建
从二维图像重建出三维场景,首先要解决的就是计算每一张图像对应的相机参数,包括内参和外参,也就是运动恢复结构算法(SfM)。然后,需要计算图像中二维几何特征的三维坐标,以倾斜为例,就是计算图像像素点的三维坐标,即生成密集点云的过程。
延伸到基于直线的三维重建,首先也要恢复每一张图像的相机参数,但这里的计算就不再是基于图像特征点,而是基于图像特征线进行计算。与特征点不同,基于特征线的SfM算法并非基于坐标进行计算,而是基于直线的方向。简单来说,就是在图像中检测直线,然后对直线进行匹配,找到相邻图像中的同名直线,最后根据同名直线在各图像中的方向来计算相机参数。
对基于直线的运动恢复结构算法感兴趣的读者可以去看Github项目:GitHub - ySalaun/LineSfM,其主页也有算法对应的论文。
有相机参数就可以计算图像中各直线的三维坐标,一条直线有起点和终点,计算起点和终点的坐标也就完成直线的三维重建。但是这里存在一个问题:成像过程存在畸变,两张相邻图像中检测到的同名直线,其起点和终点并不一定相互对应。这样情况下,即使知道相机参数,也难以用三角测量来准确计算直线的端点坐标,这也是直线三维重建的核心难题之一。
利用直线做三维重建的研究也有一个开源项目:GitHub - manhofer/Line3Dpp: Line3D++ - Multi-View Stereo using Line Segments。不过,这个项目并没有用直线来计算相机参数,仍然用特征点来计算相机参数,然后再重建图像特征线。其实验中一些截图如下,对于一栋建筑物重建一万多条线段,可以大致看出建筑物轮廓:
当然,图中的实验结果明显离实用还有一段距离,大家也不要失望。毕竟做研究就是不断向前探索,后人在前人的基础上不断迭代,算法才能慢慢走向实用。况且这几篇文章的时间都比较早,距今已经好几年过去,肯定有一定的局限性。
另外一种直线重建的思路是从点云中提取直线,这里的点云可以是图像匹配生成的密集点云,也可以是扫描得到的激光点云。在ICLR 2021的会议上,老牌强校苏黎世理工就有一篇文章是从点云中重建线框模型,并且,从论文中的实验可以看出,算法的质量还不错:
一般而言,这种重建质量较高的算法,其实现肯定不是传统方法,而是基于深度学习来做的。果不其然,其算法架构图如下。从图中可以看出,整个算法的逻辑还是比较清晰的。先从点云中提取位于角落的一个个点云块(patch),然后在每一个patch中预测一个顶点,代表模型的一个角点,最后把这些角点连起来生成线框模型。
这篇文章所用的点云显然是激光点云,扫描质量很高,且分割的非常干净,所以能够取得比较理想的结果。可惜,算法还是面向小型对象,缺少对大型对象重建验证,如建筑物等。论文名为:《PC2WF: 3D Wireframe Reconstruction from Raw Point Clouds》,有兴趣的读者可以去深度了解。
直线检测算法的研究进展
从上一节中几篇论文中不难看出,较新的文章中算法完成度更高。这并不是说现在的人比以前的人更加聪明,而是刚好卡在一个时间节点两边:深度学习应用。前两篇文章都是采用传统方法做的,当时都面临一个很难的问题:在图像中检测直线。虽然有诸如霍夫变换、LSD、ED-LINE这些算法,但鲁棒性都比较差。随着大家把深度学习引入直线检测研究中,取得的进展还是比较明显的,以下是我从这两年的文章中找到截图:
当然,除了在图像中检测直线,还有人研究在点云中检测直线,以下就是其论文实验中的一些截图,看起来是不是比Line3D进步很多呢?当然,两种方法的实现不同,Line3D是从图像重建直线,而这是从点云中检测直线,并没有可比性。不过,单从实验结果看,从点云中提取的直线更加完整,鲁棒性应该更强。
总结与展望
基于特征点的重建和基于特征线的重建是两条不同的道路,两者也各有优劣。目前来看,基于特征点的重建方法更加鲁棒,这也是其得以大规模推广应用的原因。但另一方面,点云生成的模型冗余度非常高,且包含大量的变形。基于特征线的重建方法能够以更加紧凑的方式表达三维模型,解决现在三维模型数据量爆炸的难题,但目前的发展还处于早期,离实用还有一段距离。
自从毕业之后,我就不再做三维重建的方向,不过对于该领域的研究进展一直有持续关注,也算是心中的一个执念了。撇开具体的应用不谈,我觉得现在三维GIS值得研究的方向主要有三点:
建模方法:
探索倾斜摄影测量之外的大场景建模方法,从根本降低三维模型数据量
数据轻量化:
优化三维模型,缓解三维模型数据量暴增的问题
数据可视化:
开发能够支撑超大场景的三维引擎
其中,第(1)点可能最难,需要长期的探索和研究;第(3)点需要有良好的团队,从数据存储、组织、调度、渲染等方方面面进行优化,方才可能取得一定的成果;只有第(2)点的门槛最低,也是目前比较容易取得突破的方向,但终归是治标不治本,再好的优化算法也是有局限性的,不可能解决根本问题,否则就不是优化算法,而是建模算法了。
文章转自:GIS启示录
培 训 + 考 证
我们精心汇总了一些相对简单
培训考核通过便可获取的证书
中国测绘网新媒体中心
cehui8@qq.com
商务合作/微信 214979525
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.