陽 平,夏小華
(92941部隊43分隊, 遼寧 葫蘆島 125001)
紅外熱像儀在使用過程中,不可避免地會出現壞元。壞元在紅外圖像中表現為過亮或者過暗的點[1,2]。壞元的存在不僅影響紅外熱像儀的成像效果[3],對于軍事上探測用的紅外熱像儀,還可能影響設備性能和作戰使用[4]。如何快速、簡便地實現壞元檢測,就顯得尤為重要。MATLAB具有強大的數值計算[5,6]和圖像處理[7]功能,其自帶的圖形用戶界面(GUI)工具箱可用以開發可視化界面,在該界面通過調用MATLAB強大的數值計算功能,可以方便地完成特定操作[8]。本研究基于MATLAB GUI開發了紅外圖像壞元檢測軟件,界面直觀,操作方便,可為紅外熱像儀的日常使用和維護提供便利。
壞元紅外圖像的特征是和周圍正常像元在灰度上有明顯的差異[9]。因此,首先查找局部區域灰度突出的像元。以5×5大小的窗口對所有焦平面像元逐一檢測[10]。通過比較像元與窗口內平均灰度水平的差異進行壞元檢測,判別準則為
(1)

綜上,壞元檢測流程如圖2所示。
1) 繪制紅外圖像的灰度直方圖;
2) 檢測紅外圖像中的壞元;
3) 給出壞元的數量和位置信息;
4) 將檢測出的壞元在圖像中標記顯示。
根據軟件的功能,設計軟件結構如圖3所示。
使用MATLAB GUIDE界面進行軟件設計。根據軟件的功能需求,設計了菜單和功能模塊兩種操作方式。功能模塊用到的組件有Axes(坐標軸),Push Button(按鈕),Edit Text(可編輯文本)和Table(表格)。具體功能為:4個Axes,分別用于顯示紅外圖像原圖、灰度直方圖、壞元檢測進度和對壞元進行標記;4個Push Button分別實現紅外圖像的讀入、繪制灰度直方圖、壞元檢測和關閉軟件;1個Edit Text用于顯示壞元數量;1個Table用于顯示壞元的位置信息。對于每個組件,可以雙擊后在彈出的屬性框里修改屬性,為方便程序編寫,一般需要修改標簽(Tag)。
在GUIDE界面布置完各個組件后,開始編寫各個組件的回調函數。
1) 紅外圖像讀入與處理模塊
在MATLAB中,使用imread函數讀入圖片,其格式為:imread(fpath),fpath為圖片完整的路徑。使用imshow函數顯示圖片,其格式為imshow(I),I為待顯示的圖片。編寫紅外圖像的讀取和顯示的回調函數,如下:
function m_file_open_Callback(hObject,eventdata,handles)
[FileName,PathName]= uigetfile({′*.bmp;*.jpg;*.png;*.jpeg′,′Image Files (*.bmp,*.jpg,*.png,*.jpeg)′;′*.*′,′All Files (*.*)′},′讀入紅外圖像′); %讀入圖片格式的紅外圖像文件
if isequal(FileName,0) || isequal(PathName,0)
return; %無操作
end
global img_origin
axes(handles.axes_origin); %設定當前操作的坐標軸是axes_origin
fpath=[PathName FileName]; %將文件名和目錄名組合成一個完整的路徑
img_origin=imread(fpath); %讀入圖片
imshow(img_origin)
由于讀入的紅外圖像在其他回調函數中也會用到,因此用global命令將img_origin定義成全局變量。在每個用到img_origin的回調函數中,都要用global重新定義一遍。
使用imhist函數繪制圖像的灰度直方圖,格式為imhist(img_origin)。
2) 壞元檢測與標記模塊
首先,定義壞元的統計量。
I=img_origin;
I=double(I); %將紅外圖像轉換成雙精度數據
BadNum=0; %統計壞元個數;
BadLoc=zeros(size(I)); %統計壞元位置
BadRow=zeros(1000,1); %壞元所在行
BadCol=zeros(1,1000); %統計所在列

檢測完畢后,Edit Text用于顯示壞元數量,實現代碼如下:
set(handles.valdsp_result,′string′,[′壞元數量:′,num2str(BadNum),′個′]);
同時,將壞元的位置信息在表格中顯示,其代碼如下:
uitable(handles.uitable_result);
tblist=[(1:BadNum)′,BadLoc(1:BadNum)′,BadRow(1:BadNum),BadCol(1:BadNum)′];
set(handles.uitable_result,′Data′,tblist);
在圖像上對壞元進行標記,其代碼如下:
axes(handles.axes_result)
imshow(img_origin)
hold on
for t=1:BadNum
plot(BadCol(t),BadRow(t),′ow′) %在圖像中,對壞元的位置進行標記
end
壞元檢測軟件的M文件編寫完畢后,使用mcc命令對GUI的m文件進行編譯,生成.exe可執行文件。但是該可執行文件需要MATLAB環境的支持。為了能在沒有安裝MATLAB的計算機上運行,還需要打包MATLAB組件運行環境(Matlab Component Runtime,MCR)[11]。在MATLAB命令窗口輸入deploytool命令并運行,彈出“MATLAB Compliler”窗口,點擊“Application Compiler”按鈕,即進入Deployment主窗口,添加待打包的M文件,并勾選“Runtime included in package”,點擊Package,即完成了軟件打包。打包生成的可執行文件可脫離MATLAB環境運行。
軟件用戶界面如圖4所示。軟件設計了菜單欄、圖像/表格顯示區和功能操作區三個功能區域。
進入軟件后,點擊讀入紅外圖像按鈕,從計算機存儲設備選擇待檢測的紅外圖像,選擇完成后,原始圖像下方會顯示紅外原圖。點擊灰度直方圖按鈕,生成和顯示圖像的灰度直方圖。點擊壞元檢測按鈕,開始檢測壞元,進度條上實時顯示檢測進度。檢測完成后,會給出壞元數量、位置信息,并在壞元檢測結果圖上對壞元進行標記顯示。
圖5是軟件對某紅外圖像的壞元檢測結果。
軟件運行結果直觀顯示了圖像中的壞元,并且給出了壞元的數量和精確位置。應用結果表明,軟件對不同類型的壞元都能夠有效識別,取得了很好的檢測效果。
采用Matlab GUI工具箱對壞元檢測方法進行了可視化軟件設計。軟件可繪制紅外圖像的直方圖、檢測圖像中的壞元、獲取壞元的位置信息并將壞元在圖像中標記顯示。軟件操作直觀簡便,測試結果表明,該軟件可實現壞元的快速準確定位,具有很強的應用價值。