基于C++语言与OpenCV的分布式孔径成像系统设计
2018-01-10孙天齐陈波
孙天齐+陈波
摘 要:针对分布式孔径数字全息系统要求保密性高,数据量大等特点,文中设计了基于C++语言与OpenCV函数库的三孔径数字成像系统软件。软件首先对各孔径间装配导致的再现像缩放、旋转误差进行校正,然后进行孔径综合,并通过微软基础类库进行人机界面的编写。
关键词:分布式孔径;数字全息;C++;OpenCV;MFC
中图分类号:TP391 文献标识码:A 文章编号:2095-1302(2017)12-00-02
0 引 言
基于数字全息探测的分布式孔径综合成像技术是一种先进的主动成像技术[1],能够在低照度、复杂背景条件下获取远距离景物的高分辨率三维图像[2,3],具有模块化、可靠性高等优点。该成像体制采用多个子孔径对目标进行全息探测,然后将各子孔径上的目标光复振幅根据其空间位置综合起来,从而获得较大的数值孔径[4,5]。
在分布式孔径各孔径间记录时会因为CCD记录的位置、角度、焦点等不同造成子孔径间全息图间存在位移、缩放、旋转等误差。根据参考文献[6]知,全息图间放大率误差等于各自重构出的物体图像间尺度误差的倒数。而重构图像间的旋转、尺度误差可通过图像配准的方式得到[6]。重构图像间的误差可以利用图像处理技术来标定。SURF[7](Speeded Up Robust Features,SURF)算法是一种基于特征点匹配的图像拼接算法。可以处理两幅图像间的位移、缩放、旋转等变化情况下的特征匹配问题,具有匹配性能稳定、速度快等优点[8]。
由于国内大多数分布式孔径数字全息系统还停留在实验室阶段,尚未有成型的产品。而当前的软件产品源代码保密性高,调用的函数库较多,消耗了大量系统资源,且设备驱动繁琐,导致在实际应用中结合本系统特点进行二次开发和应用的难度较大,限制环节较多。所以,自主开发具有校装配误差的数字全息系统十分必要。C++语言具有高效、支持继承和重用等特点[9],所以本系统可通过MFC(Microsoft Foundation Classes,MFC)与C++编程进行人机界面的展示。
1 分布式孔径数字全息
分布式孔径综合成像系统示意图如图1所示。激光器发射出的相干光束被分为两束,一束光作为物光射向目标物体,再由物体反射回光电探测器;另一束光作为参考光再次分束直接照向各子孔径光电探测器。子孔径内的光电探测器分别记录参考光与物光的干涉信号[10]。在数字信号处理器中,首先利用傅立叶变换等方法从干涉信号中分别复原出子孔径探测器上的目标,返回光复振幅,然后利用菲涅耳衍射公式计算出各子孔径入瞳面上的目标光复振幅Ui(x,y),最后按照子孔径空间位置对Ui(x,y)进行综合,并通过菲涅耳衍射公式计算出目标平面上的光复振幅。
其中,z为子孔径瞳平面与目标所在平面之间的距离,k=2π/λ,λ为波长,FT[·]表示傅立叶变换, (ai,bi)为第i子孔径的中心空间位置,N为子孔径数目。
在实际系统中,由于装配误差会影响孔径综合的效果,所以本系统对孔径综合算法进行了误差校正,程序流程如图2所示。
在重建像中选取一幅作为参考图像,分别与其他重建像进行SURF算法缩放、位移误差计算。目标光复振幅旋转误差对应重建像相应的旋转,目标光复振幅缩放误差对应重建像缩放误差的倒数。对目标光复振幅矩阵做相应旋转、缩放的坐标变换进行校正。最后,将各子孔径校正后的目标光复振幅进行叠加、重建,即得到高分辨率的三孔径成像。
2 分布式孔径数字全息处理系统
2.1 分布式孔径系统数据采集系统
建立图3所示的模拟分布式孔径系统数据采集系统。激光器的出射光束经过准直和扩束后由分束镜分为两路,一路照向目标光作为物光,另外一路作为本地参考光。CCD记录目标散射光和参考光形成的离轴全息图。激光器波长为635nm,CCD像素数为1 300×1 024,每个像素大小为4.65μm,目标与CCD的距离约为1.03 m,目标是一枚直径为0.25 m的金属币。通过多次数据采集模拟多个孔径,并人为地将CCD分别旋转至-15°、0°、+15°来模拟3个孔径的装配误差,如图4所示。
2.2 基于C++语言与OpenCV的软件设计
C++不仅拥有计算机高效运行的实用性特征,同时还能提高大规模程序的编程质量与程序设计语言的问题描述能力。OpenCV是一个集成好的机器视觉函数库,由C++语言编写,其主要接口也采用C++语言编写。因此,三孔径数字全息系统软件由C++语言编写,并利用OpenCV函数库进行SURF算法编程,对各孔径间缩放、旋转误差进行校正。软件主要包括数据重建、误差配准、目标光复振幅校正、孔径综合等模塊。
(1)数据重建模块是对各目标光复振幅根据式(1)进行的图像重建;
(2)误差配准模块通过SURF算法对两幅重建图像进行误差配准;
(3)目标光复振幅校正模块用配准得到的误差对目标光复振幅进行误差校正;
(4)孔径综合模块是对各孔径校正后的目标光复振幅进行叠加,并重建。
其中,用于误差配准的SURF算法和目标光重建模块的坐标变换利用OpenCV函数库进行。
2.3 基于MFC平台的人机界面搭建
MFC是微软基础类库的简称,是微软公司实现的一个C++类库,封装了大部分Windows API函数。VC++是微软公司开发的C/C++集成开发环境,灵活性较大。所以本系统采用图5所示的基于MFC的人机界面。
图5中,左侧三个rebulid按钮分别调用数据重建模块来对各子孔径进行图像重建,并显示在按钮上的图像控件上。中间两个按钮用来调用误差配准模块,以中间再现像为标准图像,分别对上侧再现像和下侧再现像进行SURF算法图像校正,并将校正后的图像显示在按钮上的图像控件中,分别将角度误差、横向缩放误差、纵向缩放误差显示在按钮下方的edit控件中。最右侧按钮则通过目标光伏振幅模块将各孔径目标光复振幅进行校正,之后利用孔径综合模块进行孔径综合并再现综合成像,将成像结果显示在按钮上的图像控件上。endprint
3 结 语
文中自主设计了基于C++语言的分布式孔径数字成像系统,利用OpenCV函数库对各孔径间的误差进行配准并矫正,同时还编写了基于MFC的人机界面。运行结果说明,本系统可以很好地矫正孔径间的误差,提高综合成像质量,并进行直观展示。
参考文献
[1] J C Marron, R L Kendrick. Distributed aperture active imaging[C].SPIE,2007.
[2] H?ft T, Kendrick R, Marron J, et al. Two-Wavelength Digital Holography[C]. Digital Holography and Three-Dimensional Imaging Optical Society of America, 2007.
[3] J C Marron, R L Kendrick. Multi-Aperture 3D Imaging Systems[C]. Aerospace Conference, IEEE, 2008.
[4] Rabb D, Jameson D, Stokes A, et al. Distributed aperture synthesis[J]. Optics Express, 2010, 18(10):10334.
[5] Shemano D, Haus J W, Miller N J, et al. Digital Holography for Coherent Imaging for Multi-aperture Laser Radar[C]. Digital Holography and Three-Dimensional Imaging, Optical Society of America, 2011.
[6]杨旭.分布式孔径数字全息综合成像技术[D].唐山:华北理工大学, 2017.
[7] Bay H, Ess A, Tuytelaars T, et al. Speeded-Up Robust Features (SURF)[J]. Computer Vision & Image Understanding, 2008, 110(3):346-359.
[8]李俊杰.大空間建筑火灾源点自动定位技术研究[D].西安:西安建筑科技大学, 2014.
[9]李洪波, 苏子林.C++语言的高效性、共享性与重用性[J].鲁东大学学报(自然科学版), 2004, 20(2):108-111.
[10]陈波, 杨靖, 杨旭,等.激光主动成像中散斑噪声对波前畸变校正性能的影响[J].中国激光, 2015, 42(10):259-265.endprint