董 延,黃志剛,2
(1.北京工商大學 材料與機械工程學院,北京 100048;2.北京工商大學 中國食品安全研究中心,北京 100048)
在科研過程中,許多文獻資料中的數據是以曲線的形式給出的。在只有曲線圖而沒有數學表達式的情況下,如果想要獲得曲線上某些點的坐標值,較原始的方法是在坐標紙上手工描點,這種方法比較耗時,且準確度取決于取點的多少與描點精度。后來隨著計算機的發展,出現了一些專用圖像處理軟件,在這類軟件中,通過在圖像上手工取點,再用曲線擬合的方法將各點連接,以提取出原始曲線。但是這種方法的準確度會受到取點的位置、數量以及所選擇的擬合算法的影響。
本文提出一種基于Matlab 的圖像處理技術提取圖像中的曲線的新方法。創新處是在提取的過程中使用了圖像的形態學運算,使得本方法只需選擇較少的點,就能夠快速、準確地將圖像中的曲線提取出來。同時克服了圖像背景對曲線提取產生的干擾。
Matlab 中的數字圖像是以矩陣形式表示的,這意味著其強大的矩陣運算能力用于圖像處理非常有利,矩陣運算的語法對Matlab 中的數字圖像同樣適用。
MathWorks 公司針對不同領域的應用,推出了30 多個具有專門功能的工具箱。這些工具箱都是由該領域內的專家編寫的,用戶可直接對工具箱內的函數進行調用,而無需自己編寫所用的專業基礎程序。
Matlab 圖像處理工具箱(Image Processing Toolbox)專為數字圖像處理而開發。它提供了一套全方位的參照標準算法和圖形工具,用于進行圖像處理、分析、可視化和算法開發。可進行圖像增強、圖像去模糊、特征檢測、降噪、圖像分割、空間轉換和圖像配準。該工具箱中的許多功能支持多線程,可發揮多核和多處理器計算機的性能。
Matlab 圖像處理工具箱函數包括: 圖像顯示函數、圖像文件輸入、輸出函數、圖像幾何操作函數、圖像像素值及統計函數、圖像分析函數、圖像增強函數、線性濾波函數、二維線性濾波器設計函數、圖像變換函數、圖像鄰域及塊操作函數、二值圖像操作函數、基于區域的圖像處理函數、顏色圖操作函數、顏色空間轉換函數、圖像類型和類型轉換函數,共15 類[1]。Matlab 圖像處理工具箱支持四種圖像類型。這四圖像類型分別為RGB 圖像、索引圖像、灰度圖像和二值圖像。這四種類型可以用工具箱的類型轉換函數相互轉換。
(1) 彩色圖像。Matlab 可處理的彩色圖像包括RGB圖像和索引圖像。一幅RGB 圖像在Matlab 中是一個M×N×3 的三維數組。前二維M 和N 分別為數組的行數和列數,第三維則表示R、G、B 三個分量的值。可以將這個三維數組看作三個M×N×1 的二維數組的疊加。這三個二維數組分別表示這幅圖像各像素點的R、G、B分量,相同位置的元素對應同一像素。各分量的取值取決于數組的數據類型。例如,當數據類型是double 時,取值范圍是[0,1];當數據類型是uint8 時,取值范圍是[0,255]。索引圖像在Matlab 中則由一個M×N 的數組和一個m×3 的數組共同表示,其中M 和m 不一定相等。M×N 數組中的每個元素對應圖像中相同位置的像素,元素的值n 則指向m×3 數組中的第n 行,即該位置的像素的R、G、B 值分別由m×3 數組中的第n 行的三個值來確定。
(2) 灰度變換。灰度圖像的每個像素只有一個灰度值,因此灰度圖像是一個M×N 的二維數組。將彩色圖像變換為灰度圖像,方法是取彩色圖像中每個像素的R、G、B 分量值的均值,做為該像素的灰度值。
Matlab 中將RGB 圖像轉換為灰度圖像的語法是I=rgb2gray(RGB);將索引圖像轉換為灰度圖像的語法是I=ind2gray(X,map)。
(3)二值變換。二值圖像在Matlab 中也是一個M×N的二維數組,但其數據類型是logical,因此其元素只取0 或1。0 表示背景像素(黑色),1 表示前景像素(白色)。將灰度圖像轉換為二值圖像的語法是BW=im2bw(I,level)。
(4)數字圖像的形態學運算。圖像的形態學運算是指:用具有一定形態的結構元素去量度和提取圖像中的對應形狀,以達到對圖像分析和識別的目的。數學形態學的應用可以簡化圖像數據,保持它們基本的形狀特性,并除去不相干的結構。與本文所述方法相關的形態學運算有形態學細化和形態學重構。
形態學細化可將二值圖像中無孔的連續對象細化為不間斷的線,且保留對像原始的形狀;將有孔的連續的對象縮小為環,且保留對像原始的形狀。Matlab 語法是BW2=bwmorph(BW,’thin’,n)。
形態學重構包括兩幅圖像和一個結構元。一幅圖像是標記,是變換的開始點;另一幅圖像是模板,用于約束變換過程。[2]Matlab 語法是IM=imreconstruct(marker,mask)。
作為面向科學與工程計算的大型科技應用軟件,Matlab 同樣提供了一功能強大的用于編寫圖形用戶界面的工具: 圖形用戶界面 (Graphical User Interface,GUI)。其界面(GUI)是由各種圖形對象如窗口、光標、按鍵、菜單、文字說明等對象構成的一個用戶界面。用戶通過一定的方法(如鼠標或鍵盤)選擇、激活這些圖形對象,可以使計算機產生某種動作或變化,如實現計算、繪圖等[3]。
在該界面內,用戶可以根據界面提示完成整個工程,卻不必去了解工程內部是如何工作的。
Matlab 圖形用戶界面設計的第一步是對控件進行布局,這是通過對各種圖形對象的操作來實現的。它的設計方法有兩種: 編寫程序和使用GUIDE。編寫程序的方法要求使用者深入了解各種圖形對象的特征、屬性和操作;而使用GUIDE 則使用者通過鼠標就可以生成各種GUI 控件并改變它們的外觀和位置。第二步是編制菜單、控件的回調函數,這是圖形用戶界面設計的重點。回調函數就是當程序接受到某個Windows 動作,如鼠標單擊、鍵盤輸入的時候,為所希望進行的操作所指定的函數。該函數是由主控程序調用的。主控程序對各種消息進行分析,排隊和處理,最后去調用指定的回調函數。
圖1 為基于Matlab GUI 所編寫的曲線提取程序的主界面。點擊右側下方的 “打開圖像” 按鈕,將會彈出文件選擇對話框,該對話框的形式和操作與Windows 的文件選擇對話框相同,不再贅述。
現以某發動機外特性曲線圖為例。打開圖像后,該圖像會如圖1 顯示在主界面左側。該圖像的背景較復雜(有顏色較深的坐標網格線),對于曲線的正確提取會產生干擾。對于這類圖像,應用本文所述的方法可將曲線準確地提取出來。
下面就以圖1 左側所示的某發動機外特性曲線圖為例,結合Matlab GUI 程序的使用方法說明曲線的提取過程。

