资讯

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

转载 2017-09-05 07:28 来源:木木小姐玩灰机

  当你驾轻就熟地用无人机拍摄了某个地区的航拍图像后,除了分享到微信朋友圈里,还可以做些什么呢?或许 OpenDroneMap 能助你开启思路。

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

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

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

  点云(Point Clouds)

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

  正射校正影像(Orthorectified Imagery)

  数字高程模型(Digital Elevation Models)

  ……

  使用方法

  OpenDroneMap 支持 Docker,这意味着你可以在不同的操作系统上运行 OpenDroneMap。下面以 Mac OS 为例,介绍 OpenDroneMap 的使用方法。

  1、安装 Docker CE

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

  2、下载 OpenDroneMap 的镜像

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

  docker pull opendronemap/opendronemap

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

  3、创建文件目录

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

  //odm_test_1/images

  //odm_test_2/images

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

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

  4、运行 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 替代。

  5、查看结果

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

  然后在项目的文件夹中(比如 odm_test_1),就能在 odm_orthophoto 和 odm_texturing 目录中看到对应的输出结果了。

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

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

  小结

  整体来说,有 docker 这样的工具能很大程度上减少配置开发环境的时间,也简化了不少的操作步骤,不过需要注意的是 OpenDroneMap 的项目还是挺占用电脑空间的,所以在操作之前,最好能确保电脑有足够的剩余空间。

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

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

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

0 0

网友评论

取消