摘 要:為了解決PCIE-1429采集卡不支持雙相機同時進行數據采集的問題,通過LabVIEW搭建高速數據采集系統,由VC++生成具有解包功能的動態鏈接庫,再利用LabVIEW對其進行調用,實現了雙相機采集數據的實時解包。實驗證明,該方案成功利用PCIE-1429采集卡在“雙Base模式”下進行連續的數據采集,具有快速、有效、穩定、操作方便等優點。
關鍵詞:LabVIEW;雙相機采集;數據解包;動態鏈接庫
中圖分類號:TP311文獻標識碼:B
文章編號:1004-373X(2010)02-175-04
Design of Data Detaching Scheme to Double Cameras Acquisition
WANG Huan1,2,QIU Yuehong1,GUO Haichao3,CHEN Zhi1,2
(1.Xian Institute of Optics and Precision Mechanics,Chinese Academy of Sciences,Xi′an,710119,China;
2.Graduation University,Chinese Academy of Sciences,Beijing,100039,China;
3.Xi′an Branch,Chinese Space Technology Academe,Xi′an,710110,China)
Abstract:PCIE-1429 acquisition card doesn′t support data acquisition synchronously of tow cameras.To solve this problem,a high_speed data acquisition system based on LabVIEW is designed,the dynamic link library with function of data detaching by VC++is created,and LabVIEW is adopted to call the DLL,a data detaching scheme of double cameras acquisition is achieved.Experiment proves that continuous data acquisition with PCIE-1429 acquisition card under \"double_base mode\",And it has advantages of expeditious,effective,stable and operating expediently.
Keywords:LabVIEW;double cameras acquisition;data detaching;dynamic link library
0 引 言
隨著科學技術的不斷發展,人們對相機或光譜儀在軍事國防、移動通信、遙感探測、資源勘查、氣象觀測等領域所采集到圖像數據的要求越來越高,比如更高的圖像分辨率、更豐富的光譜信息、多角度多視場觀測等,在現有的CCD和CMOS工藝水平的情況下,增加相機或光譜儀的數量進行觀測是一個值得考慮的辦法。然而多相機觀測會產生多路信號,這對于只有一塊數據采集卡和一套數據采集及處理的系統來說,采集和處理都會顯得比較麻煩。
在眾多數據采集卡中,有很多支持CameraLink接口協議的“雙Base模式”,也就是說一塊采集卡可以直接支持雙相機分別在Base模式下進行數據采集,如美國Epix公司的PIXCI EL1DB采集卡、德國SiliconSoftware公司的MicroEnable IV Base×1 和MicroEnable IV Full×4采集卡等。但是,這些采集卡的采集速度往往不夠快,不能滿足某些特殊應用的需求。在某高速數據采集項目中,為了滿足高速數據采集,選用NI公司的PCIE-1429采集卡。它支持CameraLink接口協議中的基本(Base)、中檔(Medium)、全部(Full)等的三種模式,但這三種模式支持的數據來源必須是一個數據源,不允許多路數據同時采集,所以需要把多個相機看成一個數據源。但這樣一來,計算機采集的數據是錯誤亂碼,因此需要對數據進行解包。這里依托相關項目,對此問題進行了一定的研究,提出一種雙相機采集的數據解包方案,可以實現用一塊采集卡來支持雙相機數據的采集。
1 數據采集和存儲系統的設計及實現
1.1 相關背景知識介紹
LabVIEW是美國NI公司開發的一種用圖標代替文本進行創建應用程序的圖形化編程語言,其核心概念是“軟件即是儀器”[1]。PCIE-1429數據采集卡也是NI公司生產的一款專門用于數據采集的采集卡,它采用的是Camera Link接口規范,有豐富的接口資源和優良的性能,是航空航天、各種工業、生命科學和生物醫學等圖像采集應用的理想之選[2]。然而CameraLink接口協議[3],是從美國國家半導體公司的驅動平板顯示器的Channel Link技術過渡而來,專為機器視覺的高端應用設計的,可以提供高分辨率、高數字化率和各種幀頻,不僅改善了信噪比,而且根據不同的應用速度和數據,提供了基本(Base)、中檔(Medium)、全部(Full)等模式,可以根據分辨率、速度等自由選擇。圖像卡和攝像機之間的通信采用了低壓差分信號(Low Voltage Differential Signaling,LVDS),速度快且抗噪較好[4]。
1.2 基于LabVIEW的數據采集系統設計
該采集系統通過LabVIEW軟件和NI公司的IMAQ軟件編程進行。IMAQ軟件采集的具體過程如下[5]:
(1) 初始化。用高級和低級函數進行數據采集,首先進行初始化一個相機節點,驅動程序應用相機節點來鑒別PC機上的采集卡。在初始化相機節點時,需要標定兩個參數:相機名字和相機控制模式,每一個相機都有接口文件(*.iid)和相機文件(*.icd)。
(2) 配置。在初始化接口后,進行采集的接口配置時,比較關注單點采集、連續采集、中斷緩存數目和采集感興趣區域。對于連續采集需要分配3倍連續圖像數據的緩存。
(3) 采集。當采集開始后,采集的過程就是把FIFO中的數據復制到自己設置的緩存中。圖像的解碼和處理都是在自己設置的緩存中。當采集開始后,IMAQ會通過驅動自動重新定義大小。
系統數據的采集流程為:先通過Camera File Generator軟件對相機配置文件(*.icd)進行設置;然后通過測量與自動化瀏覽器(Measurement Automation Explorer,MAX)軟件對采集卡進行配置,如設置通道名、輸入輸出類型、測量類型等,最后在PC機上通過操作LabVIEW的采集界面程序來實現數據采集。
LabVIEW數據采集及控制的程序框圖及通過程序產生高速數據源,系統模擬采集過程得到的“圖像”(尺寸大小為4 096×512像素)分別如圖1,圖2所示。
1.3 存儲系統設計
考慮到設計成本和整個系統的完整性、可靠性,決定采用RAID[6]磁盤陣列來存儲大容量的高速數據。RAID(Redundent Array of Inexpensive Disks)是由美國加州大學伯克利分校的D.A.Patterson教授在1988年提出的,可以將其理解成一種使用磁盤驅動器的方法,即將一組磁盤驅動器用某種邏輯方式聯系起來,作為邏輯上的一個磁盤驅動器來使用。在RAID的諸多級別或稱模式中,RAID0具有最快的讀寫速度。這里采用HP公司的XW8400小型工作站作為數據采集的計算機。該計算機支持PCI_E的X16接口,并且硬件集成了RAID控制器。它支持的最大硬盤數目是4,所以采用4塊希捷公司單塊硬盤容量500 GB的高速硬盤構成RAID0磁盤陣列。在連續模擬采集的同時,通過測速軟件進行數據測試。測試發現,數據存儲的速率達到110 Mb/s,幾乎達到4塊硬盤連續穩定存儲的峰值速率。
圖1 數據采集及控制的LabVIEW程序框圖
圖2 模擬采集的“圖像”
2 雙相機采集的數據解包方案設計
2.1 動態鏈接庫簡介
動態鏈接庫(Dynamic Link Library,DLL)是一個可以為多方共享的程序模塊,內部對共享的例程和資源進行了封裝。它與可執行文件非常類似,區別在于DLL雖然包含了可執行代碼,卻不能單獨執行,必須由Windows應用程序直接或間接調用。它的優點主要有[7]:
(1) 共享代碼、資源和數據。DLL代碼可以被所有的Windows應用程序共享,它不僅包括代碼,還可以包含數據和各種資源。
(2) 語言無關性。DLL的編寫、生成與編譯器無關,只要遵循DLL的開發規范和編程方法,并聲明正確的調用接口,不管任何語言編寫生成的DLL都具有通用性。
(3) 隱藏實現細節。DLL中的例程可以被應用程序訪問,但應用程序不知道例程的細節。
(4) 節省磁盤空間和內存。只有DLL在被調用執行時,才動態地載入內存,如果多個程序使用同一個DLL,也只需裝載一次,從而節省內存開銷。
(5) 可以增強產品功能。產品發布后,可以通過調用新的DLL,實現功能的增強。
2.2 LabVIEW調用DLL
LabVIEW中,DLL的調用通過調用庫函數(Call Library Function)節點實現。該節點位于函數面板下的互連接口→庫與可執行程序→調用庫函數節點,如圖3所示。單擊該節點,放置在程序框圖中;雙擊該節點出現其配置對話框。在這里可以配置DLL的路徑(圖3中是由路徑輸入項的字符串指定DLL路徑,效果一樣)、函數名、線程、調用方式、參數和回調等。
圖3 調用DLL節點示意圖
LabVIEW中調用DLL時,最容易出錯的地方是參數類型的匹配[1]。由于LabVIEW中的數據類型和不同的編程語言對應的數據類型在形式上有一些不一致,因此需要知道它們是如何對應的。譬如Windows API中的BYTE,WORD和DWORD類型分別對應于LabVIEW中的U8,U16和U32。
2.3 雙相機采集的數據解包方案設計
(1) 數據解包的思想與流程。根據本系統的雙相機數據進入到采集卡的特點,確定數據解包的思想和步驟如下:
① 將采集卡采集輸出的一幀圖像(記為F)按列均分為8塊,不妨記為F1,F2,…,F8;
② 將F1和F2,F3和F4,F5和F6,F7和F8的對應像素值分別相加,即不妨記為F1+F2→A,F3+F4→B,F5+F6→C,F7+F8→D;
③ 將A與B的像素列交叉鑲嵌構成第一部相機采集的數據(記為I),將C與D的像素列交叉鑲嵌構成第二部相機采集的數據(記為J)。所謂交叉鑲嵌是這樣操作進行的,I的第1列由A的第1列構成,I的第2列由B的第1列構成,I的第3列由A的第2列構成,I的第4列由B的第2列構成,以此類推,即I的奇數列依次由A的列構成,I的偶數列依次由B的列構成。J同于I的模式構造。解包的流程和示意圖如圖4所示。
(2) 數據解包的軟件實現
① 對于單幀圖像的解包,通過Matlab的圖形用戶界面(Graphical User Interface,GUI)編程實現。該程序支持導入多種格式(jpg,bmp,tif,jif,png等)的圖像,對解包后的圖像也能保存為多種格式,可供操作者自由選擇。它支持鍵盤和鼠標分別操作。程序的操作界面如圖5所示。
圖4 數據解包的流程及示意圖
圖5 單幀數據解包的GUI界面
② 對于連續的數據采集和解包。由于該數據采集系統每秒采集112幀圖像數據,每幀尺寸為4 096×512 B像素,每像素位深為8,每幀大小為2 097 152 B(約2 MB),加上幀頭信息等1 078 B,每幀的實際大小為2 098 230 B。要想達到完全實時的解包,則每幀圖像解包的耗時必須控制在1/112 s(約為8.9 ms)之內。
對于連續的數據采集和解包,設計了兩種方案:
一種是基于LabVIEW與Matlab混合編程的方案。在LabVIEW中調用MathScript節點,將.m文件寫入腳本,然后通過對MathScript添加對應的輸入/輸出端子,就可以實現LabVIEW與Matlab交換數據。另一種是基于LabVIEW調用DLL進行解包。通過VC++,將解包的程序封裝到DLL文件中,然后通過LabVIEW調用之。
在PC機(P4 2.8 GHz CPU,768 MB內存,Matlab R2008b,VC為6.0)下經過測試,使用Matlab單幀圖像解包約需要55 ms;使用LabVIEW調用DLL進行解包只需要約8 ms。考慮到這個實際因素,要做到實時解包,只能采用第二種方案。具體的過程是這樣的:當采集卡輸出一幀圖像時,解包程序先識別幀頭信息(幀頭信息的格式是固定的)并去除,剩下的數據即是圖像數據,然后對其做解包處理。完成一幀幀解包后進行下一幀的解包,如此不斷地進行下去,就可以實現連續的數據解包操作。整個采集、解包和存儲的LabVIEW系統框圖如圖6所示。
圖6 整體的LabVIEW系統框圖
3 結 語
該方案基于LabVIEW調用DLL進行解包,成功地解決了PCIE-1429采集卡不支持“雙Base”模式進行雙相機采集的問題,具有解包速度快,工作穩定,實現方便等特點。然而,在創建DLL文件和LabVIEW調用DLL時,也有幾點需要注意的地方,現總結如下:
(1) 數據類型一定要匹配。LabVIEW與Win32的數據類型并不一致,在創建DLL文件時要充分考慮到相應數據類型的對應關系。
(2) 對參數要進行正確的選擇(包括參數類型、參數名等)。只有參數設置正確,LabVIEW程序才能正確地調用DLL完成相應的功能。
(3) 設置正確的調用方式,即正確選擇stdcall(WinAPI)或C/C++兩種方式。前者適合調用含Windows API函數的DLL,后者適合調用含標準C所編制函數的DLL。二者對函數調用方式的說明不一樣,因此在調用DLL時需正確選擇,否則會使函數無法得到正確的調用[8]。
(4) 創建DLL文件,要遵循DLL的開發規范和編程方法,并聲明正確的調用接口,這樣才能調用LabVIEW。
參考文獻
[1]陳錫輝,張銀鴻.LabVIEW 8.20程序設計從入門到精通[M].北京:清華大學出版社,2007.
[2]National Instruments.NI Vision NI PCIE-1429 User Ma_nual Base,Medium and Full Configuration Camera Link Image Acquisition Device[S].2006.
[3]Camera Link Specifications of the Camera Link Interface Standard for Digital Cameras and Frame Grabbers Version1.1[S].2004.
[4]National Semiconductor.LVDS Owner′s Manual(Including High_Speed CML and Signal Conditioning)[S].2008.
[5]National Instruments.NI_IMAQ? for IEEE-1394 Cameras User Manual[S].2003.
[6]蘇建勛.磁盤陣列基本原理[J].電子材料與電子技術,2003(3):54-62.
[7]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業出版社,2006.
[8]梁慶中,王廣君,夏益民.虛擬儀器設計中LabVIEW與Win32 API的混合編程\\.現代電子技術,2004,27(12):72-74.