李 亞
(西安翔迅科技有限責任公司,陜西 西安 710068)
某型增雨機配置全面的催化劑裝載設備和先進的探測設備,在氣象防災減災、活動保障中發揮重要作用。增雨機任務系統是增雨機的重要子系統,其主要功能包括完成大氣溫度、濕度、云中液態水含量、冰晶離子濃度、云離子大小及濃度、云宏觀、雷達氣象等大氣環境探測[1],并根據大氣云粒子探測系統和作業監控設備探測的大氣條件,計算催化潛力指數[2],形成催化方案,以便實施人工增雨、消云和減雨作業[3-4]。增雨機任務系統由顯示控制子系統、氣象探測子系統兩部分組成。顯示控制子系統具備人性化操作顯示界面,可以發送作業人員的控制指令,并接收子系統上傳的數據和指令,方便作業人員完成各項任務。氣象探測子系統采集氣象探頭、機載大氣、航姿、氣象雷達與GPS數據[5]。大氣環境探測依靠各種氣象探頭完成,其中云中的水滴以及冰晶粒子的大小、形狀和含量的探測是由3V-CPI探頭實現的。3V-CPI探頭可對粒子進行高分辨率的影像探測。目前此種設備技術仍被國外公司壟斷,技術資料非常匱乏,為了實現增雨機任務系統對所有氣象數據的獲取,需要自主設計針對此探頭的數據處理軟件,實現對探頭的采集控制、圖像獲取,并進行圖像處理、計算探測粒子數據、存儲數據和轉發至顯示控制計算機。軟件不需要設計顯示界面,但需保證數據處理速度和傳輸速度。目前數字圖像處理技術已蓬勃發展多年,隨著計算機技術、物聯網技術、集成電路技術的發展,圖像處理技術越來越多地應用到了人工智能、生物科技、空間探測、氣象信息等領域[6]。3V-CPI探頭的數據采集就需要借助數字圖像處理技術,通過圖像濾波、背景減除、輪廓提取等操作,獲取粒子的圖像,計算粒子數據。氣象數據處理軟件選擇在Visual Studio 2010環境下開發,方便配置各種工具庫,易用性好。并引入計算機視覺庫(OpenCV),完成圖像處理算法,代碼精煉簡約,資源占用少,減少編程復雜度,圖像處理算法實現更為容易[7]。氣象數據處理軟件是增雨機數據采集的重要一環,是影響項目完成的重要技術風險點。順利開發氣象數據處理軟件才能保證某型增雨機的人工增雨需求。
探測信息處理機位于增雨機任務系統的氣象探測子系統內,包含一個3V-CPI氣象探頭、高速視頻采集卡、加固計算機,是氣象探測子系統的重要組成部分。3V-CPI探頭的數據量非常大,數據提取以及存儲的數據量也很大。所以需要單獨占用一個加固計算機來處理數據。增雨機在飛行過程中,空氣穿過設備體,探頭可以采集粒子圖像。高速視頻采集卡通過Camera Link視頻接口與氣象探頭相連。視頻采集卡安裝在加固計算機上。探測信息處理機連接示意圖如圖1所示。探測信息處理機需完成水滴以及冰晶粒子探測,對數據進行采集、處理、存儲和轉發,數據通過機載千兆以太網交換機發送到顯控計算機。

