,,
(廣東省水利水電科學(xué)研究院 廣東省水動力學(xué)應(yīng)用研究重點實驗室,廣州 510635)
在研究過程中,常發(fā)現(xiàn)一些重要的數(shù)據(jù)資料以圖像方式保存,而無對應(yīng)的數(shù)據(jù)表格,具體的數(shù)值只能通過目測或者手動量測,精度和效率均較低,影響到一些重要數(shù)據(jù)的保存和獲取,特別是一些年代較為久遠(yuǎn)的文檔的掃描圖像不夠清晰,很難通過其它渠道或目測獲取圖形對應(yīng)的數(shù)據(jù)。另外,一些儀器如測振儀等其測試輸出均為曲線型式而無具體數(shù)據(jù)量,須通過一定算法將曲線進行數(shù)據(jù)量化[1]。鑒于此,本文提出利用數(shù)值處理軟件MATLAB的圖像處理功能,并結(jié)合圖形處理軟件PHOTOSHOP的位圖處理功能,實現(xiàn)對位圖圖像的數(shù)字化,并以某潮位位圖為例,對潮位過程進行精確提取。方法可廣泛地應(yīng)用于類似圖件的數(shù)值化處理。
MATLAB(Matrix Laboratory,矩陣實驗室)是美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,其基本的數(shù)據(jù)結(jié)構(gòu)為數(shù)組[2]??捎糜谶M行矩陣運算、繪制函數(shù)和數(shù)據(jù)、實現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計算、控制設(shè)計、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計與分析等領(lǐng)域,是目前使用最廣泛的工程應(yīng)用軟件之一[3]。MATLAB數(shù)字圖像處理技術(shù)采用一定的數(shù)字規(guī)格,通過數(shù)組(矩陣)對圖像進行保存和數(shù)字化,矩陣中的每個元素對應(yīng)圖像的一個像素點,其取值大小則由顏色和圖像模式來確定[4-8]。在位圖模式下,其圖像深度為一位,即僅有黑色和白色2種顏色,在矩陣中值表現(xiàn)為0和1,可以通過0或1數(shù)值在矩陣中的相對位置精確確定其坐標(biāo)數(shù)值。
PHOTOSHOP是Adobe公司推出的跨越PC和MAC兩界首屈一指的大型圖像處理軟件,功能強大[9],內(nèi)嵌眾多實用的工具和強大的圖像處理功能,操作界面簡單清晰,支持眾多的圖像格式,并擁有眾多第三方廠家的支持,是圖像編輯的首選軟件。
對于以圖像形式保存的相關(guān)數(shù)據(jù)流,首先進行適當(dāng)?shù)那疤幚?,如除漬、單張化及掃描成圖,然后利用PHOTOSHOP對成圖進行灰度化,并進行旋轉(zhuǎn)扭正和單色色階處理,并對圖像范圍進行裁剪并增設(shè)像素點,同時為方便程序讀取圖像時排除其它非關(guān)鍵色素的干擾,刪除除潮位過程及坐標(biāo)軸以外的圖像,在單像素點尺度下進行關(guān)鍵點的描繪后進行位圖化處理,關(guān)閉原始圖層僅保留關(guān)鍵點圖層后保存圖像;后利用MATLAB的圖像讀取功能讀取僅含有關(guān)鍵點圖層的圖像,并通過程序?qū)D像矩陣中關(guān)鍵點位置進行遍歷和處理,最終得到各關(guān)鍵點的坐標(biāo)值。數(shù)字化流程見圖1所示。
圖1 數(shù)字化流程
對于位圖化,PHOTOSHOP提供了非常便利的圖像模式轉(zhuǎn)換功能,首先打開前處理好的掃描圖件,雙擊當(dāng)前圖層解鎖,直接選擇菜單→圖像→模式→灰度;對研究區(qū)域進行裁剪以窄化圖像邊緣;然后增加像素點,選擇菜單→圖像→圖像大小,錄入橫縱寬度和高度像素,使其均超過1 000 pixel(提取后數(shù)據(jù)小數(shù)點位數(shù)可達(dá)0.001);而后進行色階處理,選擇菜單→圖像→調(diào)整→色階,用一定閾值對圖像灰度進行黑白化處理,進行關(guān)鍵點描繪。因大多點線型曲線圖數(shù)據(jù)的橫標(biāo)基本上為整數(shù)固定值,其潮位點與橫坐標(biāo)對應(yīng),因此對于點線型圖像,關(guān)鍵點的描繪主要集中在縱坐標(biāo)和潮位點;對于連續(xù)曲線型圖像,則尚需點繪橫坐標(biāo)關(guān)鍵點。點繪時,首先將圖像放大到最大級別,以可見單獨的像素塊為準(zhǔn),然后新建圖層,利用鉛筆工具(鉛筆大小選擇1 pix),前景色選擇黑色,按照像素塊的大小位置進行精確的點繪。而后進行位圖化,選擇菜單→圖像→模式→位圖化,分辨率則根據(jù)掃描圖件的尺寸進行適當(dāng)調(diào)整,分辨率大小與提取精度正相關(guān)。關(guān)閉原始圖層僅保留關(guān)鍵點圖層,保存為PNG格式圖片。
用MATLAB對PNG圖片進行讀取,選用Imread函數(shù)。Imread的讀取格式為:A=imread(filename,fmt),A為讀取后的圖像矩陣,filename為圖像名稱,fmt為圖像格式。對于連續(xù)曲線型圖像,因曲線部位并非為單獨像素塊,因此可利用MATLAB提供bwmorph位圖處理函數(shù)對曲線進行細(xì)化。通過圖像矩陣A的解析和程序化處理,可得到關(guān)鍵點的相對位置,從而得到各關(guān)鍵點的坐標(biāo)值。
3.1.1 潮位資料
某潮位站冬季小潮流速圖以紙質(zhì)形式保存,掃描后經(jīng)旋轉(zhuǎn)扭正及灰度化后見圖2所示。以此為底圖,進行關(guān)鍵點描繪。關(guān)鍵點的選擇以可以程序推算某時刻潮位點的縱坐標(biāo)值為原則,選擇坐標(biāo)點[0.00,0.20,0.40,0.60,0.80,1.00]6個點位為縱坐標(biāo)值關(guān)鍵點,選擇每個時刻潮位點的中心作為潮位關(guān)鍵點,為盡可能將關(guān)鍵點點繪于中心位置,將圖像放至最大時進行單像素點(1 Pix)點繪,某點點繪圖見圖3(a)所示。點繪后進行色階處理,選擇黑色閾值為253(最大值),然后將圖像模式轉(zhuǎn)換成位圖模式,點繪完成關(guān)于原始圖層后圖像見圖3(b),保存為PNG格式。
圖2 某潮位站冬季小潮潮位掃描圖片
(a)點繪示意
(b)點繪后圖像
3.1.2 程序處理
通過程序讀取圖像,通過數(shù)值分析確定實測值與讀取的縱坐標(biāo)關(guān)鍵點位置之間的線性相關(guān)關(guān)系,將潮位點關(guān)鍵點讀取坐標(biāo)值代入相關(guān)關(guān)系得到潮位值的實測值。具體程序如下:
function fout=dutu(imname) %建立函數(shù),輸入為圖像名稱;
clc;clear all; %清除系統(tǒng)內(nèi)存的所有變量;
tu=imread(imname); %圖像讀入到變量tu中;
[xcor,ycor]=find(tu==0); %找到tu矩陣中值為0的位置(所有關(guān)鍵點位置);
orginz=[xcor ycor];
for i=1:size(ycor);
if ycor(i+1) ~= ycor(i)
suo=i; %通過找到關(guān)鍵點中縱坐標(biāo)關(guān)鍵點數(shù)量;
break
end
end
zong=orginz(1:suo,:); %圖中縱坐標(biāo)關(guān)鍵點位置;
heng=orginz(suo+1:end,:); %圖中潮位值關(guān)鍵點位置;
realycor=[1.0,0.8,0.6,0.4,0.2,0.0]′; %輸入對應(yīng)縱坐標(biāo)關(guān)鍵位置的實際縱坐標(biāo)值;
P=polyfit(zong(:,1),realycor,1); %確定縱坐標(biāo)關(guān)鍵位置和實際縱坐標(biāo)值的相關(guān)關(guān)系;
fout=polyval(P,heng(:,1)); %將潮位值關(guān)鍵點位置代入相關(guān)關(guān)系,得到實際的潮位值;
plot(fout,′-.o′); %對結(jié)果進行繪圖;
set(gca,′ylim′,[0,(1)],′ygrid′,′on′); %繪圖設(shè)置
set(gcf,′position′,[597 516 612 281],′color′,′white′); %繪圖設(shè)置;
程序運行之后,直接輸出數(shù)字化潮位過程圖,并輸出潮位點坐標(biāo)值。數(shù)字化結(jié)果與實測值對比見表1。
表1 數(shù)字化值和實測值對比(點線型)
由表1可知,平均誤差<4%,最大誤差≤±7.0%。通過數(shù)據(jù)可發(fā)現(xiàn),數(shù)據(jù)整體偏小,且各縱坐標(biāo)點的位置為非等間距,存在一定的系統(tǒng)誤差。為此可對上述程序進行優(yōu)化,設(shè)定縱坐標(biāo)值之間為等間距,即僅考慮上下2個極值點(0.00和1.00)的縱坐標(biāo)值,中間值(0.2, 0.4,0.6,0.8)則按照極值的縱坐標(biāo)值進行等間距內(nèi)插;同時對2個極值點進行精細(xì)化點繪,以減少系統(tǒng)誤差和手動點繪中間點帶來的偶然誤差。程序則做如下改進:
zong=orginz(1:suo,:); %圖中縱坐標(biāo)關(guān)鍵點位置;
SameInterval=round(linspace(zong(1,1),zong(end,1),suo)); %由縱坐標(biāo)最大和最小值對中間值進行等間距內(nèi)插;
zong=[SameInterval′ zong(:,2)];
heng=orginz(suo+1:end,:); %圖中潮位值關(guān)鍵點位置;
運行程序后的數(shù)字化結(jié)果與實測值對比見表1和圖4,可見兩者吻合良好,平均值誤差小于1%,最大誤差不大于±5.0%。
圖4 數(shù)字化值與實測值點線型圖
相比點線型圖,連續(xù)曲線圖因無關(guān)鍵潮位點,故須對橫坐標(biāo)關(guān)鍵點進行點繪,從而通過程序計算某時刻點對應(yīng)的潮位值。某潮位站冬季大潮流速圖掃描經(jīng)扭正和灰度化見圖5(a)所示。采用曲線單獨處理和坐標(biāo)點重點描繪結(jié)合方式進行數(shù)字化。首先對圖像進行灰度、色階、增加像素點處理,后進行橫縱坐標(biāo)關(guān)鍵的點繪,并刪除曲線和關(guān)鍵點以外的圖像信息,見圖5(b)所示。進行反色及位圖化后存儲為PNG文件。
圖5 某潮位站冬季大潮潮位掃描圖片及橫縱坐標(biāo)點繪后圖像
由MATLAB直接讀取PNG文件,進行程序處理如下:
function fout=dutu(imname)
clc; clear all;
tu=imread(imname) ;
tu1=bwmorph(tu,′thin′,Inf); %移除曲線周邊多余像素點,使曲線單線化。
[xcor,ycor]=find(tu==1) ; %確定線條和關(guān)鍵位置
orginz=[xcor ycor];
hengd=[xcor(xcor==max(unique(xcor)))
ycor(xcor==max(unique(xcor)))];%通過橫軸位于圖形最下部位關(guān)系確定橫坐標(biāo)關(guān)鍵點位置
zongd=[xcor(ycor==min(unique(ycor)))
ycor(ycor==min(unique(ycor)))];%通過縱軸位于圖形最右部位關(guān)系確定縱坐標(biāo)關(guān)鍵點位置。
orginz(orginz(:,1)==max(unique(xcor)),:)=[];
orginz(orginz(:,2)==min(unique(ycor)),:)=[];
quxiand=orginz;%除去橫、縱坐標(biāo)關(guān)鍵點之后的所有點均為曲線點。
%將橫坐標(biāo)通過線性插值,確定1到30時刻點位置
P=polyfit([0,5,10,15,20,25,30]′,hengd(:,2),1); %[0,5,10,15,20,25,30]為橫坐標(biāo)序列
skd=ceil(polyval(P,1:30)); skd=skd′; %1:30為橫坐標(biāo)序列。
%確定1到30時刻點對應(yīng)曲線的縱坐標(biāo)位置,
quxianskd=zeros(length(skd),2);
for i=1:length(skd)
tmp=quxiand(quxiand(:,2)==skd(i),:);
quxianskd(i,:)=round(mean(tmp));
end
quxianskd(isnan(quxianskd(:,2)),:)=[];
SameInterval=round(linspace(zongd(1,1),zongd(end,1),6)); %由縱坐標(biāo)最大和最小值對中間值進行等間距內(nèi)插;
zongd=[SameInterval′ zongd(:,2)];
realycor=[1.0,0.8,0.6,0.4,0.2,0.0]′; %縱坐標(biāo)實測值P=polyfit(zongd(:,1),realycor,1);
fout=polyval(P,quxianskd(:,1));
plot(fout,′-.o′);
set(gca,′ylim′,[0,(1)],′ygrid′,′on′);
set(gcf,′position′,[597,516,612,281],′color′,′white′);
程序運行之后,直接輸出數(shù)字化潮位過程圖,并輸出潮位點坐標(biāo)值。數(shù)字化結(jié)果與實測值對比見表2和圖6,可見,平均誤差<1%,最大誤差≤±5.0%,效果較好。
表2 數(shù)字化值和實測值對比(連續(xù)曲線型)
圖6 數(shù)字化值與實測值連續(xù)曲線型圖
(1) 結(jié)合MATLAB圖像數(shù)值分析及程序功能,并輔以專業(yè)位圖軟件PHOTOSHOP的圖像操作模塊,可實現(xiàn)對潮位圖像的數(shù)字化處理,方法簡單實用,精度高。某潮位站點線型圖和連續(xù)曲線型圖的數(shù)字化過程過表明,該方法提取數(shù)據(jù)的平均誤差均小于1%,最大單點誤差不超過7%,數(shù)字化效果和精度尚可。
(2) 通過對方法和程序的擴展和延伸開發(fā),可廣泛應(yīng)用于類似科技圖像數(shù)據(jù)的提取。
參考文獻:
[1] 涂望明,魏友國,施少敏. MATLAB在數(shù)字圖像處理中的應(yīng)用[J].微計算機信息,2007,23(2/3): 299-301.(TU Wang-ming, WEI You-guo, SHI Shao-min. Application of MATLAB to Digital Image Processing[J]. Microcomputer Information, 2007, 23(2/3): 299-301. (in Chinese))
[2] 秦襄培,鄭賢中. MATLAB圖像處理寶典[M].北京:電子工業(yè)出版社,2011. (QIN Xiang-pei, ZHENG Xian-zhong. MATLAB Image Processing Guide[M]. Beijing: Publishing House of Electronics Industry, 2011. (in Chinese))
[3] 何希平,張瓊?cè)A. 基于MATLAB的圖像處理與分析[J].重慶工商大學(xué)學(xué)報(自然科學(xué)版),2003,(6):22-26. (HE Xi-ping, ZHANG Qiong-hua. Image Processing and Analysis Based on MATLAB[J]. Journal of CTBU(Natural Science), 2003, (6): 22-26. (in Chinese))
[4] GONZALEZ R C. Digital Image Processing Using MATLAB[M]. UK: Pearson Prentice Hall, 2009.
[5] KONG J F, DIMITROV M. Accelerating MATLAB Image Processing Toolbox functions on GPUs[C]∥Proceedings of the 3rd Workshop on General-Purpose Computation on Graphics Processing, Pittsburgh, USA, March 14, 2010: 75-85.
[6] 周廣芬,李 鵬,楊久義,利用MATLAB圖像處理工具箱進行圖形數(shù)字化的研究[J].河北科技大學(xué)學(xué)報,2005, 26(4): 309-312. (ZHOU Guang-fen, LI Peng, YANG Jiu-yi. Study of Using the Image Processing Toolbox of MATLAB to Digitize Graph[J]. Journal of Hebei University of Science and Technology, 2005, 26(4): 309-312. (in Chinese))
[7] DENG Wei, DING Wei-min, ZHANG Hao. Application of MATLAB in Figure Image Processing and Analysis[J]. Journal of Agricultural Mechanization Research, 2006,(6):194-198.
[8] CHAIRA T, RAY A K. Fuzzy Image Processing and Applications with MATLAB[M]. US: CRC Press, 2009.
[9] 彭慧俐.PHOTOSHOP圖像處理技巧分析[J].信息與電腦,2010,(6):64-65. (PENG Hui-li. Technical Analysis of Image Processing by PHOTOSHOP[J]. China Computer & Communication, 2010, (6): 64-65. (in Chinese))