王 謠,李彬華,楊帥明,張益恭,程向明
(1. 昆明理工大學信息工程與自動化學院,云南 昆明 650600;2. 中國科學院云南天文臺,云南 昆明 650011)
通常情況下,在一個多目標監控的圖像采集系統中,盡可能使用同一相機廠商生產的相同類型的相機,例如:安防監控中多相機圖像拼接,生產過程控制與監測,基于三維圖像的目標識別或運動檢測,地基廣角相機陣等[1-3]。但在有些特殊的場合,需要觀測或監測不同類型的目標,需要根據目標的具體情況配置不同的相機類型。并且,不同相機的圖像采集時刻也有不同的要求,有的要求同步采集,有的要求相隔規定的時間,具體取決于各自系統的應用要求。例如,云南天文臺前幾年研制的第1臺多功能天文經緯儀,它配備了3個CCD相機,其中一個Camera Link接口的數字相機采集恒星像和人造星像,另外用兩臺同軸電纜接口的模擬相機做水平差和軸準直差的測定,各相機采集的時間順序和時刻有嚴格的要求[4-5]。其它工業監控或測量系統也有類似的情況[2]。
近年來,隨著現代電子技術的飛速發展,各類高速接口的相機不斷涌現,如GigE[6], CXP(1)http://jiia.org/wp-content/themes/jiia/pdf/standard_dl/coaxpress/CXP-001-2015.pdf, USB3[7], IIDC2(2)http://jiia.org/wp-content/ themes/jiia/pdf/standard_dl/ngcp/CP-001-2015_TS2015001.pdf等,給圖像采集系統帶來更大的發展空間。這既給新系統的構建提供了更多的選擇,也給開發人員帶來了更多的技術挑戰。
本文介紹由一臺USB3接口的CCD相機和一臺GigE接口的CCD相機組成的圖像采集系統,在統一的外部觸發信號作用下進行圖像采集的過程、控制方法、系統硬件結構和軟件開發方案。對不同廠商生產的USB3接口相機和GigE接口相機進行開發,關鍵是要解決兩相機平臺不一致和相互不兼容的問題,以及外觸發模式下同步進行圖像采集的問題。
本文介紹的圖像采集系統是云南天文臺一個正在實施項目的前期預研究系統。該系統硬件由一臺工作站(PC)和兩臺CCD相機組成。兩臺相機中,一臺是Point Gray 公司GS3系列的USB3接口CCD相機(3)https://www.flir.cn/products/grasshopper3-usb3/,另一臺是Adimec公司OPAL系列的GigE接口CCD相機(4)https://www.adimec.com/cameras/machine-vision-cameras/opal-series/opal-series-5-5-micron/。這兩臺相機需要按望遠鏡控制系統的要求同步采集圖像,曝光開始的時間差應小于等于5 ms。所以,兩臺相機都必須帶有外同步觸發功能,并通過一個望遠鏡控制系統輸出的同步信號進行圖像的采集控制。
系統硬件結構如圖1。來自望遠鏡控制系統的圖像采集控制信號經光電隔離電路一分為二,輸出外觸發信號1和外觸發信號2,它們分別連接到USB3相機和GigE相機的外觸發輸入口。圖像采集工作站的一個USB3接口通過USB線連接到USB3相機,千兆以太網接口通過網線連接到GigE相機。