圖1 GUI 主界面Fig.1 The main interface of GUI
讀入需要提取的原始圖像后,首先是對圖像進行灰度處理。包括灰度變換和灰度閾值的設定。點擊主界面右側下方的 “灰度轉換” 按鈕,程序會將原彩色圖像轉換為灰度圖像。轉換為灰度圖像后,可對灰度閾值進行設置。主界面 (圖1) 右側的最上方是 “灰度圖閾值調整” 面板。可以用兩個滑動條調整灰度圖的最小和最大閾值。所有灰度值小于最小閾值或大于最大閾值的像素將會被過濾掉。合理地調整閾值可以去掉圖像中無關的部分。
在這幅圖像中有兩條曲線,而需要提取的是上方的曲線,如圖2 所示。當灰度圖閾值的最小和最大值分別被設定為48 和114 時,圖像中的大部分干擾像素(如坐標網格線和下方的曲線)都被去掉或變淡了。

圖2 灰度處理效果Fig.2 The effect of gray processing
下一步是將灰度圖像變換為二值圖像。在點擊主界面右側下方的 “二值轉換” 按鈕后,程序會完成三步操作: 第一步,將灰度圖像轉換為二值圖像;第二步,將二值圖像形態學細化;第三步,刪除二值圖所有的交叉。例如,曲線與背景坐標格相交叉處的像素將會被刪除。因此,曲線在與坐標格相交的地方會斷開。這是為后面的形態學重構做準備。
經過2.2 中的處理后,由于曲線在與背景坐標格的交點處會被斷開,因此曲線會被分為幾段。只需在每段曲線上任選一點,之后進行形態學重構,就可將曲線提取出來。現選如圖3(為使圖片清晰,圖3 中的線條已被加粗)所示的7 個點。

