Python 中的摄影测量

2024 年 8 月 29 日 | 阅读 6 分钟

引言

在本文中,我们讨论了使用 Python 进行光摄影测量。你是否曾经想过我们如何理解我们看到的事物?就像我们看到有人走路一样,无论我们是否意识到,凭借先验知识,我们的大脑会理解正在发生的事情并将其存储为事实。考虑一下我们观察某物然后一片空白。陷入遗忘。可怕,对吧?那么,大脑如何解释我们看到的快照背后的游戏名称一直让我着迷。将人类智能和直觉赋予计算机的想法似乎相当有用。也许是因为非常年幼的孩子也能解决这个问题,所以我们倾向于忘记计算机相对于我们生物能力所存在的局限性。在人类本身的情况下,想象力的复杂性无穷无止境且不断动态变化,更不用说计算机智能了。

我们的大脑可以识别物体、处理信息并决定如何行动,在一瞬间完成一项复杂的任务。目标是让计算机也能做到同样的事情。因此,这是一个可以称为人工智能和机器学习的融合的主题,它涉及学习算法和专业技术来解释计算机所看到的内容。最初,科技巨头仍在思考的复杂概念是,由人工智能的先驱者们构思的、足以完成本科暑期项目的简单想法。回到 1966 年,麻省理工学院人工智能团队的 Seymour Paper 和 Marvin Minsky 开始了一个项目,其目标是构建一个能够观察场景并识别其对象的系统。

深度学习

计算机视觉背后的科学围绕着人工神经网络。简单来说?受人脑启发的算法利用大量数据集进行分析,以便尽可能准确地复制人类直觉。这些算法具有更高的准确性,在某些任务上甚至超越了人类水平。深度视觉只是深度学习的一个子集,它驱动着计算机的想象力和视觉能力。

1. 像素提取

OpenCV(开源计算机视觉),一个跨平台且免费使用的功能库,基于实时计算机视觉,支持深度学习框架,可用于图像和视频处理。在计算机视觉中,提取图像像素以观察对象并理解其包含的内容是关键要素。以下是计算机视觉在图像中寻求理解的一些关键方面:

  1. 对象检测:对象的区域。
  2. 对象识别:图像中的对象及其位置。
  3. 对象类别:对象所属的广泛类别。
  4. 对象分割:属于该对象的像素。

应用和未来

计算机视觉涵盖了广阔的领域,其应用无止境。由于计算机视觉在我们日常使用的设备中发挥着作用,它经常被我们忽略。

智能手机和网络:Google Lens、QR 码、Snapchat 滤镜(面部跟踪)、夜景模式、面部和表情检测、镜头模糊、人像模式、Google Photos(人脸、对象和场景识别)、Google Maps(图像拼接)。

  1. 医学影像:CT/MRI
  2. 保险:财产检查和损坏分析
  3. 光学字符识别(OCR)
  4. 3D 模型构建(光摄影测量)
  5. 在电影中将 CGI 与真人演员融合

计算机视觉是一个不断发展的领域,拥有专门的自定义任务和技术来针对应用领域。我设想它的市场价值将与其能力一样迅速增长。凭借我们的人工智能和兴趣,我们可以很快将我们的能力与计算机视觉相结合,达到新的高度。拍照只需点击一下,所以为什么还要在代码行上玩弄它呢?似乎 Python 并非如此。Python 中有一些很棒的库可以处理图像,例如 open-cv、Pillow 等。本文将使用 OpenCV,一个用于计算机视觉的开源库。

Python 光摄影测量工具箱

Python 光摄影测量工具箱 (PPT)19 实现了一个管道,用于从一组图像执行 3D 重建。其设计遵循传统的重建方法。它以图像为输入,并自动为可进行 3D 配准的图像执行 3D 重建。PPT 向用户隐藏了数据转换和文件列表的繁琐任务,这些任务需要与链的各个软件组件进行通信。已选择开源软件来执行重建管道的密集计算部分,Bundler 用于相机姿态估计,CMVS/PMVS 用于密集点云计算。最初,Bundler 和 CMVS/PMVS 提供了一些自动化启动任务的 shell 脚本,但 shell 的一个主要缺点是它需要跨平台。它不能在 Windows 下使用。这些软件的编译不通过相同的基本接口(Linux 上的 Makefile 和 Windows 上的 vcproj)进行管理,因此需要双重维护才能在两个平台上顺利编译。PPT 的设计使其具有跨平台性。

  1. 它使用 Python20 作为跨平台脚本语言进行通信和软件启动操作。它处理我们目标所需的所有任务(目录列表、文件列表、图像转换、Exif 读取、SQLite 数据库管理);它使用 Cmake21 进行选定的 Open-software 的编译配置,该软件可在 Open-source Photogrammetry 代码存储库22 中找到。
  2. PPT 提供了一个比以前的方法更容易维护和使用的工具链。它定义了一个简单的管道来处理 3D 重建。该管道被设计为一个具有高级 API 的 Python 模块,以便将来可以扩展。其结果是一个 3 级应用程序:接口、Python 模块和软件。已开发了一个图像包装器来隐藏通过 Python 模块使用该链所需的命令行调用。它提供了 2 步重建工作流。

多级应用程序使维护更加容易。每个底层模块都可以更新,因为它尊重设计的高级 API。这使得接口易于扩展。例如,Python 包装器使用设计模式接口来实现图像匹配步骤的多样化特征检测/描述算法(用户可以使用 David Lowe SIFT23 或开源实现 VLFEAT24)。数据工作流组织在一个在系统开始时创建的临时目录中。所有处理 3D 重建所需的数据都放置在该目录中。

数据通过工具链的卓越细节进行更新,并通过目录弹出窗口向最终用户显示。主要工作流程在图 10 中说明。仔细查看两步流程工作流(RunBundler 和 RunCMVS)以更好地了解 Python 脚本的任务很有意义。

应用

考古现场活动主要是挖掘过程,在大多数情况下会导致遗址的完全破坏。通常,会挖掘地层以研究下层。在缺乏专用昂贵设备(激光扫描仪、校准相机)或软件(摄影测量程序)的情况下,现场文档通过照片(数码或胶片)、手动绘图、全站仪测量和二维图像马赛克组成。最后,所有数据都链接到地理信息系统 (GIS) 中。近几年来,计算机视觉的进步开辟了新的视野,让每个人都能记录三维数据。这项技术的好处是独一无二的:

  1. 它是一种持续发展的基于软件的技术(今天分析的数据将在未来得到处理,从而获得更好的结果)。
  2. 它得到了免费和开源解决方案的良好支持。
  3. 它只需要挖掘时通常使用的设备(数码相机和全站仪),
  4. 易于携带的硬件组件使考古学家能够在基本或极端条件下工作(例如,在高山、水下或洞穴内),这项技术的多功能性有助于记录各种情况。

以下文章将介绍不同尺度的软件示例:从宏观(层、结构)到微观(遗迹)。

结论

在本文中,我们讨论了使用 Python 进行光摄影测量。在人类本身的情况下,想象力的复杂性无穷无止境且不断动态变化,更不用说计算机智能了。

我们的大脑可以识别物体、处理信息并决定如何行动,在一瞬间完成一项复杂的任务。目标是让计算机也能做到同样的事情。