圖1 系統硬件結構Fig.1 System hardware structure
系統的工作流程是系統各部分上電后,圖像采集工作站分別通過USB3接口和GigE接口,給兩臺相機發送成像控制指令,設置相機的工作模式和成像參數(如觸發模式、曝光時間、增益、采集幀數和幀率等)。當相機處于非外部觸發模式時,工作站發送采集指令,控制相機進行成像和圖像傳輸,以及進行圖像的顯示和存儲;當相機處于外部硬件信號邊沿觸發模式時,來自望遠鏡控制系統的圖像采集控制信號分別觸發USB3相機和GigE相機,相機生成各自的圖像后自動將圖像數據通過UBS線或網線傳輸至工作站,工作站顯示圖像并按要求存盤。
這一雙相機高速圖像采集系統的圖像采集軟件是在Windows10操作系統下使用Visual Studio 2015作為軟件開發平臺開發的。USB3相機使用Point Gray公司的FlyCapture2類庫,GigE相機使用Adimec 公司的Bobcat開發包。在進行二次開發時,發現適用于GigE相機的Bobcat開發包并不能兼容USB3相機的FlyCapture2類庫。具體表現為兩臺相機的庫中封裝編譯好的lib及DLL文件不兼容,且Bobcat開發包為基于32位的解決方案平臺,而USB3相機的FlyCapture2類庫則是基于64位的解決方案平臺,更改任何一臺相機平臺都會造成庫文件不能使用。同時,Bobcat開發包中采用的GenICam標準(5)https://www.emva.org/wp-content/uploads/GenICam_Standard_v2_1_1.pdf不支持USB3相機的FlyCapture2類庫。為解決這一問題,將USB3相機界面的啟動模塊程序添加至GigE相機,然后分別使用各自的開發包獨立設計界面及后臺程序。
系統工作時,兩臺相機有同步采集的要求。所以,系統的一個重要工作模式就是外部硬件觸發模式。在此模式下,圖像的采集是由外部觸發信號控制,每到來一個外部觸發信號,兩臺相機即采集一幀圖像。對于具有時間測量要求或者實時性要求較高的多相機同步控制的場合,一般采用這種外部觸發模式。
另外,考慮到系統調試的需要,本文增設了一種工作模式:非外部硬件觸發模式,或稱為軟件觸發模式。在此模式下,兩臺相機進行圖像采集是各自獨立進行的,兩者的成像和圖像采集過程沒有交集。非外部觸發模式包含單幀、多幀圖像采集,該模式下兩相機為獨立運行模式,分別進行控制采集,不具有同步功能。
每臺相機的生產銷售商都提供一個簡單的圖像采集程序,但這一演示性質的程序不能滿足用戶的特殊要求。所以,通常情況下用戶必須獲得廠商提供的用于相機圖像采集軟件二次開發的庫文件,并在一定的開發環境下自主研發系統軟件。
根據前述系統工作流程和軟件二次開發的總體方案確定了系統成像控制與圖像采集系統軟件的基本框架,系統的程序設計流程如圖2。系統上電并穩定運行后,點擊工作站桌面程序圖標,同時打開GigE相機軟件界面和USB3相機軟件界面,進入相機參數設置模式,按成像控制的具體要求,人工配置相機參數(如觸發模式、曝光時間、增益、采集幀數和幀率等)。在配置完成后,相機處于等待控制指令狀態,此時如果設置相機為外部硬件觸發狀態,則兩相機在收到觸發信號即開始圖像采集,每到來一次觸發信號采集一幀圖像。如果為非外部觸發模式,則相機可選為單幀觸發或者連續觸發模式,此時兩相機處于非同步采集狀態,可分別進行獨立的采集設置,單獨開始,單獨結束。

