论文部分内容阅读
立体匹配一直以来都是摄影测量领域以及计算机视觉领域的研究热点,其旨在寻找不同视点影像之间的同名像点信息,该信息可用作多视影像的结构恢复、基于影像的三维表面数据采集、数字表面模型及数字高程模型的制作、实景三维模型重建等,在基于影像的三维重建技术中起着至关重要的作用。在新世纪数据爆发式增长的背景下,摄影测量影像的分辨率随着成像技术的提高而逐步增长,这包括千万至亿级像素级别的航空影像以及十万至百万级像素级别的近景影像,它们分辨率的提高使得立体匹配算法在效率上亟待提高,本文针对两种数据不同的数据量级,有针对性的研究两种不同的立体匹配效率优化技术,以满足各类摄影测量影像的立体匹配效率提升需求。在基础立体匹配算法的选择上,本文选择2005年学者Hirschmuller提出的半全局立体匹配算法(Semi Global Matching,SGM)作为基础算法,该算法采用全局匹配基于能量函数最小化的框架,通过聚合邻域内多个路径方向的一维路径代价,来近似二维最优,大大的提高了逐像素立体匹配的效率,然而在面对高分辨率影像时,SGM算法的速度依旧无法满足对效率有很高要求的应用需求,所以基于SGM算法的进一步效率优化,是本文研究的方向。首先,针对于高分辨率航空影像,其特点是分辨率普遍在千万级以上,分辨率的提升同时会带来视差搜索范围的增大,立体匹配算法在处理这类影像时不仅效率不高,而且对内存的占用率非常大。一方面,航空影像所涉及的应用大多为线下处理,对立体匹配模块并不要求实时性能,但要求快速的获得三维密集点云,为三维重建、真正射影像成图等模块快速提供稳定可靠的输入数据;另一方面,影像分辨率过大,对存储空间要求巨大,若可用存储空间过小,则算法需要进行数据分块处理,而分块太多势必也会因为单块像素信息太少导致精度降低。结合以上两个方面,本文提出了一种基于CPU平台的系统化高效立体匹配算法优化方法,主要完成的工作有以下三点:(1)设计了 一种非常高效的以数据并行模型为基础的并行计算模型,将立体影像对按照列号分为多个条带对,每个条带对采用SGM算法进行独立并行地视差估计,最后将分条带的视差图融合为整张视差图,条带之间彼此独立,无需处理任何线程冲突。(2)对于SGM算法的四个步骤:Census变换、代价计算、代价聚合、视差计算,进行SSE(StreamingSIMDExtensions)指令集优化,利用SSE单指令多数据流的特点,同时对多个像素或者多个视差进行并行运算,实现线程并行之外的数据并行运算。(3)提出一种分层SGM立体匹配模型,有效的解决了航空影像视差搜索范围过大导致立体匹配耗时严重以及内存占用率过高的问题。首先通过对影像对进行多级降采样,然后从低分辨率到高分辨率依次匹配,低分辨率影像对匹配的视差图为下一级影像对提供初始视差,将像素的视差范围约束至非常小的值(不大于64),充分有效地缩小了高分辨率层级影像对的视差搜索范围,大大提高了匹配效率(数十倍的加速比),同时明显地减少了算法的内存占用量。其次,针对于高分辨率近景影像,其特点是分辨率在大部分在数十万至百万级,相比航空影像分辨率普遍较低。但是近景影像和航空影像不同的是其应用大多要求实时性,如实时车载三维导航、运动机器人三维导航、手持式快速三维扫描仪等应用都要求实时性的获取三维数据,作为三维信息获取的关键算法,立体匹配的实时性效率非常关键。因此,本文提出了一种基于CUDA的系统化实时立体匹配算法优化方法。主要完成的工作有以下两点:(1)针对SGM最耗时的四个主要步骤,分别设计了高效的基于CUDA的SGM并行优化模型,最大化的利用GPU上千个核心并行计算;充分利用共享内存对算法进行深度存储效率优化;通过视差主序的代价空间数据排列方式,有效地解决了代价聚合步骤内存合并访问的难题。实验表明本文算法的实时性能远远高于其他优化算法,比原始SGM算法快576倍,对640×480分辨率的影像,当视差范围为128时,在NVIDIA GTX 1070 GPU上可达到166.7fps的实时效率。(2)提出了一种基于CUDA的分层匹配模型,将金字塔分层匹配策略与基于CUDA的并行算法相结合,有效缩小视差搜索范围,进一步提升算法的实时效率。实验表明算法在面对高分辨率近景影像时实时性能非常出色,对于尺寸为1800×1500的高分辨率近景影像,当视差范围为256时达到26.9 Qps的实时立体匹配效率。