基于C++语言与OpenCV的分布式孔径成像系统设计
扫描二维码
随时随地手机看文章
引 言
基于数字全息探测的分布式孔径综合成像技术是一种先 进的主动成像技术 [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)进行综合,并通过菲涅耳衍射公式计算 出目标平面上的光复振幅。
在实际系统中,由于装配误差会影响孔径综合的效果, 所以本系统对孔径综合算法进行了误差校正,程序流程如图 2 所示。
在重建像中选取一幅作为参考图像,分别与其他重建像 进行 SURF 算法缩放、位移误差计算。目标光复振幅旋转误差对应重建像相应的旋转,目标光复振幅缩放误差对应重建 像缩放误差的倒数。对目标光复振幅矩阵做相应旋转、缩放 的坐标变换进行校正。最后,将各子孔径校正后的目标光复 振幅进行叠加、重建,即得到高分辨率的三孔径成像。
2 分布式孔径数字全息处理系统
2.1 分布式孔径系统数据采集系统
建立图 3 所示的模拟分布式孔径系统数据采集系统。激 光器的出射光束经过准直和扩束后由分束镜分为两路,一路照 向目标光作为物光,另外一路作为本地参考光。CCD 记录目 标散射光和参考光形成的离轴全息图。激光器波长为 635 nm, 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 控件中。最右侧按钮则通过目标光伏振幅模块将各孔径目标光 复振幅进行校正,之后利用孔径综合模块进行孔径综合并再 现综合成像,将成像结果显示在按钮上的图像控件上。
3 结 语
文中自主设计了基于 C++ 语言的分布式孔径数字成像系 统,利用 OpenCV 函数库对各孔径间的误差进行配准并矫正, 同时还编写了基于 MFC 的人机界面。运行结果说明,本系统 可以很好地矫正孔径间的误差,提高综合成像质量,并进行直 观展示。