深度科普文:细数倾斜摄影数据的缺点

1. 引言

写这篇文章的起因是最近遇到一个使用倾斜摄影数据应标的三维可视化项目,业主认为倾斜摄影数据加载很卡,要求能浏览场景的时候能立刻显示出当前的场景最精细的模型,如下图1所示。其实这个问题遇到的次数还真不少,作为乙方尝试去解答这个问题也是一种进退两难的煎熬,因此在这里汇聚成文。
图1 谷歌地球上的倾斜摄影数据

2. 问题

2.1 问题的答案

先说一下笔者的结论,这个要求对于倾斜摄影数据来说是不可能实现的:

  1. 倾斜摄影数据的加载并不是卡,卡是性能问题,卡住了画面就会一动不动。实际上正常的倾斜摄影数据加载起来一点都不卡,浏览起来也非常流畅。
  2. 倾斜摄影数据的问题是其实是加载很慢,很难一下子加载到最精细的模型。但对业主来说,是不太了解这些的,只能直观的表达这就是很卡。
  3. 加载很慢的问题是没办法解决的,这里面的逻辑是这样的:
    1. 如果硬件资源(CPU、内存、GPU、显存等)允许,我们当然希望能一次性加载到内存/显存空间中进行渲染显示,这样只会在预加载数据的时候卡一次,渲染画面浏览操作的时候就完全不会卡。
    2. 但是这个方式对于倾斜摄影数据来说不可能的。一个倾斜摄影数据通常有上百G的数据量,但是目前还没有上百G的内存和显存,即使有GPU也不一定能保证渲染如此大数据量的画面不会卡。
    3. 为了解决这个问题,就诞生了一种名为多分辨率层次结构(Hierarchical Level of Detail, HLoD)的技术,具体来说就是将三维模型数据划分为多个层次,每个层次包含不同详细程度的模型;同时在渲染端根据观察者的位置和视角,动态选择最适合的模型细节,从而在保持高性能的同时提供高质量的视觉效果。
    4. 在三维图形渲染中为了保证流畅的性能,需要在1秒中渲染60次画面,专业说法就是要达到60帧。换算一下也就是渲染一次画面(简称为每一帧)最多只能1/60秒的时间。数据需要从磁盘中获取,假设磁盘IO的效率是每秒60M,那么每一帧能处理的数据就只能是1M大小。
    5. 很显然,在真正可视化的时候,每一帧能处理的数据几M大小相对于整体的上百G数据实在太小了,一定会有一个逐渐加载的过程的,这就是总是会显得加载很慢的原因。

2.2 业主的疑惑

那么为什么总是有业主希望倾斜摄影数据能马上加载出来,不要有中间逐渐加载的过程呢?因为这本来就是传统的三维模型工作流的优点和特性。在传统的三维模型工作流中,通过3DMax等建模工具将模型创建完成之后,渲染端只需要在程序启动的时候预加载一次就可以了,之后的模型数据就常驻在内存/显存中,后续整个渲染流程就完全不会卡,更不存在什么逐渐加载的过程。

很多人,尤其是干摄影测量的,就会对业主的这个要求感到疑惑,觉得倾斜摄影数据就是这样要逐渐加载的啊,有什么问题呢?其实当然有问题,对业主来说已经习惯了传统的三维模型工作流了,你现在引入了更有技术含量的倾斜摄影技术,还有什么HLoD的可视化技术,这个加载快的优点应该保留吧?总不能你技术升级了,反而还让用户的交互感受下降了,那算什么高新技术呢?

这样来看,业主的要求也是有道理的,作为乙方唯一有问题就是不应该随便拿倾斜摄影数据这种做三维可视化项目有很大缺陷的数据来应标,导致自己陷入了一种难以自证的困境:如果你觉得倾斜摄影数据更好,那为什么加载很慢?如果倾斜摄影数据不好,那为什么要用比较差的数据方案来应标?

3 缺点

我说倾斜摄影数据是一种缺陷非常大的数据,可能很多人尤其是摄影测量从业人员可能会不太服气。但是其实数据生产是数据生产,可视化项目是可视化项目,是两个不同维度的东西。倾斜摄影数据很多被人认为是习以为常的特性,放在可视化项目中是很难被接受的。

3.1 建模问题

倾斜摄影数据最大的问题就是难以表达突变的、尖锐的特征,只对平滑的特征才有比较好的表达。具体来说,像树木、广告牌、电线杆这些或蓬松的,或细长,或薄型的结构建建模效果总是一言难尽,如下图2所示树木的建模效果:

图2 倾斜摄影数据中树木的建模效果
我知道,国内有很多建模软件都宣称可以将广告牌、电线杆甚至塔吊都建模出真实的效果;确实,只要提升足够的分辨率、或者混合Lidar点云建模、甚至补充使用AI技术补充细节,也许真的可以将这些要素都复原出来,但是有的问题总归是不能避免的,例如物建筑物表面不平整的问题,如果你做过倾斜摄影数据单体化,就一定明白我说的是什么,如下图3所示