圖3 選點Fig.3 Points selection

表1 點的位置Tab.1 Points position
這7 個點在圖像中的位置見表1。首先在程序主界面的 “選點” 面板中輸入第一個點在圖像中的位置: X:112,Y:413,然后點擊 “選定”,這時程序會針對該點做形態學重構運算。該運算可以將與選定點相連的全部像素還原,在這里也就是將該點所在的曲線段還原。在2.2 節中,已將曲線與背景坐標格相交叉處的像素刪除,這就使曲線與背景線條斷開,因此在形態學重構時不會將背景線條還原。這樣就可得到第1 點所在的曲線段。同樣,在輸入其余各點在圖像中的坐標后,點擊“選定”,就可得到全部曲線。如圖4 所示。

圖4 曲線圖像提取結果Fig.4 The extraction results of curve image
雖然已將曲線從圖像中提取出來,但此時得到的只是曲線上各點在圖像中的位置而不是在坐標系中的值。因此還要將各點像素在圖像處的行值與列值換算成坐標值。因為在實際的曲線中,一個橫坐標值只能對應一個縱坐標值。所以在圖4中,當一列中有多個像素點時,則取他們行值的均值。之后進行換算,換算公式為:

式中: xn—第n 個點的橫坐標;xmin—曲線左端點的橫坐標;xmax—曲線右端點的橫坐標;cn—曲線上第n 個點所在的列數;cmin—曲線左端點所在的列數;cmax—曲線右端點所在的列數;yn—曲線上第n 個點的縱坐標;ymin—曲線縱坐標的最小值;ymax—曲線縱坐標的最大值;rn—曲線上第n 個點所在的行數;rmin—曲線最低點所在的行數;rmax—曲線最高點所在的行數。
在主界面中分別輸入橫坐標的最小值xmin=1000、最大值xmax=6000;縱坐標的最小值ymin=131、最大值ymax=221,然后點擊 “生成曲線”,就可以得到最終的曲線,如圖5所示。同時將曲線的坐標數據儲存在了curve.mat 數據文件中,方便以后隨時調用。當在Matlab 中導入curve.mat 文件時,可以得到其中包含的兩個1維 數組curvex 和 curvey,curvex 中的第n 項和curvey中的第n 項對應于曲線第n個點的橫坐標和縱坐標。

圖5 提取出的最終曲線圖Fig.5 The final result of extraction
(1)這種方法的優點是能夠克服圖像背景的干擾。先在灰度處理的部分通過調整灰度圖像的上下閾值,去掉背景中與曲線灰度值相差較大的部分;之后運用形態學運算進一步消除掉背景中與曲線灰度值相進的部分,如坐標網格線和坐標軸。
(2)調用數據文件并使用Matlab 的插值或曲線擬合函數得到該曲線上任意一點的坐標值非常便捷。
(3)適用范圍較廣,除在文中用于提取發動機外特性曲線外,還可在食品、塑料等工程領域發揮作用。如提取微生物生長曲線以研究其對食品儲存的影響,以及提取塑料材料的應力、黏度曲線等。
[1] 晏暉,姜鵬,陳貝. 基于Matlab 工具箱的數字圖像處理技術[J]. 微計算機信息,2010,26(29-2):214-216.
[2] Gonzalez R C,Woods R E,Eddins SL,et. 數字圖像處理的MATLAB 實現(第3 版)[M]. 北京:清華大學出版社,2013.
[3] 陳垚光,毛濤濤,王正林,等. 精通MATLAB GUI 設計(第3 版)[M]. 北京:電子工業出版社,2013.