基于C++語言與OpenCV的分布式孔徑成像系統(tǒng)設(shè)計(jì)
引 言
基于數(shù)字全息探測的分布式孔徑綜合成像技術(shù)是一種先 進(jìn)的主動成像技術(shù) [1],能夠在低照度、復(fù)雜背景條件下獲取 遠(yuǎn)距離景物的高分辨率三維圖像 [2,3],具有模塊化、可靠性 高等優(yōu)點(diǎn)。該成像體制采用多個子孔徑對目標(biāo)進(jìn)行全息探測, 然后將各子孔徑上的目標(biāo)光復(fù)振幅根據(jù)其空間位置綜合起來, 從而獲得較大的數(shù)值孔徑 [4,5]。
在分布式孔徑各孔徑間記錄時會因?yàn)?CCD 記錄的位置、 角度、焦點(diǎn)等不同造成子孔徑間全息圖間存在位移、縮放、旋 轉(zhuǎn)等誤差。根據(jù)參考文獻(xiàn) [6] 知,全息圖間放大率誤差等于 各自重構(gòu)出的物體圖像間尺度誤差的倒數(shù)。而重構(gòu)圖像間的 旋轉(zhuǎn)、尺度誤差可通過圖像配準(zhǔn)的方式得到 [6]。重構(gòu)圖像間 的誤差可以利用圖像處理技術(shù)來標(biāo)定。SURF[7](Speeded Up Robust Features,SURF)算法是一種基于特征點(diǎn)匹配的圖像 拼接算法??梢蕴幚韮煞鶊D像間的位移、縮放、旋轉(zhuǎn)等變化 情況下的特征匹配問題,具有匹配性能穩(wěn)定、速度快等優(yōu)點(diǎn) [8]。
由于國內(nèi)大多數(shù)分布式孔徑數(shù)字全息系統(tǒng)還停留在實(shí)驗(yàn) 室階段,尚未有成型的產(chǎn)品。而當(dāng)前的軟件產(chǎn)品源代碼保密性 高,調(diào)用的函數(shù)庫較多,消耗了大量系統(tǒng)資源,且設(shè)備驅(qū)動繁瑣, 導(dǎo)致在實(shí)際應(yīng)用中結(jié)合本系統(tǒng)特點(diǎn)進(jìn)行二次開發(fā)和應(yīng)用的難 度較大,限制環(huán)節(jié)較多。所以,自主開發(fā)具有校裝配誤差的 數(shù)字全息系統(tǒng)十分必要。C++ 語言具有高效、支持繼承和重 用等特點(diǎn) [9],所以本系統(tǒng)可通過 MFC(Microsoft Foundation Classes,MFC)與 C++ 編程進(jìn)行人機(jī)界面的展示。
1 分布式孔徑數(shù)字全息
分布式孔徑綜合成像系統(tǒng)示意圖如圖 1 所示。激光器發(fā) 射出的相干光束被分為兩束,一束光作為物光射向目標(biāo)物體, 再由物體反射回光電探測器 ;另一束光作為參考光再次分束 直接照向各子孔徑光電探測器。子孔徑內(nèi)的光電探測器分別 記錄參考光與物光的干涉信號 [10]。在數(shù)字信號處理器中,首 先利用傅立葉變換等方法從干涉信號中分別復(fù)原出子孔徑探測 器上的目標(biāo),返回光復(fù)振幅,然后利用菲涅耳衍射公式計(jì)算出 各子孔徑入瞳面上的目標(biāo)光復(fù)振幅 Ui(x,y),最后按照子孔徑 空間位置對 Ui(x,y)進(jìn)行綜合,并通過菲涅耳衍射公式計(jì)算 出目標(biāo)平面上的光復(fù)振幅。
在實(shí)際系統(tǒng)中,由于裝配誤差會影響孔徑綜合的效果, 所以本系統(tǒng)對孔徑綜合算法進(jìn)行了誤差校正,程序流程如圖 2 所示。
在重建像中選取一幅作為參考圖像,分別與其他重建像 進(jìn)行 SURF 算法縮放、位移誤差計(jì)算。目標(biāo)光復(fù)振幅旋轉(zhuǎn)誤差對應(yīng)重建像相應(yīng)的旋轉(zhuǎn),目標(biāo)光復(fù)振幅縮放誤差對應(yīng)重建 像縮放誤差的倒數(shù)。對目標(biāo)光復(fù)振幅矩陣做相應(yīng)旋轉(zhuǎn)、縮放 的坐標(biāo)變換進(jìn)行校正。最后,將各子孔徑校正后的目標(biāo)光復(fù) 振幅進(jìn)行疊加、重建,即得到高分辨率的三孔徑成像。
2 分布式孔徑數(shù)字全息處理系統(tǒng)
2.1 分布式孔徑系統(tǒng)數(shù)據(jù)采集系統(tǒng)
建立圖 3 所示的模擬分布式孔徑系統(tǒng)數(shù)據(jù)采集系統(tǒng)。激 光器的出射光束經(jīng)過準(zhǔn)直和擴(kuò)束后由分束鏡分為兩路,一路照 向目標(biāo)光作為物光,另外一路作為本地參考光。CCD 記錄目 標(biāo)散射光和參考光形成的離軸全息圖。激光器波長為 635 nm, CCD 像素?cái)?shù)為 1 300×1 024,每個像素大小為 4.65 μm,目標(biāo) 與 CCD 的距離約為 1.03 m,目標(biāo)是一枚直徑為 0.25 m 的金屬 幣。通過多次數(shù)據(jù)采集模擬多個孔徑,并人為地將 CCD 分別 旋轉(zhuǎn)至-15°、0°、+15°來模擬 3 個孔徑的裝配誤差,如圖 4 所示。
2.2 基于 C++ 語言與 OpenCV 的軟件設(shè)計(jì)
C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時還能 提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語言的問題描述能力。 OpenCV 是一個集成好的機(jī)器視覺函數(shù)庫,由 C++ 語言編寫, 其主要接口也采用 C++ 語言編寫。因此,三孔徑數(shù)字全息系 統(tǒng)軟件由 C++ 語言編寫,并利用 OpenCV 函數(shù)庫進(jìn)行 SURF 算法編程,對各孔徑間縮放、旋轉(zhuǎn)誤差進(jìn)行校正。軟件主要 包括數(shù)據(jù)重建、誤差配準(zhǔn)、目標(biāo)光復(fù)振幅校正、孔徑綜合等 模塊。
(1)數(shù)據(jù)重建模塊是對各目標(biāo)光復(fù)振幅根據(jù)式(1)進(jìn)行 的圖像重建 ;
(2)誤差配準(zhǔn)模塊通過 SURF 算法對兩幅重建圖像進(jìn)行 誤差配準(zhǔn) ;
(3)目標(biāo)光復(fù)振幅校正模塊用配準(zhǔn)得到的誤差對目標(biāo)光 復(fù)振幅進(jìn)行誤差校正;
(4)孔徑綜合模塊是對各孔徑校正后的目標(biāo)光復(fù)振幅進(jìn) 行疊加,并重建。
其中,用于誤差配準(zhǔn)的 SURF 算法和目標(biāo)光重建模塊的坐標(biāo) 變換利用 OpenCV 函數(shù)庫進(jìn)行。
2.3 基于 MFC 平臺的人機(jī)界面搭建
MFC 是微軟基礎(chǔ)類庫的簡稱,是微軟公司實(shí)現(xiàn)的一個 C++ 類庫,封裝了大部分 Windows API 函數(shù)。VC++ 是微軟 公司開發(fā)的 C/C++ 集成開發(fā)環(huán)境,靈活性較大。所以本系統(tǒng) 采用圖 5 所示的基于 MFC 的人機(jī)界面。
圖 5 中,左側(cè)三個 rebulid 按鈕分別調(diào)用數(shù)據(jù)重建模塊 來對各子孔徑進(jìn)行圖像重建,并顯示在按鈕上的圖像控件上。 中間兩個按鈕用來調(diào)用誤差配準(zhǔn)模塊,以中間再現(xiàn)像為標(biāo)準(zhǔn)圖 像,分別對上側(cè)再現(xiàn)像和下側(cè)再現(xiàn)像進(jìn)行 SURF 算法圖像校正, 并將校正后的圖像顯示在按鈕上的圖像控件中,分別將角度 誤差、橫向縮放誤差、縱向縮放誤差顯示在按鈕下方的 edit 控件中。最右側(cè)按鈕則通過目標(biāo)光伏振幅模塊將各孔徑目標(biāo)光 復(fù)振幅進(jìn)行校正,之后利用孔徑綜合模塊進(jìn)行孔徑綜合并再 現(xiàn)綜合成像,將成像結(jié)果顯示在按鈕上的圖像控件上。
3 結(jié) 語
文中自主設(shè)計(jì)了基于 C++ 語言的分布式孔徑數(shù)字成像系 統(tǒng),利用 OpenCV 函數(shù)庫對各孔徑間的誤差進(jìn)行配準(zhǔn)并矯正, 同時還編寫了基于 MFC 的人機(jī)界面。運(yùn)行結(jié)果說明,本系統(tǒng) 可以很好地矯正孔徑間的誤差,提高綜合成像質(zhì)量,并進(jìn)行直 觀展示。