图3 倾斜摄影数据中建筑物不平整的表面
其实这些问题从原理上来说都是同一个问题,都是三维重建算法导致的。简单来说,三维重建的时候使用的输入要素是有限的,就一定会产生插值误差或者过拟合的问题,如果是重建地形问题不是很大,但是要重建复杂的、充满了突变要素的地表模型,就一定会导致平面边缘模糊或产生多余的起伏的问题。确实,是可以通过增加分辨率的办法让三维建模的输入要素更多,从而使得建模更加准确,但是如此高标准的倾斜摄影建模,又有谁能应用的起呢?至少在公共领域是看不到这样的倾斜摄影建模数据的。

3.2 语义化问题

搞倾斜摄影搞到最后,各大数据生产商也都发现了,一定要解决语义化的问题。笔者也不知道语义化这个词怎么来的,大约意思就是说倾斜摄影数据就是一张皮,你是不知道这张皮上面哪个部分是属于哪个建筑物的。这也就意味着倾斜摄影数据不能与实际的业务关联,只能做做可视化的展示工作。

要解决语义化的问题,首先就必须实现倾斜摄影数据的单体化。具体来说,就是将倾斜摄影数据上具有具体意义的部分单独提取出来,形成独立的、精确的三维模型。这一过程使得每个单独的对象(如一栋楼、一座桥等)能够被单独编辑、查看、分析和应用,也可以赋予具体的业务属性,从而实现了语义化。关于倾斜摄影的单体化,笔者的文章《倾斜单体化模型技术实现》中有详细的论述。

在笔者看来,将倾斜摄影数据进行单体化不仅解决了语义化的问题,最重要的是规避了上一小节中提到的建模问题:在一个倾斜摄影数据中,表达地形的部分可以直接使用DEM数据替代,树木、广告牌、电线杆这些突变的尖锐的地图要素又表达不好,剩下的就只有一些建筑物的表达还有可视化价值了,那就干脆将这些建筑物单体化出来,反而更有实用价值。

3.3 可视化效果问题

很多人将倾斜摄影数据称为“实景”,将倾斜摄影数据称为基于真实的物理建模。但这种看法细想起来其实是有问题的。倾斜摄影数据确实很真实,但是这种真实仅仅只是照片那种真实,与三维图形渲染集中基于真实的物理光影效果渲染的模型其实是有很大差距的。如下图4和图5所示,图4是纹理图片上的水面效果,图5是通过三维特效实现的水面效果,你觉得哪边更加真实呢?

图4 固化到纹理图片上的水面效果图5 通过三维特效实现的水面效果倾斜摄影数据就是这样,它的真实性,所有的光线反射、阴影全部都固化到纹理图片上了。这意味着你不可以像调整三维效果一样调整它,强行调整它就只会得到很奇怪很不真实的效果,你的可视化效果的上限就这样被定死了。基于真实的渲染是一个很复杂的问题,相机拍摄的照片也只是一种逼近而已,倾斜摄影数据的真实感上限是远远比不上传统的三维模型工作流的。传统的三维模型工作流在进行渲染端之后,可以借助于渲染引擎的物理光照计算,获得更为真实的渲染效果。另一个最现实的例子就是,你是觉得倾斜摄影数据更真实,还是《黑悟空》里面的场景更真实?

3.4 地理套合问题

所有的资料都宣称倾斜摄影数据具有亚米级别甚至于厘米级别的精度。我当然相信这个说法,但是这么高级别的精度用到三维可视化项目上,是符合国家数据安全要求的吗?即使不考虑这个问题,倾斜摄影数据一般要与地形数据进行套盒,但是实际上由于精度不一致的问题,两者的套合效果并不好。以目前的解决方案来说,都是调整倾斜摄影数据的高度,保证大概能贴到地面即可。但是对于有的倾斜摄影数据来说,这样的做法并不严密,有的地方都贴到地下面去了,有的地方离地面还有点距离。

4. 结论

最后其实还想讨论一下倾斜摄影数据的调度问题,不过这个问题就太复杂了,有机会就放在后面再介绍吧。总结一下本文的内容,那就是在使用倾斜摄影数据进行三维可视化项目的应标的时候一定要慎重,它具有一下几个缺点:

  1. 无法保持在传统的三维模型工作流中数据只加载一次的优点,而是需要一边渲染一边加载,这可能并不满足业主对于实时性的要求。
  2. 目前通用的倾斜摄影技术的建模算法对于突变的、尖锐的特征的表达并不太好,例如树木、广告牌、电线杆等;建筑物的表达也存在不平整的问题。
  3. 倾斜摄影数据的可视化效果固化在纹理图片上,无法通过三维渲染技术进一步提升真实的效果。
  4. 由于精度的差异,倾斜摄影数据与三维场景的套合可能存在一定的偏差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64767.shtml

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

相关文章

React:闭包陷阱产生和解决

在 React 中,闭包陷阱是一个常见的问题,尤其是在处理异步操作、事件处理器、或是定时器时。理解闭包的工作原理以及它在 React 中如何与状态和渲染交互,可以帮助你避免陷入一些常见的错误。 一、闭包陷阱的产生 1、什么是闭包陷阱&#xff1…

