鄒富墩,楊健
(中國船舶重工集團公司第七二六研究所,上海 201108)
艦艇火災發展早期階段是艦艇火災防治的關鍵時期,其火災探測性能對后續火災撲救具有重大影響。為了解決艦船火災早期的探測,考慮基于紅外熱檢測技術設計開發艦船早期探測紅外熱成像系統,通過對監控設備的紅外熱輻射進行采集并呈現紅外熱圖像,進而對紅外熱圖像進行分析可以實現對設備早期的異常故障進行預警,但是紅外熱成像系統由于工藝水平限制和數據傳輸中存在的干擾,采集到紅外探測器的像素元素會存在一定數量的盲元(紅外探測器中響應過低的探測單元),導致紅外熱成系統輸出的紅外熱圖像往往會存在比較多的亮暗點,嚴重影響紅外熱圖像的質量。盲元的數量和分布對紅外探測器器件性能的影響較大,因此有必要對紅外焦平面器件中的盲元進行檢測和補償。紅外熱成像系統隨著溫度和時間的變化,探測器像元響應的非均勻性會越來越嚴重。所以紅外熱成像系統需要對采集到的紅外探測器像元數據進行非均勻校正和盲元檢測及補償,擬采用兩點校正算法對探測器像元的增益因子和偏移因子進行實時的更新,采用簡化的動態的盲元檢測技術并采用鄰域替代法,提取盲元周圍的有效圖像數據或前后幀的圖像數據對盲元進行替代。
基于紅外熱成像檢測技術設計開發的紅外熱成像系統,可以大幅提高艦艇火災超早期探測系統的開發能力,紅外熱成像系統整體框架見圖1。
圖1 紅外熱成像系統框架
整個紅外熱成像系統包括前端采集模塊、數據處理模塊兩大部分。前端采集模塊包括光學鏡頭模塊、調零機構、FPA探測器、DAC/ADC模塊。其中,光學鏡頭模塊用于過濾光譜以及構造光路,將視場范圍內的屬于特定光譜范圍內的紅外光線聚焦于紅外探測器模塊,紅外探測器模塊實現紅外輻射信號到數字電信號的轉換,FPGA模塊將轉變的紅外輻射電信號進行數據處理,主要進行非均勻校正、盲元補償、紅外熱圖像故障降噪算法實現、紅外輻射測溫算法實現以及紅外熱故障判定算法實現、紅外熱圖像增強算法實現。
FPGA模塊包括FPGA芯片、兩片高速SDRAM、FLASH存儲器、FPGA串行配置芯片、RS232串口電路、視頻輸出等。高速SDRAM 0主要用于緩存兩點校正參數(實時校正時)或圖像數據(標定時),高速 SDRAM 1作為NIOS II系統的存儲器。FLASH存儲器主要保存每個探測元兩點校正參數(設定了若干組校正參數,每組參數對應不同的環境溫度區)、調試設定的電壓參數以及FPGA邏輯程序和NIOS固件程序。RS232串口電路主要用在用戶對機芯的控制。
紅外熱成像系統中,一般都是采用兩點校正法來實現FPA探測器的非均勻性校正。
1)計算探測器每個探測單元的校正因子,即完成該探測器非均勻性校正的標定,此操作一般在出廠前進行。
2)根據標定得到的校正參數,在探測器實時圖像輸出時對每個探測單元輸出的信息進行實時非均勻校正。
探測器的非均勻校正的標定需要通過探測器對均勻輻射的黑體的響應來進行標定。考慮到單幀圖像獲取時可能存在干擾。因此,標定時需要采集探測器給出的幀圖像,并求出這幀圖像的平均值,作為探測器的實際響應值。
校正算法設計實現過程中通過對校正使能信號, 校正累加和清零使能信號,多幀圖像累加使能信號進行管理(見圖2),這樣可以方便的求得探測器的N幀圖像的累加和并求得其平均值。
圖2 幀圖像累加和及其平均值的計算
根據兩點校正算法,設探測器在低溫和高溫下對光路中插入的均勻輻射的黑體的標準響應分別為和,探測器的探測單元(,)在低溫下和高溫下的實際響應為L和H,則有
=(L+)
(1)
=(H+)
(2)
式中:和分別為探測單元(,)的偏移因子和增益因子,求解上述二元方程,可得
(3)
(4)
紅外熱成像系統出廠前,標定所得探測器的偏移和增益因子將會保存在紅外熱成像系統中的非易失Flash中,系統上電后由FPGA內的NIOS處理器將其從Flash中讀出,存入SDRAM0,默認讀取的是環境溫度區的校正因子。
實時校正時,FPGA將讀取外部SDRAM中的校正因子,并將其送給FPGA系統中的實時校正計算模塊進行非均勻校正。
FPGA 對采集到的探測器數據進行非均勻校正后,將會對探測器的所有像素點進行盲元檢測和補償,盲元有效性判定規則如下。
1)如果單個探測元的增益因子過大(高于16),那么該探測元被認為是盲元。
2)計算有效的探測元的增益因子的均值AverageGain。如果單個探測元的增益不在(AverageGain-512,1.5*AverageGain+512)范圍內,那么,該探測元也將被認為是盲元。
為了簡化硬件模塊的盲元補償邏輯,在軟件實現過程中對整個探測器所有像元動態的放進一個3×3矩形區域,對該矩形區域內的9個像元進行判定,并修改像元的增益因子,具體修改規則如下。
1)若為0,表示該像元是有效元。
2)如果盲元在第一行、第一列,那么將設為1;最后一列,將設為2;否則,將設為5。
3)如果盲元在最后一行、第一列,將設為3;最后一列,將設為4;否則,將設為7。
4)如果盲元不在第一行和最后一行,第一列,那么將設為6;最后一列,將設為8;否則,將設為9。
采用鄰域替代法來進行盲元補償,根據盲元檢測后獲取的增益因子的值來進行補償。
1)對于處在第一行或者第一列或者最后一行或者最后一列,即處在圈定的3×3矩形區域的4條邊上的壞點替換原則:先從同一行(右左)中尋找非壞點(通過判斷是否為0);若無,從同一列(上下)中尋找非壞點;若無,從對角線尋找(右左,上下)。
①如果為1。按照先相鄰后一點、相鄰下一點、相鄰對角線右下一點順序來進行補償。即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值,否則,按照上述順序繼續查找,直到找到非盲元的那一點,并將當前盲元的值設為那一點的值。
②如果為2。按照先相鄰前一點、相鄰下一點、相鄰對角線左下一點順序來進行補償,即如果相鄰前一點不是盲元,那么將當前盲元的值設為相鄰前一點的值;否則,按照上述順序繼續查找,直到找到非盲元的那一點,并將當前盲元的值設為那一點的值。
③如果不為3。按照先相鄰后一點、相鄰上一點、相鄰對角線右上一點順序來進行補償,即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值;否則,按照上述順序繼續查找,直到找到非盲元的那一點,并將當前盲元的值設為那一點的值。
④如果為4。按照先相鄰前一點、相鄰上一點、相鄰對角線左上一點順序來進行補償,即如果相鄰前一點不是盲元,那么將當前盲元的值設為相鄰前一點的值;否則,按照上述順序繼續查找,直到找到非盲元的那一點,并將當前盲元的值設為那一點的值。
⑤如果為5。按照先相鄰后一點、相鄰前一點、相鄰下一點、相鄰對角線右下一點、相鄰對角線左下一點順序來進行補償,即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值;否則,按照上述順序繼續查找,直到找到非盲元點,并將當前盲元值設為那一點的值。
⑥如果為6。按照先相鄰后一點、相鄰上一點、相鄰下一點、相鄰對角線右上一點、相鄰對角線右下一點順序來進行補償,即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值;否則,按照上述順序繼續查找,直到找到非盲元點,并將該盲元值設為那一點的值。
⑦如果為7。按照先相鄰后一點、相鄰前一點、相鄰上一點、相鄰對角線右上一點、相鄰對角線左上一點順序來進行補償,即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值;否則,按照上述順序繼續查找,直到找到非盲元點,并將該盲元值設為那一點的值。
⑧如果為8。按照先相鄰前一點、相鄰上一點、相鄰下一點、相鄰對角線左上一點、相鄰對角線左下一點順序來進行補償,即如果相鄰前一點不是盲元,那么將當前盲元的值設為相鄰前一點的值;否則,按照上述順序繼續查找,直到找到非盲元點,并將當前盲元值設為那一點的值。
2)不在矩形區域邊上的壞點替換原則(為9)。從經過壞點的4條直線中尋找灰度變化最小的點;如果經過壞點的直線中有盲元,則將該直線上的參考點全部舍棄,并且判斷沒有盲元的直線的灰度變化,選擇灰度變化最小的點。
如果經過壞點的4條直線中都沒有盲元,則選擇灰度變化最小的點;如果經過壞點的4條直線中都有盲元,則依次判斷盲元周圍相鄰的8個點是否是非盲元。按照先相鄰后一點、相鄰前一點、相鄰上一點、相鄰下一點、相鄰對角線右上一點、相鄰對角線左上一點、相鄰對角線右下一點、相鄰對角線左下一點順序來進行補償。即如果相鄰后一點不是盲元,那么將當前盲元的值設為相鄰后一點的值;否則,按照上述順序繼續查找,直到找到非盲元的那一點,并將當前盲元的值設為那一點的值。
艦船火災早期探測紅外熱成像系統需要實時的對探測器采集的到的紅外圖像進行實時校正和盲元處理,FPGA模塊會頻繁的對外部存儲器進行訪問讀寫。
FPGA模塊邏輯訪問外部SDRAM時,需要向外部SDRAM寫以下數據:偏移因子、濾波后的圖像數據、經過處理后的視頻數據;需要從外部SDRAM讀6種數據:偏移因子、增益因子、濾波后的圖像數據、需要作增強處理的圖像數據。FPGA模塊的NIOS II軟核處理器訪問外部SDRAM時,需要向外部SDRAM寫增益因子、FPA探測器配置電壓數據。
對于FPGA邏輯寫外部SDRAM時,需要向外部SDRAM寫的3個數據是在一行內按順序進行3次寫操作。需要注意的是,不校正的時候不需要向外部寫偏移因子,只需要寫濾波后的圖像數據、經過處理后的視頻數據。
進行實時校正的時候,FPGA按偏移因子、濾波后的圖像數據、經過處理后的視頻數據順序向外部SDRAM依次寫到SDRAM0的對應數據存儲區域。
從外部SDRAM讀取數據時,先將讀取的數據緩存入FIFO中,再根據讀操作時序將讀取的數據分別存入各自的FIFO中進行緩存。
往外部SDRAM寫數據時,先將3種數據分別存入3個FIFO中進行緩存,再根據寫操作時序將3個FIFO中緩存的數據讀出依次寫入FIFO中,最后從FIFO中讀出寫到外部SDRAM中。
在設計開發過程中,必須注意FPGA對外部SDRAM讀寫操作時序的設計。寫操作應發生在讀操作后,第1幀來后讀操作只是將標定存入FLASH的偏移和增益因子從外部SDRAM0里面讀出來,第1幀寫操作將圖像數據以及更新后的偏移因子存入外部SDRAM緩存1幀,等待第2幀進行讀操作將處理過的圖像數據讀出并顯示以及讀出偏移因子對圖像數據進行偏移校正并對偏移因子值進行更新。這里特別需要注意一點的是讀操作讀取的數據永遠是上一幀寫操作寫入到外部SDRAM的相應的數據。
讀寫操作采用的是流水線模式,先處理第行的圖像數據,從外部SDRAM讀取數據并寫入FIFO中進行緩存;再處理第+1行的圖像數據,從FIFO中讀取第行緩存的數據送入實時校正和盲元處理模塊進行數據處理,同時將上一行處理后產生的數據寫入FIFO中進行緩存;接著處理第+2行的圖像數據,將+1行緩存在FIFO的數據讀出并寫入外部SDRAM中,具體讀寫操作流水線模式見圖3。
圖3 讀寫操作的流水線模式
艦船火災早期探測紅外熱成像系統可以在火災發生的早期對所監控的周圍環境發生的輻射能量進行采集并呈現紅外熱圖像,紅外熱圖像的質量的高低對后期的圖像數據分析具有較大的影響。針對影響紅外熱圖像質量的盲元數據以及探測單元響應的非均勻性進行實時動態的非均勻校正和盲元檢測及補償算法分析表明,采用兩點校正算法實時的對像元增益因子和偏移因子進行更新和動態鄰域補償算法能對探測器的每個單元盲元處理,可以大大提高紅外熱圖像的質量。