邢耀文 李天鹤
(山东省国土测绘院,山东 济南 250102)
随着我国城市化进程的发展与地理信息技术的不断进步,在城市建设、土地规划、农林检测、生活生产等各个领域对航空影像的现势性及实用性的要求越来越高。像片照度作为判读地物的关键参数,应在航空影像获取后第一时间进行检查与处理。在现有航空摄影工作中,通常因为影像获取时间、天气状况、地表反射情况或其他相关因素影响,极易出现单幅影像内部、区域范围内多幅影像色彩、照度不平衡情况[1],影响后续航空影像的内业处理(如影像分类解译、数字正射影像图制作、三维模型构建等)[2]。由于目前航空摄影工作普遍存在单张影像像幅大、像片数量多等特点,因而解决大量影像的批量快速匀光成为航空影像预处理的重要内容。
本研究选取目前单张像片匀光中最常用的Mask方法,通过探讨其匀光原理与流程,基于Python语言简单高效且扩展能力强的特点,结合第三方数据库OpenCV在图像分析与处理方面的强大功能模拟实现利用Mask方法对航空像片匀光的批量快速处理,为大量航空影像的快速匀光处理提供了新的解决方案。
Python语言是一种解释型计算机程序脚本语言,由Guido van Rossum在1991年创造[3]。相对于其他计算机语言,Python语句结构简单、语法定义明确、代码定义清晰,便于学习、阅读和维护;因为开放源代码,Python具有丰富且强大的第三方库,在Linux,Windows等平台上兼容性都较好;Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言相比,Python以一种非常强大又简单的方式实现面向对象编程。基于以上特点与优势,Python目前在图像解译、科学计算、数据挖掘、人工智能等众多领域应用广泛[4]。
OpenCV(Open Source Computer Vision Library)于1999年由Gary Bradsky在英特尔创立,是一个基于开源发行的跨平台计算机视觉库,第一个版本于2000年问世,目前已可以运行在Linux,Windows,Android和Mac OS操作系统上。它由一系列C函数和少量C++类构成,具有C++,Python,Java和MATLAB接口,有超过500种算法和大约10倍组成或支持这些算法的函数。OpenCV实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有力的研究工具[5]。
OpenCV由cv(核心函数库)、cvaux(辅助函数库)、cxcore(数据结构与线性代数库)、highgui(GUI函数库)、ml(机器学习函数库)等模块构成,主要用于解决图像数据操作、图像/视频的输入输出、矩阵/向量数据操作及线性代数运算、基本图像处理、结构分析、目标识别、图像标注等功能。
Mask匀光法是基于传统光学像片的晒印方法而提出的[6]。其原理是选择一张称为Mask的密度或色彩随位置缓慢变化的模糊的透明薄膜作为正片[7],与原始像片(称为负片)按轮廓线叠加进行晒像获得一张色彩密度较为均匀的像片,随后进行晒印以增强像片总体反差。Mask匀光法的特点是消减影像中的大反差而增强影像中的小反差,从而使整张影像照度与色彩趋于一致[8]。Mask匀光法常用于单幅影像的匀光处理,具有较强的适应性,是目前应用最多的匀光方法。Mask匀光法的数学模型可表示为:
I′(x,y)=Ist(x,y)+Ibg(x,y)
(1)
其中,I′(x,y)为原始影像;Ist(x,y)为照度均匀的理想影像;Ibg(x,y)为背景影像。通常根据Mask匀光法获取亮度均匀的理想影像的方法是将原始影像采用高斯低通滤波方法过滤掉其中的高频分量即原始影像中亮度变化较为强烈的部分得到背景影像,两者相减获得剔除了高频信息的光照分布均匀的图像,同时为了保证图像细节不丢失且匀光前后图像亮度的一致性[9],将上面模型进行如下修改:
Ist(x,y)=I′(x,y)-I′(x,y)×G(x,y)+offset
(2)
其中,G(x,y)为高斯低通滤波器;offset为原始影像灰度均值的偏移量。
试验数据为山东省某县级市地面分辨率为15 cm的SWDC-4航摄仪获取的影像共1 000张,其单张像幅为970 Mb,航摄期间,摄区天气良好、飞行稳定、航摄仪工作正常。但由于航摄区域有大量易反光地物如建成建筑、河流等,因而存在大量的楼顶及水体反光问题需进行匀光处理。
利用Mask方法进行匀光处理的关键是获取背景影像[10]。背景影像由原始影像经高斯低通滤波获取。由于背景影像为一张亮度随位置变化的灰度图,对影像地物细节的要求并不高,为提高处理速度,可对原始影像进行重采样降低分辨率作为制作背景影像的模板;针对高斯低通滤波器在图像频率谱中的良好应用效果,需要对重采样影像进行傅里叶变换,获得影像在频率域中的高斯低通滤波表达形式H(μ,υ)=e-D2(μ,v)/2σ2,其中,D(μ,v)为频率域原点到点(μ,v)的距离;σ为高斯模糊半径,决定了高斯低通滤波器的匀光强度。对滤波后的影像频率谱进行傅里叶逆变换得到空间域影像;根据原始影像尺寸对经过低通滤波的低分辨率影像进行重采样获得与原始影像可叠加的背景影像,将原始影像与背景影像进行相减处理,并加上原始影像灰度均值偏移量保证影像细节即得到最终的匀光后影像。其处理流程如图1所示。
利用Python语言的便捷高效特点及OpenCV库对图像强大的分析处理功能,可以将Mask匀光法批量应用于影像的快速匀光处理,以下提供了部分关键步骤的核心代码:
1)影像重采样功能。
Img_0001=cv2.imread(r"D:TestDataImg0001.tif",0)
Img_0001=cv2.resize(Img0001,(int(y/2),int(x/2)))
通过OpenCV库的cv2.resize()函数可以实现图像不同程度的重采样功能。
2)影像傅里叶变换。
Img_f0001=cv2.imread(r"D:TestDataImg0001.tif",0)
dft=cv2.dft(np.float32(Img_f0001),flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift=numpy.fft.fftshift(dft)
OpenCV库中的cv2.dft()方法接受一个灰度格式的图像参数,对其进行频谱转换,输出一个0频率在图像左上角的频谱数组,为方便滤波分析,利用numpy模块的fftshift()函数将其0频率转换到影像中心位置。
3)高斯低通滤波。
rows,cols=Img_f0001.shape
crow,ccol=int(rows/2),int(cols/2)
mask=numpy.zeros((rows,cols,2),numpy.uint8)
mask[crow-20:crow+20,ccol-20:ccol+20]=1
f=dft_shift*mask
设置一个参数名mask的滤波器,并通过调整滤波器的尺度确定其匀光效果,最终获取滤波后的影像频谱数组。
4)傅里叶逆变换。
ishift=numpy.fft.ifftshift(f)
iimg=cv2.idft(ishift)
类似于傅里叶变换,numpy模块提供了iffshift()函数,OpenCV库提供了cv2.idft()函数实现了影像频谱的傅里叶逆变换。
1)批量处理速度。
为保证对大量航空影像进行批量匀光处理的计算效率,应保证计算机硬件的配置要求,试验选取计算机硬件为Inter(R)Core(TM)i7-4790k处理器,32GB内存,2TB机械硬盘的处理平台,通过对1 000张影像进行批量匀光处理,总计用时约160 min,单张处理时间约为10 s,相对于利用传统图片处理软件进行单张影像匀光所需20 s~40 s,整体效率提升了2倍~4倍。
2)匀光效果。
选择实验数据中的一张原始影像及匀光后影像进行比较,如图2所示。
从目视效果看,图2a)原始影像中由于拍摄时的光照条件及相机参数设置等原因,水体呈现曝光过度状态,亮度较高且与周边的农用地反差较大,不利于后期影像的制作与使用;图2b)是应用Mask方法制作的该幅影像的背景影像,可以看到在水体部分明显的高亮,村庄处白色屋顶反光较强也存在相对高亮;图2c)为匀光处理后的影像,可见水体亮度明显被减弱,水体细节得到了加强,与周边地物的关系更加协调。进一步将原始影像与匀光后影像进行亮度统计分析得到表1。
表1 影像匀光前后亮度参数对比
通过对影像进行分块量化分析发现,匀光后影像的总体亮度和亮度的离散值较原始影像均有下降,这主要是由该幅影像的下部1/3即水体部分进行了大幅的匀光,其他色彩较好区域并未对照度进行过多干预,匀光尺度与影像的适应性较好;各部分平均梯度在匀光前后变化量少,说明背景影像经过两次重采样并未对原始影像细节造成影响,高亮区域或阴暗区域的匀光在一定程度上也会增加影像的细节表现。综合看来影像总体匀光效果理想。
针对航空影像数据量日益增大的问题,本文基于Mask匀光原理,使用Python语言设计了一种批量快速匀光算法。经过实验与分析,发现该算法具有以下优点:1)处理速度快。相较于单张处理效率,批量处理能够基于脚本方式完成匀色,效率可提升2倍~4倍。2)匀光效果好。该算法能够自动识别航空影像亮度的离散程度,重点计算过亮或过暗区域的曝光度,不会对亮度和色彩较为理想的区域造成过多的干扰。3)使用成本低、程序开发易。当前基于Python语言和OpenCV数据库的开放性资源较多,读者可以根据本文的思想和方法,灵活设计适合自己需求的算法。上述优点表明本文设计的算法适用于大批量航空影像的快速匀光处理,是一种切实可行的方法。在今后的研究中,笔者将会重点对图像最优分块策略的自适应性方面进行研究,以便提高航空影像快速匀光流程的整体效率和匀光效果。