圖1 探測信息處理機連接示意圖
氣象數據處理軟件開發環境為Visual Studio 2010,采用C++語言以面向對象的設計方法編寫代碼,代碼耦合性低、擴展性強、靈活易維護。為了保證軟件運行的實時性與可靠性,氣象數據處理軟件采用多線程架構,設計時確保線程之間沒有資源沖突,不設計交叉控制,各個線程之間通過數據隊列或全局變量緩沖區進行數據交互,確保系統運行的可靠性。
氣象數據處理軟件需與顯控計算機通信獲取工作命令;基于Sapera LT++開發包對采集卡進行控制操作,獲取探頭數據;利用OpenCV對探頭數據進行處理,得到粒子感興趣區域(Region of Interest,ROI)數據信息,利用多媒體處理庫FFmpeg庫對圖像進行編碼,形成視頻流;采用共享內存技術共享目標數據,通過以太網轉發視頻流數據。按照軟件需求可以將程序劃分為命令輸入、采集卡操作、數據處理、數據輸出四大功能模塊,模塊劃分框圖如圖2所示。軟件架構清晰明了,便于后期維護和升級。軟件執行的流程如圖3所示,用戶打開軟件后,軟件首先執行采集卡配置、初始化等工作;然后等待用戶設置模式或背景命令。如果是圖像模式,在設置背景后單次采集背景圖并保存,之后連續采集圖像,進行處理,獲取粒子ROI信息,存入共享內存。如果是視頻模式,將視頻流通過以太網轉發至目標地址。軟件只輸出結果數據和視頻數據,不做界面顯示,但為了敘述清晰,后續會用實驗圖例進行說明。

圖2 軟件模塊劃分框圖

圖3 軟件流程圖
氣象數據處理軟件的開發難點在于圖像處理,要能準確穩定地識別出粒子,需要借助多種圖像處理算法,并不斷測試調優。后續會在2.3小節詳細敘述。
氣象數據處理軟件的命令輸入功能的作用是與顯控計算機進行交互,接收顯控計算機軟件發送的設置模式命令和設置背景命令,根據不同命令進行不同功能的操作與處理。
設置模式命令分為設置為圖像模式和設置為視頻模式。圖像模式下需要得到粒子信息,所以軟件對采集的圖像進行處理,計算出粒子ROI信息;視頻模式直接編碼成視頻流轉發給顯控計算機。軟件接收到設置背景命令后獲取一幀圖像定義為背景,為后續粒子提取做背景減除操作的參照,且背景后續也需要輸出給顯控計算機。通常情況下,背景設置命令在圖像模式下有效。以上命令皆通過以太網傳輸。
在進行采集卡編程控制之前,需要配置好探頭,保存采集卡的配置文件。探頭可以通過MC Control Tool設置圖像大小、Tap模式、快門等,保存設置之后探頭配置成功。
在軟件中,Sapera LT++庫為開發者提供訪問采集卡的接口類。SapAcquisition類可以獲取采集卡資源; SapBuffer類實現操作數據緩沖區的功能;SapTransfer類實現管理通用傳輸過程的功能,即連接SapAcquisition類和SapBuffer類,可注冊回調函數,在數據傳輸事件發生時調用回調函數,回調函數中可獲取圖像數據;SapTransfer類還提供開始采集、停止采集、單次采集等方法供開發人員實現圖像的采集控制;SapView類可以實現圖像顯示。
氣象數據處理軟件通過合理調用Sapera LT++庫,實現對采集卡的控制,獲取氣象圖像,為后續圖像處理或視頻流轉發奠定基礎。
OpenCV為一個開放源碼的計算機視覺庫,采用C/C++語言編寫,可以運行在Linux/Windows/Mac 等操作系統上。OpenCV 還提供了Python、Ruby、MATLAB以及其他語言的接口,可移植性好。它包含的函數有500多個,覆蓋了計算機視覺的許多應用領域,獨立性好。源代碼開源,可以自主開發、添加新的類庫。OpenCV 使用優化了的C 和C++代碼實現,極大地提升了計算機的運行速度[8-9]。
氣象數據處理軟件運用OpenCV中的函數實現了圖像處理過程中的一些基本算法。在采樣模式設定為圖像模式下,對采集到的圖像進行濾波、背景減除、形態學處理、輪廓提取、圖像截取等操作來獲取粒子ROI[10]。
圖像處理的基本思路如下。
① 圖像濾波,去除噪聲;
② 背景減除,得到目標的二值化圖像;
③ 形態學處理,改善圖像質量;
④ 輪廓提取,截取ROI圖像。
2.3.1 圖像濾波
得到曝光合適的待處理圖像后進行圖像濾波。圖像濾波,即在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制,是圖像預處理中不可缺少的操作,其處理效果的好壞將直接影響到后續圖像處理和分析的有效性和可靠性。常用的濾波方式有高斯濾波、中值濾波、均值濾波等。根據圖像的特點,選取高斯濾波對背景圖像和待處理圖像進行處理,去除高斯噪聲。
2.3.2 背景減除
在ROI的提取中,待處理圖像與背景圖像作差是重要步驟。背景減除是通過使用靜態攝像機來生成前景掩碼的常用的、廣泛使用的技術,是背景雜波抑制和圖像增強的重要方法[7]。首先計算兩幅圖像的差的絕對值,然后對得到的差值圖通過合適閾值的選取來生成前景掩碼,背景減除算法處理示意圖如圖4所示。

