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