姜經(jīng)緯, 程傳蕊
(1.沈陽航空航天大學(xué), 遼寧 沈陽 110000; 2.漯河職業(yè)技術(shù)學(xué)院, 河南 漯河 462000)
基于HOG+SVM的圖像分類系統(tǒng)的設(shè)計與實現(xiàn)
姜經(jīng)緯1, 程傳蕊2
(1.沈陽航空航天大學(xué), 遼寧 沈陽 110000; 2.漯河職業(yè)技術(shù)學(xué)院, 河南 漯河 462000)
圖像分類在工業(yè)、醫(yī)療、勘測、駕駛等領(lǐng)域都有較高的實用價值,通過分析圖像分類技術(shù),采用軟件工程思想,基于HOG+SVM和OpenCV,設(shè)計實現(xiàn)一個圖像分類系統(tǒng)。 經(jīng)測試,本系統(tǒng)界面簡潔,操作簡單,運行穩(wěn)定,可以準確地進行圖像分類,獲取圖像信息。
圖像分類;HOG特征;SVM分類器
隨著互聯(lián)網(wǎng)、電子技術(shù)、成像技術(shù)的快速發(fā)展,數(shù)字圖像已成為一種重要的信息表達方式。從日常生活中的圖像廣告、二維碼到醫(yī)學(xué)研究的顯微圖像,從衛(wèi)星中的遙感圖像到精密的指紋檢測,人類無時無刻都在和圖像打著交道。但是,人們從圖像中獲得的很多信息并不全是有效信息,需要從其中篩選出自己所需要的信息數(shù)據(jù),因此圖像分類技術(shù)應(yīng)運而生,它既可以擺脫掉繁瑣的人工分類作業(yè),還可以構(gòu)建出近似人類語義的信息。
圖像分類的應(yīng)用十分廣泛,在工業(yè)、醫(yī)療、勘測、駕駛等領(lǐng)域具有巨大的應(yīng)用價值。基于這樣的背景, 本文設(shè)計了一個圖像分類系統(tǒng),該系統(tǒng)具有對圖像中的物體進行正確分類并標(biāo)注其位置的功能。
系統(tǒng)的主要目的就是使用HOG+SVM的方法進行圖像分類,首先通過輸入若干張訓(xùn)練樣本圖像訓(xùn)練SVM分類器,訓(xùn)練完成之后隨機選擇一張測試圖像輸入到分類器中,最后輸出分類后的圖像,并在物體所在位置標(biāo)記矩形框。
根據(jù)需求,系統(tǒng)將從以下三個方面來簡單描述功能需求。
(1)圖像的選擇顯示功能。打開圖像顯示窗口,在計算機中選擇待檢測的圖像并顯示出來。
(2)圖像分類功能。當(dāng)已選定想要分類的圖像時,系統(tǒng)可以直接使用分類器進行分類并在圖像上標(biāo)注目標(biāo)類別和所在位置。
(3)圖像分類結(jié)果顯示功能。通過點擊顯示按鈕,在界面上顯示分類后的圖像,并將統(tǒng)計得到的物體個數(shù)顯示出來。
圖像分類系統(tǒng)分為圖像輸入、HOG特征提取、圖像分類、圖像輸出四個步驟。系統(tǒng)采用C++語言編寫,主要分為如下五個模塊:輸入模塊、滑動窗口模塊、特征提取模塊、分類器訓(xùn)練模塊、輸出模塊。圖像由輸入模塊進入系統(tǒng),通過滑動窗口和特征提取獲得圖像特征,經(jīng)過分類器分類后由輸出模塊輸出分類結(jié)果(如圖1)。
圖1 系統(tǒng)結(jié)構(gòu)圖
2.1 輸入模塊
本模塊主要負責(zé)實現(xiàn)系統(tǒng)的圖像輸入功能。在程序界面上設(shè)計一個按鈕實現(xiàn)本部分功能。在點擊按鈕后會彈出一個窗口,使用者在窗口中選擇圖像,系統(tǒng)會將圖像的路徑保存在一個字符串中。該路徑將會提供給滑動窗口模塊,以實現(xiàn)后續(xù)的圖像分類功能。
2.2 滑動窗口模塊
本模塊實現(xiàn)的主要功能是對圖像進行稠密的滑動窗口檢測,使得系統(tǒng)可以進行特征提取。首先設(shè)定HOG參數(shù),參數(shù)包括檢測窗口大小、塊大小、cell大小和移動步長。在一個檢測窗口進行特征提取之前,系統(tǒng)會將其劃分為若干個塊,一個塊內(nèi)包含若干個cell胞元。在檢測窗口內(nèi),以一個塊為單位按照設(shè)定好的塊步長進行稠密的滑動,滑動產(chǎn)生的單元格交由特征提取模塊提取特征向量。當(dāng)每一個塊提取完當(dāng)前的HOG特征之后,會繼續(xù)滑動,直到遍歷完檢測窗口內(nèi)所有的塊。
系統(tǒng)中設(shè)定檢測窗口大小為64*128,塊尺寸為16*16,cell大小為8*8,塊步長為8*8。塊在檢測窗口中滑動,每次滑動距離為塊步長。HOG設(shè)定步長為8像素,水平方向有7個塊,垂直方向有15個塊,由此可計算得到,一個64*128的檢測窗口中包含105個塊,每8*8的像素組成一個cell,每2*2個cell組成一個塊,因為每個cell有9個特征,所以每個塊內(nèi)有4*9=36個特征。因此,一個檢測窗口檢測子維數(shù)為3780維[9]。每一次滑動都使用特征提取模塊提取特征,直到遍歷完所有cell。
2.3 特征提取模塊
本模塊會對滑動窗口模塊產(chǎn)生的單元格構(gòu)建梯度方向直方圖,統(tǒng)計局部圖像梯度信息并進行量化,得到局部圖像區(qū)域的特征描述向量,同時能夠降低對圖像中光照的影響。在對所有的單元格進行特征提取后,把單元格組合成大的塊,塊內(nèi)歸一化梯度直方圖。將所有塊的HOG描述符組合在一起,形成最終的HOG特征向量。在分類器的訓(xùn)練中,使用所得到的特征向量訓(xùn)練分類器。在分類過程中提取待分類圖像的特征向量進行圖像分類。
2.4 分類器模塊
本模塊分為兩部分,即分類器的訓(xùn)練模塊和測試模塊。
2.4.1 訓(xùn)練模塊
在準備足夠正樣本集和負樣本集后,要利用機器學(xué)習(xí)的方法進行訓(xùn)練。想要得到一個性能優(yōu)良的分類器,訓(xùn)練樣本理論上應(yīng)該是無限多的,而且所有的訓(xùn)練樣本應(yīng)裁剪為統(tǒng)一大小,與HOG設(shè)定的檢測窗口大小一致。使用特征提取模塊提取所有正負樣本的HOG特征向量,利用其訓(xùn)練SVM分類器。訓(xùn)練好的分類器交由分類模塊使用。
訓(xùn)練樣本來源于手動收集,收集圖片并從圖片中裁剪出包含目標(biāo)的部分作為正樣本,裁剪得到不包含目標(biāo)的部分作為負樣本。理論上,樣本的數(shù)量越多,則訓(xùn)練出的分類器準確率越高。
(1)正負樣本的準備。準備訓(xùn)練樣本集合,包括正樣本集和負樣本集。首先收集大量的與檢測目標(biāo)相關(guān)的圖片,對這些圖片進行裁剪,把包含檢測目標(biāo)的樣本作為正樣本使用,不包含目標(biāo)的樣本作為負樣本。收集到足夠的訓(xùn)練樣本之后,將正負樣本放在不同的文件夾中,并將所有訓(xùn)練樣本縮放到同樣的尺寸大小。
(2)使用HOG.compute函數(shù)提取正負樣本的HOG特征。HOG.compute函數(shù)是計算HOG特征向量的函數(shù)。向該函數(shù)提供圖像及滑動窗口塊步長,函數(shù)會對檢測窗口進行滑動檢測,依次返回樣本圖像中每一維的特征,并將此特征保存在矢量中。
(3)存儲圖像向量。初始化兩個矩陣,sampleFeatureMat矩陣保存所有訓(xùn)練樣本的特征向量組成的矩陣,行數(shù)為樣本的個數(shù),列數(shù)為HOG描述子維數(shù);sampleLabelMat用于保存訓(xùn)練樣本的類別,行數(shù)為樣本的數(shù)量,列數(shù)為1;樣本標(biāo)記1表示物體存在,0表示物體不存在。
(4)訓(xùn)練分類器。先設(shè)置SVM參數(shù)和迭代終止條件,當(dāng)?shù)鷿M1000次或誤差小于FLT_EPSILON時停止迭代,選擇RBF核函數(shù),使用C_SVC,并設(shè)定松弛變量為0.01進行線性訓(xùn)練。最后對使用SVM.train函數(shù)進行訓(xùn)練,輸入訓(xùn)練數(shù)據(jù)和相應(yīng)參數(shù)對分類器進行訓(xùn)練。通過訓(xùn)練找到最優(yōu)超平面。最后使用SVM.save函數(shù)將得到的分類器保存。
2.4.2 測試模塊
本模塊的功能是在待檢測圖像上標(biāo)注目標(biāo)類別和所在位置。首先通過輸入模塊提供的圖像路徑打開圖像,然后對圖像進行滑動窗口檢測,提取每一個檢測窗口的特征向量。使用訓(xùn)練好的分類器進行分類,返回所檢測的目標(biāo)窗口的邊緣。若該窗口內(nèi)存在嵌套,則先刪除最外層矩形框,然后在窗口邊緣畫上對應(yīng)顏色的矩形框。保存圖像,將此圖像的路徑交給輸出模塊。
(1)讀取測試圖像,獲得待檢測圖像的路徑。
(2)使用load()函數(shù)加載訓(xùn)練好的xml文件。xml文件中有兩個數(shù)組:support vector和alpha,有一個浮點數(shù)rho。將alpha矩陣同support vector相乘,得到一個列向量。然后在該列向量的最后添加浮點數(shù)rho。如此,便得到了一個分類器。
(3)使用imread()函數(shù)讀取圖像。
(4)提取檢測子,使用detectMultiScale()函數(shù)對圖像進行多尺度檢測。detectMultiScale()函數(shù)是基于detect()函數(shù)的多尺度檢測方法。檢測窗口大小是固定不變的,由待檢測圖像按照比例系數(shù)縮小。detectMultiScale()函數(shù)對檢測窗口內(nèi)的圖像進行滑動檢測,提取檢測窗口內(nèi)的特征向量,直到待檢測圖像的尺寸小于檢測窗口的尺寸時停止檢測。調(diào)用訓(xùn)練好的SVM分類器對獲得的檢測窗口的特征向量進行分類。返回所包含的目標(biāo)窗口的邊緣。
(5)程序會對圖像進行處理,在目標(biāo)部分嵌套矩形框,將所有沒有嵌套的矩形框放到found_filtered數(shù)組中去。對于存在嵌套情況的矩形框,只需要取外面最大的矩形框重新放入到found_filtered數(shù)組中。
(6)調(diào)整矩形框大小。因為HOG檢測后標(biāo)記出的矩形框比實際目標(biāo)框大,所以需要進行調(diào)整。
2.5 輸出模塊
本模塊主要負責(zé)系統(tǒng)分類后的圖像輸出部分。獲得分類后保存好圖像的路徑,在界面上就可以顯示該圖像。同時將此路徑保存在字符串中,以便進行下一個類別的分類。
設(shè)計“打開”按鈕,使用CFileDialogdlg()函數(shù)點擊按鈕后進行響應(yīng),打開窗口供選擇圖像。在選擇圖像后,將圖像路徑顯示在文本框中并保存于字符串。
設(shè)計圖像顯示函數(shù)ShowJpgGif(CDC* pDC,CStringstrPath, int x, int y) ,輸入圖像路徑和顯示圖像的控件ID,在界面上實現(xiàn)顯示功能。
3.1 主要界面
采用C++開發(fā)語言,在C++開發(fā)環(huán)境vs2010中開發(fā)主界面(如圖2)。
圖2 界面圖
3.2 測試結(jié)果
在如圖2所示的界面中點擊“打開”按鈕,打開窗口選擇圖像,勾選預(yù)設(shè)分類器,先點擊“人”按鈕對人進行檢測,再點擊“狗”按鈕對狗進行檢測。最后點擊“顯示”按鈕顯示檢測后的圖像(見圖3)。
3.3 測試結(jié)果分析
通過多次實驗,得到表1所示的結(jié)果。
通過圖3分析可得通過HOG提取圖像的特征值,再由SVM分類器進行分類檢測,可以快速檢測到圖像中的目標(biāo)及數(shù)量,且成功率較高。由于選用的訓(xùn)練樣本圖像是自己裁剪收集的圖像,在樣本質(zhì)量上與直接使用的圖像集還有一定的差距。
想要有效減少誤檢和漏檢這樣的問題,有如下兩個解決的辦法:
(1)選擇更多的檢測樣本,圖像數(shù)量應(yīng)至少為數(shù)千張。
圖3 測試結(jié)果
檢測目標(biāo)人狗汽車實際目標(biāo)數(shù)456770實際檢測到數(shù)量6510596檢測成功率69%63.8%73%
(2)選取有效的訓(xùn)練樣本,考慮檢測過程中會出現(xiàn)的各種情況。在針對人臉的檢測中會使用已有的數(shù)據(jù)集,但是在測試中會出現(xiàn)側(cè)臉、頭頂?shù)如R頭,這時就需要手工加入這樣的訓(xùn)練樣本。
增加訓(xùn)練樣本后的測試結(jié)果如表2所示。
表2 增加訓(xùn)練樣本后測試結(jié)果
采用計算機快速分類和分析圖像的方法從圖像
中篩選出自己所需的數(shù)據(jù)信息,存在效率較低的問題。針對該問題,本文設(shè)計了一個非常有實用價值的系統(tǒng),該系統(tǒng)遵循軟件工程的思想,基于OpenCV圖像處理技術(shù),采用C++開發(fā)語言,在C++開發(fā)環(huán)境vs2010中實現(xiàn)對圖像的處理。由檢測結(jié)果可以看出,該系統(tǒng)有較準確的檢測率,可以代替人力對圖像多種類進行檢測,在圖像中直接標(biāo)注不同種類的物體,具有很好的應(yīng)用前景。
[1] 董亮. 視頻多目標(biāo)跟蹤的理論與方法[D]. 西安:西安電子科技大學(xué), 2014.
[2] zhazhiqiang.HOG從理論到OpenCV實踐[DB/OL].http://blog.csdn.net.
[3] 田賢先,鮑泓,徐成.一種改進HOG特征的行人檢測算法[J].計算機科學(xué), 2014, 41(9):320-324.
[4] zhazhiqiang,SVM從理論到OpenCV實踐[DB/OL]. http://blog.csdn.net.
[5] chenlee,OpenCV是什么[DB/OL].http://blog.csdn.net.
[6] 張桂寧.基于改進HOG特征值的行人檢測[J].計算機與現(xiàn)代化, 2015(2):52-56.
[責(zé)任編輯 吳??黓
Design and Implementation of Image Classification System based on HOG+SVM
JIANG Jing-wei1, CHENG Chuan-rui2
(1.Shenyang Aerospace University, Shenyang 110000, China;2.Luohe Vocational Technology College, Luohe 462000, China)
Image classification has high practical value in the industrial, medical, reconnaissance, driving and other fields. We want to design an image classification system through the analysis of image classification technology, the idea of software engineering, HOG+SVM and OpenCV. After testing, the system interface is simple, with easy and stable operation, and you can accurately classify image, access to image information.
image classification; HOG feature; SVM classifier
2016-11-17
姜經(jīng)緯(1994-),男,河南漯河人,在讀本科生,主要從事圖像識別分類方面的學(xué)習(xí)與研究;程傳蕊(1970-),女,河南漯河人,教授,主要從事算法研究。
10.3969/j.issn.1671-7864.2017.02.013
TP391.41
A
1671-7864(2017)02-0046-04