前一段时间一直在闲暇的时候做着无人机影像处理方面的工作,也算是小有建树了。前两天突然有了一个思考,那就是关于如何更快速的进行校正处理,实际上我们处理的图片,或者说我们处理的影像在很多情况下只需要有一个准确的相对位置关系而并不是需要绝对精度有多么的高,因为理论上影像绝对精度不可能高于影像分辨率,因为控制点的选取本身对于影像来说从影像上选取像控点就存在误差,而亚像元精度的像控点选取通过测量控制点的方式几乎是无法做到的,鉴于此种情况,我认为影像的校正处理还是应该集中在相对位置的校正上,而绝对未知跟具体的影像质量硬件技术有关。实际上在地图应用的过程中能够与底图叠合我们认为就是比较精确的了,那么我们是不是可以利用Google Map提供的瓦片数据自动的选取控制点进行校正。
对于以上采用Google Map瓦片数据进行校正我认为主要有两个优势:

  • 1.Google Map在全球的数据能够完美的拼接,且作为地图标准的底图都是以它为标准
  • 2.数据获取免费且方便,且几乎具有全球所有地区的高分影像,这给我们的后续处理提供了极大的方便

    基于以上考虑我决定设计一套结合Google Map数据的影像快速校正方法,我觉得在具有高分影像的地区如果单纯的做几何粗校正和拼接的任务,甚至不需要进行空三过程,因为以sift选取特征点的精度,通常情况下一幅影像存在几百上千个匹配点,而Google Map数据可以计算每一个像素的经纬度坐标,即我们可以获取数量巨大的像控点,在此情况下直接通过控制点进行几何校正实际上就已经具有了极高的精度,而避免了复杂的空三的过程极大的提高了处理的效率,另外直接根据Google Map进行校正也使得校正结果跟地理地图一致避免由于坐标系统的差异而导致的错位现象。
而我设计的整套处理流程包含了以下几个方面:

  • 1.原始影像粗范围的计算
  • 2.根据原始影像计算Google 数据切片信息
  • 3.根据切片信息获取影像切片
  • 4.对影像切片进行组装得到与待校正影像分辨率相差较小范围一致的影像
  • 5.进行特征点的提取和匹配,采用SiftGPU能够极其快速的提取匹配点
  • 6.通过提取和匹配的特征点进行几何校正

为了简化C++代码通过网络获取影像切片的过程我采用Python脚本实现,通过C++调用python的脚本进行处理,这样做能够简化代码,是的C++代码更加简洁,同时python获取网络数据也相对来说比较简单。以上步骤中目前已经实现的步骤有:1/2/3/4实际上代码还没有经过调试,下一步些许对代码进行调试,另外由于可能Google Map在中国地区可能发生便宜,所以这个也是需要考虑的问题[^footnote].

参考资料;
C++调用python参考
google瓦片计算参考
坐标转换参考