【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)

本文项目编号 T 092 ,文末自助获取源码 \color{red}{T092,文末自助获取源码} T092,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【Git 常用操作:pull push】

Git 基本概念 Git 是一个先进的开源的分布式版本控制系统,常用于管理工作内容、项目代码等功能。 Git 工作流程 图片来源:https://www.runoob.com/git/git-basic-operations.html 说明: workspace:工作区staging area&#xff…

shell脚本的循环-----while和for循环

一、while 1.格式 while 条件表达式; do 命令 done 2.案例 : ping测试子网段的主机网段由用户输入,例如用户输入192.168.101 ,则ping192.168.101.125 — 192.101.131 UP: /tmp/host_up.txt Down: /tmp/host_down.txt &#…

内容与资讯API优质清单

作为开发者,拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源,为你的开发工作提供了强大的支持!无论你是在构建网站、开发应用还是进行数据分析,这个合集都能满足你的需求。你可以通过这些免费API获…

maven-resources-production:ratel-fast: java.lang.IndexOutOfBoundsException

Maven生产环境中遇到java.lang.IndexOutOfBoundsException的问题,尝试了重启电脑、重启IDEA等常规方法无效,最终通过直接重建工程解决了问题。 Rebuild Project 再启动OK

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…

深度学习0-前置知识

一、背景 AI最大,它的目的是通过让机器模仿人类进而超越人类; ML次之,它是AI的一个分支,是让机器模仿人类的一种方法。开发人员用大量数据和算法“训练”机器,让机器自行学会如何执行任务,它的成功取决于…

基于Python Scrapy的豆瓣Top250电影爬虫程序

Scrapy安装 Python实现一个简单的爬虫程序(爬取图片)_python简单扒图脚本-CSDN博客 创建爬虫项目 创建爬虫项目: scrapy startproject test_spider 创建爬虫程序文件: >cd test_spider\test_spider\spiders >scrapy g…

LabVIEW中的“Synchronize with Other Application Instances“

在LabVIEW中,“Synchronize with Other Application Instances”是一个常见的提示或错误,通常出现在尝试并行运行多个LabVIEW实例时,特别是当你打开多个VI或项目时。这个问题可能影响程序的执行流程,导致不同实例之间的数据同步或…

【Linux】AlmaLinux 9.5虚拟机安装过程记录分享

关于AlmaLinux系统感兴趣的,可以去我之前写的另外一篇博客里面看看: https://blog.csdn.net/cnskylee/article/details/143142690 语言,选择【简体中文(中国)】,点击【继续】,进入后续设置 在…

深度学习——现代卷积神经网络(七)

深度卷积神经网络 学习表征 观察图像特征的提取⽅法。在合理地复杂性前提下,特征应该由多个共同学习的神经⽹络层组成,每个层都有可学习的参数。 当年缺少数据和硬件支持 AlexNet AlexNet⽐相对较⼩的LeNet5要深得多。 AlexNet由⼋层组成&#xff1a…

时间管理系统|Java|SSM|JSP|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起,最近需要识别法国电影《地下铁》的法语字幕,使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…

PostgreSQL技术内幕21:SysLogger日志收集器的工作原理

0.简介 在前面文章中介绍了事务模块用到的事务日志结构和其工作原理,本文将介绍日志的另一个部分,操作日志,主要去描述SysLogger日志的工作原理,流程以及其中关键的实现:日志轮转,刷盘性能问题等&#xff…

GUI07-学工具栏,懂MVC

MVC模式,是天底下编写GUI程序最为经典、实效的一种软件架构模式。当一个人学完菜单栏、开始学习工具栏时,就是他的一生中,最适合开始认识 MVC 模式的好时机之一。这节将安排您学习: Model-View-Controller 模式如何创建工具栏以及…

如何编辑调试gradle,打印日志

在build.gradle.kts中输入 println("testxwg1 ") logger.lifecycle("testxwg2") logger.log(LogLevel.ERROR,"testxwg5") 点刷新就能看到打印日志了

jvm栈帧中的动态链接

“-Xss”这一名称并没有一个特定的“为什么”来解释其命名,它更多是JVM(Java虚拟机)配置参数中的一个约定俗成的标识。在JVM中,有多个配置参数用于调整和优化Java应用程序的性能,这些参数通常以一个短横线“-”开头&am…

怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法

怎么将pdf中的某一个提取出来?传统上,我们可能通过手动截取屏幕或使用PDF阅读器的复制功能来提取信息,但这种方法往往不够精确,且无法保留原文档的排版和格式。此外,很多时候我们需要提取的内容可能涉及多个页面、多个…

TCP常见问题

文章目录 一、两种状态图二、常见问题1、MSL是什么 3、为何等待2MSL3、为何三次握手,不握手、握手一次、两次行吗4、为何四次挥手,三次行吗,两次行吗 一、两种状态图 四次挥手 二、常见问题 1、MSL是什么 MSL是Maximum Segment Lifetime的英…