基于大疆无人机全景拍照的实现思路

本文将介绍利用大疆无人机基于 DJI SDK 拍摄全景图所须要的图片,不包括图片后期的合成拼接算法。ios

全景图基本实现过程

全景视图是指在一个固定的观察点,可以提供水平方向上方位角360度,垂直方向上180度的自由浏览,简化的全景只能提供水平方向360度的浏览。一般全景图像的得到有两种方法:全景拍摄和经过图像拼接来得到全景图像。前者须要特殊的设备,可是操做起来很是方便,简单易行,可是,这种设备价格很是昂贵,不适合普及。后者只须要普通的相机就可,可是须要进行相应的图像投影和拼接,所谓图像投影是指把实景图像投摄到一个统一的圆柱或者球体表面的过程,这样能够消除图像间存在的旋转关系,只保留平移关系,适合拼接。图像拼接是指两幅不一样视角方向具备必定重叠部分的图像合成一幅图像。显而后者的重点在于图像的拼接和融合上。
合成全景图中计算机视觉技术的知识和原理算法

显然利用无人机拍摄全景图采起的是上面提到的第二个方案,而不是利用专用的设备拍摄。全景图片后期的合成算法处理都是一致的,专用设备只是省掉了移动摄像头拍摄各个角度的麻烦,由于专用设备在各个角度都放置了固定的摄像头,傻快贵。 性能

由于无人机有着稳定的云台,移动摄像头拍照角度很方便,利用无人机进行全景图拍摄是一个很天然的选择。测试

全景图片合成流程

在拍摄了固定点的各个角度照片后,接下来就是图片的合成拼接算法了。合成拼接大概分为如下几个过程:spa

特征点匹配:找到素材图片中共有的图像部分

图片匹配:链接匹配的特征点,估算图像间几何方面的变换

图像均衡补偿:全局平衡全部图片的光照和色调

若是是在阴天的环境可能各个角度的光线比较均匀,若是是晴朗的天气由于有太阳这个面光源,不一样角度的曝光结果确定有些差别,将来最后合成的时候显得天然就须要平衡全局的曝光、色调。 .net

补天

目前常规的无人机云台都没法垂直 90 度拍摄天空,实际上大部分场景的全景图对于天空的细节也不做要求,毕竟同在一片蓝天下。可是若是全景图里没有天空观感上会很是不天然,所以一般在合成最后会补充一些天空的细节。 3d

利用无人机拍摄各个角度照片

大疆常规无人机的云台的最大仰角是 30 度,可是即便是大疆本身实现的全景拍照功能拍摄的最大仰角也只设置到 15 度。由于当仰角到极限的 30 度时,顶部区域会大面积的拍到桨叶。 cdn

前面提到过全景后期合成须要基于特征点进行匹配,若是大面积拍到桨叶,由于每张照片中桨叶的位置都毫无规律,对两张相邻照片的匹配会形成干扰,下降匹配的几率。 这样咱们就确认了拍照区域:水平向 0 - 360 度,竖直向 - 90 到 15 度。接着根据照片重叠率能够自行计算须要拍多少照片。 咱们观察到大疆的全景拍照间隔是这样的:

云台 +15 度 9 张图像
云台 0 度 9 张图像
云台 -25 度 9 张图像
云台 -60 度 6 张图像
云台 -90 度 1 张图像blog

咱们选择了一个更简单的方案:15 度,-5 度,-35 度,-65 度各 8 张照片,云台垂直地面 -90 度拍一张照片。图片

拍摄顺序:水平优先仍是竖直优先

在肯定了拍照的范围后须要考虑一下拍摄的顺序:水平优先仍是竖直优先。

