如何使用OpenDroneMap对航拍图像快速建模

当你得心应手地用无人机拍摄了某个地区的航拍图像后,除了分享到微信朋友圈里,还能够作些什么呢?或许 OpenDroneMap 能助你开启思路。git

OpenDroneMap 是一个开源的航拍图像处理工具,能够把航拍图像进行点云、正射影像和高程模型等转换处理。github

通常的无人机用的都是「傻瓜式」的相机,其实这跟你用手机或普通数码相机拍的没差,只是拍摄的角度不同而已。它们拍出来的照片都是非量测影像(non-metric imagery),而 OpenDroneMap 则能够将这些非量测影像转换成三维地理建模数据,并应用在地理信息系统中。docker

具体而言,OpenDroneMap 能够将航拍图像处理为下面几种格式的数据:微信

  • 点云(Point Clouds)工具

  • 纹理数字表面建模(Textured Digital Surface Models)测试

  • 正射校订影像(Orthorectified Imagery)网站

  • 数字高程模型(Digital Elevation Models)spa

  • ……操作系统


使用方法

OpenDroneMap 支持 Docker,这意味着你能够在不一样的操做系统上运行 OpenDroneMap。下面以 Mac OS 为例,介绍 OpenDroneMap 的使用方法。翻译

一、安装 Docker CE

到 Docker 官网 https://docs.docker.com/engine/installation/ 找到并下载适用于你所使用的操做系统的 Docker CE 版本(Docker EE 是企业版,暂时用不上)。通过「傻瓜式」的安装后,能够在 Terminal 上输入 docker --version 检验 Docker 是否安装成功。
图片描述

二、下载 OpenDroneMap 的镜像

确认 Docker 成功安装后,在 Terminal 上输入如下指令:

docker pull opendronemap/opendronemap

Docker 就会从 Docker Hub 中下载 OpenDroneMap 的镜像到本地中。为提升下载速度,建议提早使用 Proxifier 之类的工具(建议自行 Google)让 Terminal 走上代理道路。镜像下载完成后,在 Terminal 输入 docker images 指令,就能查看到刚才下载的 OpenDroneMap 的镜像了。
图片描述

三、建立文件目录

在 Finder 上任意一目录新建一个名为 images 的文件夹,做为待处理图片的存放位置。个人习惯是以「项目名 / images」的方式来对目录进行命名,这样能更直观地管理文件。好比:

//odm_test_1/images
//odm_test_2/images

接下来,就须要把你须要进行处理的航拍影像拷贝到 images 文件夹中了,若是你暂时没有这些航拍图像的话,能够在 https://github.com/OpenDroneMap/odm_data 上下载范例素材。

我在网站上下载了「aukerman」素材的图像文件,这个范例素材彷佛是对某个绿化公园连续拍摄的航拍图像,查看每一个图像文件的 info(Command + I),都能找到它的经纬度信息。咱们能够用 OpenDroneMap 对这些文件进行「正射影像(拼接)」和「纹理网面建模」的处理。
图片描述

四、运行 OpenDroneMap

在航拍图像文件拷贝到 images 目录之后,打开 Terminal 并定位到项目文件夹(好比 odm_test_1)中,执行如下指令:

docker run -it --rm \
    -v $(pwd)/images:/code/images \
    -v $(pwd)/odm_orthophoto:/code/odm_orthophoto \
    -v $(pwd)/odm_texturing:/code/odm_texturing \
    opendronemap/opendronemap

指令的做用是:经过 OpenDronMap 对 odm_test_1/images 目录下的图像文件同时进行「正射影像(odm_orthophoto)」和「纹理网面建模(odm_texturing)」的图像处理(做为测试,为了节省时间,你能够只选取 odm_orthophoto 或 odm_texturing 其中一种处理方式):
图片描述

指令解释:

docker run -it --rm

Docker 的运行指令。-it 指让 Docker 分配一个伪输入终端并以交互模式运行容器;--rm 是指在容器运行完以后自动清除以节省电脑存储空间。

-v $(pwd)/images:/code/images

-v 是用来将本地目录绑定到容器中的,在本例子中,是让 OpenDroneMap 知道待处理的照片在哪里;冒号前面,表明的是本地 images 路径,其中 (pwd) 表明当前 Teminal 定位目录的绝对路径,你能够更改成其余目录的绝对路径;冒号后面,是指容器的路径,这个是不能更改的。

-v $(pwd)/odm_orthophoto:/code/odm_orthophoto

这行指令,是指但愿使用 OpenDroneMap 对图像文件进行怎么样的处理,你能够根据项目的须要,输入不一样的处理指令,OpenDroneMap 提供了如下几种处理方式:

  • odm_meshing # 3D 网面建模

  • odm_texturing # 纹理网面建模

  • odm_georeferencing # 地理配准后的点云图

  • odm_orthophoto # 正射影像图

opendronemap/opendronemap

这是指明须要调用的镜像,这里是调用 Repository 为 opendronemap/opendronemap 的镜像,能够用该镜像的 tag(若是有设置的话)和镜像 ID 替代。

五、查看结果

指令执行后,就交给程序去处理了。运行时间可能会稍长,请耐心等候,一切顺利的话,Terminal 就会下面的提示:
图片描述

而后在项目的文件夹中(好比 odm_test_1),就能在 odm_orthophoto 和 odm_texturing 目录中看到对应的输出结果了。
图片描述

正射影像的输出结果的 png 预览图:
图片描述

或许有朋友会说,最后还不是一张常见的无人机俯视航拍图,但其实 odm_orthophoto 的输出结果还有一个后缀为 tif 的 GeoTIFF 文件,这能够应用在 QGIS 上做为光栅图层,供地理信息分析之用(好比实现地图的修测更新)。

小结

上述教程中的 GIS 术语可能翻译得不够到位,若有不妥的地方望请指出。

总体来讲,有 docker 这样的工具能很大程度上减小配置开发环境的时间,也简化了很多的操做步骤,不过须要注意的是 OpenDroneMap 的项目仍是挺占用电脑空间的,因此在操做以前,最好能确保电脑有足够的剩余空间。

上面的例子采用的是范例素材的航拍图像,若是要实际应用到本身的项目中,则须要本身使用无人机,结合相关软件的航线规划和定时拍摄功能,对某一个地区进行连续拍摄,将拍摄的图像文件导入到「images」文件夹中,再按教程步骤执行就能实现数据处理了。

此外,Docker 也有 Windows 版本,把教程中 Terminal 的操做换成 Windows 系统的 Cmd,或许也能实现(没有尝试过,因此不敢打包票)。