圖4 背景減除算法處理示意圖
兩幅圖像相減很好理解,算法的關鍵是通過合適閾值的選取來生成前景圖像。由于實際應用中背景的明暗或有變化,如果只給定固定閾值,得到的前景圖像較大可能會丟失粒子目標或者分割出多余錯誤粒子目標。軟件需要自動運行,不能人工干預去更改參數,所以軟件需要采用自適應的方法去選取合適的閾值進行二值化。選取一個局部性的閾值,通過規定一個指定大小的區域,比較這個點與區域內像素點的平均值(或其他算法)的大小來對這個點二值化,這樣能保證像素閾值隨著周圍鄰域塊變化。算法采用自適應閾值函數AdaptiveThreshold來實現,經反復實驗驗證像素點為中心的鄰域塊大小設置為65,局部閾值采用鄰域塊的平均算子ADAPTIVE_THRESH_MEAN_C效果較好。通過此方法得到二值化圖像[11-13],其結果如圖4(d)所示。
2.3.3 形態學處理
前景圖像中可能存在一些噪點,屬于椒鹽噪聲,采用中值濾波予以濾除。結合實驗中的實際情況,當ROI面積較大時,受噪聲影響,背景減除后得到的ROI有中空現象,針對此種情況采用形態學處理方法中的閉操作予以改善。
形態學基本處理方法為腐蝕和膨脹。腐蝕的算法:用3×3的結構元素,掃描圖像的每一個像素,并用結構元素與其覆蓋的二值圖像做“與”操作,如果都為1,結果圖像的該像素為1,否則為0。結果使二值圖像減小一圈。膨脹的算法:用3×3的結構元素,掃描圖像的每一個像素,用結構元素與其覆蓋的二值圖像做“與”操作,如果都為0,結果圖像的該像素為0,否則為1。結果使二值圖像擴大一圈。
開操作和閉操作[14]都是基于膨脹和腐蝕操作組合形成的。先腐蝕再膨脹就是開操作,先膨脹再腐蝕就是閉操作。閉操作可以用來填充前景物體中的小洞,或者前景物體上的小黑點。由此便得到了只含有ROI的二值圖像。對圖4的二值圖進行閉操作后得到非中空的分割圖如圖5所示。

圖5 閉操作后得到的圖
2.3.4 輪廓提取
從物體圖像中得到目標物體的外形輪廓稱為輪廓提取[15],輪廓提取是獲取ROI的關鍵一步,針對二值圖像,邊緣隱含在正負區域的交界處。二值圖像輪廓提取的原理就是掏空內部點,如果圖像中有一點為黑,且它的8個鄰域像素點都是黑色時,則判斷該點是內部點,并將該點刪除[16]。輪廓跟蹤是通過順序查找邊緣點來跟蹤出邊界,其基本原理為:首先在圖像中按照從左到右、從上到下的順序搜索圖像的所有像素點;其次,找到目標左上方的邊界點,它的下、左下、右、右下4個鄰點中至少有一個是邊界點,記為B;從B開始找起,按右、右下、下、左下、左、左上、上、右上的順序找相鄰點中的邊界點C;如果C是A點,則表示邊界查找已經循環一次,查找結束,否則從C點繼續找,直到找到A或找不到點為止[17]。
應用OpenCV的findContours函數可以查找圖像輪廓。使用findContours函數,得到邊緣數組,遍歷邊緣數組,進行多邊形曲線擬合、計算輪廓的垂直邊界最小矩形,在原圖中截取矩形,即可得到粒子ROI的數據。為了做展示,粒子檢測結果示意圖如圖6所示,黑框圈出的就是粒子圖,根據黑框的位置大小等信息可以計算最終的粒子數據。軟件不需要做界面顯示,僅需要保存數據、輸出數據給顯控計算機即可。