圖2 程序設計流程圖
Fig.2 Programming flow chart
本文設計的USB3>相機圖像采集軟件界面分為菜單欄和客戶區。菜單欄有設置菜單,用來設置內存中可保存的圖像數量。客戶區分為采集區域、參數設置區域和觸發采集區域。分別依次為單幀、連續采集控制,采集曝光、增益參數控制,軟件、硬件觸發,加載靜態圖像、存儲設置和格式轉換等按鈕。
在采集之前需要先進行準備,或稱為預備階段,包括:掃描總線、獲取相機全局標識符(Globe Unique Identfier)、初始化連接相機和參數設置。預備階段完成后,USB3相機圖像采集主要使用FlyCapture2軟件開發包中兩個相機函數StartCapture()和RetrieveBuffer(),一個控制相機開始捕獲,另一個控制從相機獲取圖像。而USB3相機軟件的采集和存儲功能通過開始函數Start()、采集線程GrabThread()和存儲函數SaveImage()實現。
本系統有兩種觸發方式,USB3相機采集程序通過首先獲取需要設定的觸發模式,然后將相機設定到相應模式即可實現觸發模式的設置,采用FlyCapture2庫中TriggerMode結構體及PTTriggerMode枚舉類型中的參數進行設置。
另外,所用的相機是一般工業相機,其開發包支持常見的圖像文件格式,但不支持FITS格式。由于本項目面向天文應用,需要保存FITS圖像,所以需要進行圖像文件格式的轉換。為此,設計了格式轉換對話框,實現將BMP圖像保存為FITS文件格式。由于實驗使用的USB3相機是彩色相機,需要先將圖像轉換為16位灰度圖,然后再采用相關文獻中介紹的方法[8-9]轉換為16位FITS文件。
本文設計的GigE相機圖像采集軟件界面也分為菜單欄和客戶區。菜單欄有File, Tools, Convert, Help 4個選項。File菜單中exit子項為關閉界面功能。Tools菜單中有Buffer Options(默認為8個), Save Image, Save Current Image 3個選項卡,依次分別為設置Buffer大小、保存圖像和保存當前圖像子功能。客戶區分為Connection組框、USB Connection組框、Acquition Control組框、Parameters and Controls組框和Display組框,分別為相機連接區域、USB3相機界面打開、采集控制、參數設置和顯示圖像功能。
GigE相機在進行采集之前也有一個預備階段:首先獲取接口號、MAC地址、子網掩碼和IP地址,然后連接相機,最后向相機寄存器寫入參數值來設置相機。GigE相機圖像采集的過程是:首先打開一個數據流(或稱管道),對數據流對象的緩沖區變量Buffer進行設定;接著開啟數據流,此時數據不斷刷新到緩沖區,然后通過RetrieveNextBuffer()函數從緩沖區變量Buffer中獲取圖像數據;最后通過ProcessBuffer(lBuffer)函數將圖像數據傳遞給后續的存儲或顯示等函數。存儲時從Buffer中獲取原始數據并使用Store函數將圖像保存下來。在進行圖像保存時與USB3相機軟件同樣需要進行格式轉換。
GigE相機圖像采集系統的軟件、硬件觸發功能實現方法是:首先使用PvGenParameter 類對觸發控件的組合框中各參數進行映射,然后使用PvGenCommand類的Execute()函數將設置執行即可實現觸發。
關于GigE圖像采集軟件內存控制,直接定義PVImage類對象以存儲Buffer中的數據時提示權限問題,不能自定義PVImage類對象的大小,所以最終選擇重新定義結構體SnapImageInfo以定義圖像數據格式,然后定義該結構體的數組對象,將Buffer中的數據及參數獲取并賦給在內存中定義的結構體SnapImageInfo的對象,從而組成圖像保存在內存中。
在完成高速圖像采集系統硬件的搭建和軟件的設計之后,需要對整個系統進行相應的測試。整個測試在一臺運行Windows10, 64位操作系統,CPU2.30 GHz的4核筆記本電腦上進行,測試實驗分為兩部分:軟件測試和同步測試。
軟件測試方案為將相機設定到硬件觸發模式,設定圖像存儲格式為BMP圖像,并最終將生成的BMP圖像轉換為FITS圖像格式。內存控制功能為將圖像數據使用自定義結構體或類對象以數組形式存儲于內存中,測試中通過輸出其中圖像并存儲以驗證。分別對GigE相機采集軟件和USB3相機采集軟件進行測試,記錄了經相機采集并轉換的FITS文件的頭文件的格式、采集參數等信息。
如圖3為軟件工作在硬件觸發狀態的運行圖(左側為GigE相機操作界面,右側為USB相機操作界面),兩相機軟件均可正常完成單幀、多幀圖像采集,軟件、硬件觸發,內存控制,存儲、格式轉換等功能。

