英昌盛
(吉林師范大學(xué)計(jì)算機(jī)學(xué)院,吉林四平136000)
基于MatlabGUI的數(shù)字圖像信息統(tǒng)計(jì)
英昌盛
(吉林師范大學(xué)計(jì)算機(jī)學(xué)院,吉林四平136000)
在光電成像系統(tǒng)獲取數(shù)字圖像過(guò)程中,由于輸入光子起伏、CCD暗電流及CCD讀出噪聲等原因使圖像質(zhì)量退化,數(shù)字圖像需要經(jīng)過(guò)處理后才能獲得比較理想的效果。信息統(tǒng)計(jì)是對(duì)降質(zhì)圖像進(jìn)行預(yù)處理的一個(gè)重要環(huán)節(jié)。本文應(yīng)用MatlabGUI設(shè)計(jì)了數(shù)字圖像信息統(tǒng)計(jì)處理程序,為圖像去噪及增強(qiáng)等后期工作提供必要數(shù)據(jù)支持。
噪聲;正態(tài)分布;GUI;篩選;填充
隨著光電成像技術(shù)的不斷發(fā)展,數(shù)碼相機(jī)、手機(jī)等成像設(shè)備在人類生活各個(gè)領(lǐng)域中的應(yīng)用越來(lái)越廣泛。成像設(shè)備將拍攝的場(chǎng)景以數(shù)字形式保存在其存儲(chǔ)器中,用戶既可以在設(shè)備上進(jìn)行瀏覽,亦可使用和開(kāi)發(fā)專門(mén)的圖像處理軟件來(lái)對(duì)這些數(shù)字圖像進(jìn)行加工、處理以獲得更好的用戶體驗(yàn)。
便攜數(shù)碼相機(jī)、手機(jī)等非專業(yè)成像設(shè)備在實(shí)際使用過(guò)程中所獲得的數(shù)字圖像并不理想,往往伴隨著大量噪聲[1]。導(dǎo)致數(shù)字圖像中出現(xiàn)的噪聲原因多種多樣,除了器件自身的缺陷、設(shè)備中電子器件特性等原因外,光照條件是影響成像質(zhì)量的重要因素。只有獲得與數(shù)字圖像噪聲相關(guān)的統(tǒng)計(jì)信息,才能有的放矢地對(duì)圖像進(jìn)行去噪和增強(qiáng)等后期處理。
對(duì)于數(shù)字圖像Z而言,可將其看作理想圖像Y與具有某種統(tǒng)計(jì)特征的噪聲η的線性疊加,表述如下[2]:
Z(x,y)=Y(x,y)+η(x,y).
其中,Z為經(jīng)過(guò)實(shí)際觀測(cè)并獲取的數(shù)字圖像,Y為理想的不含噪聲數(shù)字圖像,η為具有某種統(tǒng)計(jì)特征的加性噪聲。通常情況下,可認(rèn)為加性噪聲為服從標(biāo)準(zhǔn)正態(tài)分布N(0,σ2)的高斯白噪聲。
服從正態(tài)分布N(μ,σ2)的數(shù)據(jù)滿足3σ原則[3],即數(shù)據(jù)分布在以均值μ為中心1個(gè)標(biāo)準(zhǔn)差范圍內(nèi)的概率為0.6526;分布在以均值μ為中心2個(gè)標(biāo)準(zhǔn)差范圍內(nèi)的概率為0.9544;分布在以均值μ為中心3個(gè)標(biāo)準(zhǔn)差范圍內(nèi)的概率為0.9976。
Matlab是美國(guó)MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,向量化編程是Matlab語(yǔ)言的精髓,通過(guò)向量化處理與運(yùn)算可以極大提高程序運(yùn)行效率。用戶既可以通過(guò)腳本控制Matlab軟件進(jìn)行科學(xué)計(jì)算,也可通過(guò)GUI工具開(kāi)發(fā)帶用戶界面的科學(xué)計(jì)算軟件。
2.1 數(shù)字圖像信息統(tǒng)計(jì)程序界面設(shè)計(jì)
在Matlab中,使用GUIDE創(chuàng)建如圖1所示的應(yīng)用程序界面。界面左側(cè)是圖像的選擇部分,用于打開(kāi)圖像文件夾和篩選指定類型的數(shù)字圖像,將篩選后圖像添加到列表。界面中間部分則用于顯示數(shù)字圖像的統(tǒng)計(jì)信息,包括均值、最值、標(biāo)準(zhǔn)差、眾值等,同時(shí)還可根據(jù)標(biāo)準(zhǔn)差或指定數(shù)值對(duì)數(shù)據(jù)進(jìn)行篩選,并顯示篩選結(jié)果。界面右側(cè)部分則用于顯示選定圖像的直方圖。
圖1 數(shù)字圖像信息統(tǒng)計(jì)程序界面
2.2 數(shù)字圖像信息統(tǒng)計(jì)的實(shí)現(xiàn)
“選擇圖像文件夾”按鈕的事件處理程序?qū)⒂脩糁付ㄎ募A下與設(shè)定類型匹配的所有圖像添加到列表中。在處理程序中,需要設(shè)定用于保存圖像文件路徑及圖像文件名的全局變量,然后取用戶指定的文件類型,再對(duì)圖像文件夾下的所有文件進(jìn)行篩選,并將篩選結(jié)果保存到全局變量列表中。
function btnSelectFile_Callback(hObject, eventdata, handles)
global folderPath;
global imgFiles;
folderPath=uigetdir(”,’請(qǐng)選擇圖像文件所文件夾’);
fileType=get(handles.editFileType,’String’);
imgFiles=dir([folderPath ’’ fileType]);
strNames={imgFiles.name};
set(handles.lsbImages,’String’,strNames);
……
axes(handles.axesHist);%獲取界面中的axes句柄
cla reset;
當(dāng)選擇某一圖像時(shí),需要對(duì)圖像進(jìn)行信息統(tǒng)計(jì)并顯示其直方圖。均值、標(biāo)準(zhǔn)差、最值、中值和眾數(shù)等信息需在各個(gè)模塊間共享,因而聲明為全局變量。針對(duì)用戶選擇的圖像,統(tǒng)計(jì)上述信息并將統(tǒng)計(jì)后的結(jié)果保存到相應(yīng)位置,同時(shí)還需要將指定范圍外的數(shù)據(jù)填充到相應(yīng)的數(shù)據(jù)列表中。
function lsbImages_Callback(hObject, eventdata, handles)
……
sel=get(gcf,’SelectionType’);
if strcmp(sel,’normal’)
index=get(hObject,’Value’);
pathName=folderPath;
%取出索引對(duì)應(yīng)的圖像文件名
fileName=imgFiles(index).name;
imageFile=fullfile(pathName,fileName);
img=double(imread(imageFile));
imgMean=mean(img(:));%均值、標(biāo)準(zhǔn)差、最小值、最大值、中位數(shù)、眾數(shù)
imgStdDev=std(img(:));
imgMin=min(img(:));
imgMax=max(img(:));
imgMedian=median(img(:));
imgMode=mode(img(:));
axes(handles.axesHist);%獲取界面中的axes句柄
hist(img(:),imgMin:imgMax);
%將取得的統(tǒng)計(jì)信息輸出到表格
set(handles.tbStat,’Data’,[imgMean imgStdDev imgMin imgMax imgMedian imgMode imgMax-imgMin]);
set(handles.tbOutNum,’Data’,[]);
set(handles.tbOutLower,’Data’,[]);
set(handles.tbOutLarger,’Data’,[]);
……
end
為實(shí)現(xiàn)代碼重用,對(duì)篩選后數(shù)據(jù)的填充工作通過(guò)一個(gè)公共函數(shù)來(lái)完成。根據(jù)全局變量和用戶指定的標(biāo)準(zhǔn)差范圍,篩選并提取符合條件的數(shù)據(jù),之后將數(shù)據(jù)填充到列表中。
function Process_LowerUpper(handles)
global img;
global imgMean;
global imgStdDev;
global stdSelect;
str=get(handles.editStdDev,’String’);
stdSelect=str2double(str);%獲取用戶指定的標(biāo)準(zhǔn)差
[rowLarge,colLarge,valLarge]=find(img>(imgMean+stdSelect*imgStdDev));
lenLarge=size(rowLarge,1);
pixsLarge=zeros(lenLarge,1);
for i=1∶lenLarge
pixsLarge(i)=img(rowLarge(i),colLarge(i));
end
set(handles.tbOutLarger,’Data’,[rowLarge,colLarge pixsLarge]);
[rowLow,colLow,valLow]=find(img<(imgMean-stdSelect*imgStdDev));
lenLow=size(rowLow,1);
pixsLow=zeros(lenLow,1);
for i=1∶lenLow
pixsLow(i)=img(rowLow(i),colLow(i));
end
set(handles.tbOutLower,’Data’,[rowLow colLow pixsLow]);
height=size(img,1);
width=size(img,2);
totalPixels=height*width;
ratioLower=100*lenLow/totalPixels;
ratioLarger=100*lenLarge/totalPixels;
set(handles.tbOutNum,’Data’,[totalPixels lenLow ratioLower lenLarge ratioLarger]);
在實(shí)驗(yàn)過(guò)程中,本文以便攜數(shù)碼相機(jī)拍攝的數(shù)字圖像為例展示了獲取圖像統(tǒng)計(jì)信息的過(guò)程,程序運(yùn)行結(jié)果如圖2所示。在圖2中,由均值及方差等統(tǒng)計(jì)數(shù)據(jù)可知圖像亮度整體較暗,但從數(shù)據(jù)列表和圖像直方圖可以看出圖像中存在一部分高亮度值數(shù)據(jù)。根據(jù)上述信息可以推斷圖像是在環(huán)境照度較低條件下拍攝獲得,光子噪聲和CCD暗電流噪聲是圖像的主要噪聲源。
圖2 數(shù)字圖像信息統(tǒng)計(jì)程序運(yùn)行結(jié)果
經(jīng)實(shí)際測(cè)試,軟件有效獲取了數(shù)字圖像的統(tǒng)計(jì)信息,為進(jìn)一步有針對(duì)性地對(duì)圖像進(jìn)行去噪和增強(qiáng)等處理過(guò)程提供了必要支持。
[1]Rafael C Gonzalez,Richard E Woods,Steven L Eddins,等.數(shù)字圖像處理(MATLAB版)[M].北京:電子工業(yè)出版社,2013.
[2]Dabov K,Foi A,Egiazarian K.Image denoising with block-matching and 3D filtering[J].Proceedings of SPIE - The International Society for Optical Engineering,2006(6064):354-365.
[3]盛驟.概率論與數(shù)理統(tǒng)計(jì)[M].3版.北京:高等教育出版社,2001.
Digital Image Information Statistics Based on MatlabGUI
YING Chang-sheng
(Jilin Normal University, Siping Jilin 136000,China)
In the process of acquiring digital images in photo-electric imaging system, degraded images must be technically processed because of the impact introduced by photon shot noise, CCD dark current noise, CCD readout noise and so on. Information statistics is an important pre-processing step in digital image processing. In the article, we have designed an information statistics program of digital images using MatlabGUI, and it provided necessary data for further processing step, such as image denoising and image enhancement etc.
noise; normal distribution; GUI; filtering; filling
2017-03-20
英昌盛(1979- ),男,講師,從事計(jì)算機(jī)應(yīng)用研究。
TP312
A
2095-7602(2017)08-0055-04