圖6 粒子檢測結果示意圖
圖像處理整個過程中不需要提前設置參數,算法可對不同粒子圖像進行自適應處理,算法速度滿足設備要求。
氣象數據處理軟件的最終目的是輸出數據給顯控計算機。氣象數據處理軟件在不同命令狀態下都需要進行數據的持續輸出。數據輸出包括3個方面的內容:背景圖像輸出、粒子ROI信息輸出、視頻流輸出。在圖像模式下,需要輸出背景圖像和粒子ROI信息。兩者通過共享內存的方式,將緩存區數據存入用戶指令的內存地址,顯控計算機將通過共享內存名稱獲取背景圖像和粒子ROI信息。粒子ROI信息包括ROI圖像的中心點(x,y)坐標、ROI圖像的寬度和高度、此幀圖像中包含的ROI數量、當前ROI的序號、ROI圖像數組、時間信息等。在視頻模式下,需要將獲取的圖像借助FFmpeg庫實現視頻流編碼,按H.264標準編碼轉換為AVPacket類型的數據,轉換好的視頻流直接根據TCP/IP協議通過以太網轉發至顯控計算機。
2.5.1 采集卡操作編程實現
氣象數據處理軟件中,主要利用Sapera LT++庫提供的接口類實現采集卡的相關操作。
SapManager為一個管理類,通過此類獲取采集卡名稱、數量,設備號等信息。
serverCount = SapManager::GetServerCount();//獲取采集卡數量
SapManager::GetServerName(serverIndex,acqServerName,
CORSERVER_MAX_STRLEN);//遍歷獲取采集卡名稱
resourceCount=SapManager::GetResourceCount(acqServerName,SapManager::ResourceAcq);//獲取設備數量
SapManager::GetResourceName(acqServerName,SapManager::ResourceAcq,resourceIndex,resourceName);//獲取設備名稱
聲明SapAcquisition采集類、SapBuffer 緩沖區類、SapTransfer轉換類、SapView顯示類的成員變量:
SapAcquisition *m_Acq;
SapBuffer *m_Buffers;
SapTransfer *m_Xfer;
SapView *m_View;
通過SapTransfer對象實現圖像采集:
開始采集:
m_Xfer->Grab();
停止采集:
m_Xfer->Freeze();
單次采集:
m_Xfer->Snap();
2.5.2 圖像處理編程實現
圖像處理工作數據量大、速度快,為此采用多線程技術,單獨占用一個線程進行氣象圖像處理。
探測信息處理設備軟件在采樣模式設定為圖像模式下,對背景圖像和待處理圖像進行濾波、背景減除、形態學處理、輪廓提取、圖像截取等操作來獲取粒子ROI。
① 對背景圖像和待處理圖像分別進行高斯濾波。
GaussianBlur( BK,BK_dst,Size( i,i ),0,0 );//背景圖像
GaussianBlur( source,dst,Size( i,i ),0,0 );//待處理圖像
② 背景減除。
absdiff(source,BK,absFrameDifferece);//減法函數
minMaxIdx(absFrameDifferece,min,max);//取減除后圖像的灰度最大值、最小值
adaptiveThreshold(absFrameDifferece,segmentation,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,25,0);//自適應閾值算法
③ 輪廓提取。
findContours(segmentation,contours,hierarchy,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));//獲取邊界
vector< vector
contours_poly(contours.size());//輸出多邊形點集
approxPolyDP(Mat(contours[index]),contours_poly[index],3,true);//多邊形曲線擬合
介紹了一種增雨機中氣象數據處理軟件的設計和實現方法。基于探測信息機的組成和結構,對氣象數據處理軟件的設計和實現進行了詳細描述。軟件結構清晰,圖像處理部分算法合理,無需設定參數,自適應進行,圖像處理速度滿足要求。氣象數據處理軟件已成功應用于某型增雨機中。