圖3 圖像采集系統軟件運行圖
Fig.3 Software operation interface of the image acquisition system
3.2.1 測試方案
本項目研制要求圖像采集系統的CCD圖像采集頻率每兩秒三張圖,每張圖片大小55 Mb,也就是82.5 Mb/s的數據傳輸速度。圖像采集系統使用的USB3相機像素為1 928 × 1 448,存儲的圖像深度為24位。圖像幀率決定著圖像的流暢性,幀率越高,圖像越流暢,因此相機輸出幀率應保證在 12 幀/秒以上。將觸發信號幀率設置為21幀/秒,此時USB3相機的數據傳輸量為167.58 Mb/s。GigE相機像素為1 024 × 1 024,圖像深度為32位,同時在觸發信號21 Hz時數據傳輸速度為84 Mb/s。可見,均達到項目要求的數據傳輸速率。
圖像采集系統軟件的同步測試方案與步驟如下:
(1)兩種測試情況:一是圖像采集工作站上電運行后未開啟其它應用程序,只運行圖像采集程序,稱為少任務情況;另一種情況是采集工作站上電運行后,除了開啟運行圖像采集程序,還開啟了多個其它應用程序(如Office、網易云、迅雷等),不過在圖像采集時,沒有使用其它的程序執行具體任務,稱為多任務情況。
(2)分別在GigE相機采集軟件和USB3相機采集軟件中外部硬件觸發模式下相機采集完成一幀圖像到緩沖區時將采集完成的時刻記錄到txt文檔中,每到來一個觸發信號就采集一幀圖像,同時記錄一次時間信息;外觸發信號設置成連續3 000個脈沖,即每個相機連續進行3 000次圖像采集。
(3)使用MATLAB軟件將GigE相機采集軟件和USB3相機采集軟件采集的txt文檔中的時間數據讀入并做差,生成數據分布圖,并由差值計算均值及方差。
3.2.2 同步測試結果及分析
對軟件運行兩個時間信息文檔進行保存和分析,信息包括:USB3相機采集時刻記錄表和GigE相機采集時刻記錄表。原始的時間格式為時分秒毫秒,一共9位。先將記錄時刻轉換成毫秒(ms),然后將USB3相機與GigE相機數據相減,得到每次完成圖像采集的時間差。在少任務和多任務兩種情況下,兩個相機完成圖像采集的時間差如圖4(a), (b)。這種測試進行了十幾次,實驗數據差異很小。圖4(a), (b)只是其中一次測試結果。圖中,橫坐標是圖像采集次序(或者說幀數),縱坐標是每次完成圖像采集的時間差。
對于圖4(a),上方有3個點處于20 ms左右及兩個點處于4 ms左右的情況,是由于圖像采集程序運行于Windows操作系統下,而Windows系統是搶先式分時多任務操作系統,時間片約10~15 ms。操作系統在采集軟件的運行過程中給予其他應用或設備分配一定的處理時間,因此造成部分采集記錄時刻的誤差。另外,兩圖中出現的以毫秒為單位的整數級差,是由系統測試時采集時間的精度為毫秒所致。

圖4 圖像采集系統同步測試結果。(a) 少任務情況;(b) 多任務情況
Fig.4 Synchronized test results of the image acquisition system. (a) In the case of fewer tasks; (b) In the case of Multi-task
對兩種情況的統計結果:少任務情況下,時間差均值為15.290 7 ms,方差為0.748 0 ms;多任務情況下,時間差均值為15.474 5 ms,方差為3.132 8 ms。
實際上,通過外部同步信號觸發的多相機圖像采集系統,各相機的曝光時刻在毫秒量級都是同步的。如果不考慮Windows操作系統的影響,理論上兩個相機的圖像采集完成的時間差固定。兩個相機都按設置幀率(21幀/秒)計算,這個固定的時間差應該是0.362 6 ms。也就是說,在毫秒量級,完成圖像采集也是同步的。實驗中出現的同步性差異,是指各相機將圖像傳輸到計算機并由計算機采集完成的時間差。這個時間差的統計結果驗證了Windows系統其它程序對兩個相機組成的圖像采集系統帶來一定的時間差。這說明基于Windows操作系統構建的雙相機圖像采集系統,要獲得10 ms以內的同步性能,采用軟件觸發不可能達到小于5 ms的同步曝光要求,必須采用具有外部信號邊沿觸發功能的相機構成多相機圖像采集系統,并且系統運行時,應該盡可能減少其它任務或程序的運行。
文[2]介紹的雙相機同步控制的織物質量檢測系統在軟件觸發下兩相機圖像捕捉時間差為100~600 ms,而硬件觸發下兩相機圖像捕捉時間差為500~600 ms。與其相比,說明本文介紹的系統及設計方法的可行性和優越性。
本文介紹了由UBS3接口相機和GigE接口相機構成的同步高速圖像采集系統的結構,探索了UBS3相機和GigE相機在互不兼容的開發包下的協同開發方法,編寫并實現了便捷控制。兩相機的控制軟件實現了相機單幀、多幀圖像采集,顯示圖像,軟件、硬件觸發,采集參數設置,圖像存儲,格式轉換等功能。對圖像采集系統進行了軟件測試和同步測試,系統及軟件運行穩定,同步測試結果說明系統達到了設計要求。另外,文中也討論了Windows操作系統對圖像采集任務的影響。