水平优先就是把云台在固定一个角度后,机身自身旋转一圈后拍摄下一个角度。竖直优先是机身固定在一个水平角度后,云台运动到各个角度拍照。假设都是拍摄 4 * 8 张照片(15 度,—5 度,-35 度,-65 度各一圈 8 张),水平优先机身旋转 4 * 8 次,云台运动 4 次;竖直优先机身运动 8 次,云台运动 4 * 8 次。 因此根本的衡量因素是:让机身多旋转几回仍是让云台多运动几回划算? 答案是竖直优先,由于云台运动更稳定,代价更低。云台的运动环境相对可控,把云台旋转到一个角度就能够了。而机身的 yaw 运动,须要产生一个水平的力,到达一个角度后还须要产生一个反向的力停下运动。由于在空中不像地面,能够经过地面摩擦力产生反向的力。全部运动的力都要经过多旋翼的力矩产生。每一次机身运动都必然伴随着机身姿态调整的过程。

若是全景照片包含仰角,那么云台的竖直运动须要从低往高处运动。

由于每次机身运动完都须要必定时间段调整机身姿态,此时无人机不必定是水平的。可是云台有稳定系统,因此画面是稳的。

所以若是机身刚运动完,立刻拍摄仰角的照片,可能会有更大的几率拍到桨叶。由于无人机在调整姿态过程当中多是侧倾的。

曝光策略

为了获得尽可能均衡的曝光使用全局测光是一个很合理的选择。若是拍摄的是单张照片没什么问题,若是是各个角度都要拍摄,最后还有拼在一块儿,那么全局测光就不能知足需求了。 由于全景合成的图片有两个特色:相邻图片须要有明显特征点;地平线下方的主体细节比较重要,天空的细节不重要。使用全局测光在大光比的场景下,拍摄画面有天空时曝光结果就会和咱们期待的不一致。由于天空很亮,曝光就会下降,这样天空的细节有了,咱们想要的地面上的主体就会严重欠曝。逆光的时候就很是典型:

两张照片是在同一个位置拍摄,只是拍摄角度不一样。人眼经过远处群山的形状能够看出是在同一个地点,可是对于程序而言,由于画面下面部分太暗,细节所有丢失,特征点匹配值就很低。并且咱们关注的是地面的层次,这样的曝光地面严重欠曝,输出的全景图也不是咱们想要的。 咱们所指望的曝光结果是这样的,地面上物体清晰有细节,天空能够过曝。

最后合成的时候能够是这样的结果,天空的颜色都接近白色也利于后期补天处理。

利用曝光锁定

如今咱们明确了曝光目标是在水平、仰角时地面的物体曝光准确,天空能够过曝。 很天然的联想到这不就是局部测光嘛!在 DJI SDK 中,局部测光是把画面分割成 8 * 12 个块,好比设置测光区域 [0, 0] ,那么就是以左上角的那块做为测光区域。咱们能够在云台 -5 度,15 度的时候,设置测光区域为 [6, 6],那么就是以靠近画面底部的中间区域测光。 想法很美好,可是真正用这个方式进行拍摄时咱们发现没有拍摄过程当中没有人的参与,[6, 6] 这个局部出现误差的几率很大,结果不太稳定。这一小块地方可能恰好在这个画面里比较亮,或者比较暗都有可能。 在放弃了局部测光方案后咱们想到了利用曝光锁定。云台在 -35 度的时候画面是整块地面,拍摄完成后锁定曝光,-5 度和 15 度都使用 -35 度的曝光,这样就既保证了地面曝光的准确,也使竖直方向上的照片曝光有着较好的连续性。如何实现曝光锁定能够参考这篇文章:DJI SDK 如何实现曝光锁定

Tips

大疆无人机的产品线从两千元的入门 spark 到专业级的 M 系列,摄像机的性能区别是很大的。全景拍摄过程当中摄像机须要连续拍摄几十张照片,每一次摄像机运动后都须要从新对焦、测光、设置曝光参数。所以拍照必定要针对不一样机型测试摄像机的性能,不然可能会在拍摄过程当中由于摄像机工做量过大抛出 camera busy 的错误而中断任务。

总流程

相关文章
相关标签/搜索