當前位置:編程學習大全網 - 源碼下載 - 如何用OpenCV訓練自己的分類器

如何用OpenCV訓練自己的分類器

OpenCV訓練分類器

壹、簡介

目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這壹方法進行了改善。

該方法的基本步驟為:

首先,利用樣本(大約幾百幅樣本圖片)的 harr 特征進行分類器訓練,得到壹個級聯的boosted分類器。

分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每壹級分類器, 這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每壹級分類器檢測的區域即為目標區域。

分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域(與訓練樣本相同的尺寸)的檢測。檢測到目標區域(汽車或人臉)分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每壹個位置來確定可能的目標。為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。

目前支持這種分類器的boosting技術有四種:

Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。

"boosted" 即指級聯分類器的每壹層都可以從中選取壹個boosting算法(權重投票),並利用基礎分類器的自我訓練得到。

根據上面的分析,目標檢測分為三個步驟:

1、 樣本的創建

2、 訓練分類器

3、 利用訓練好的分類器進行目標檢測。

二、樣本創建

訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本(例如人臉或汽車等),反例樣本指其它任意圖片,所有的樣本圖片都被歸壹化為同樣的尺寸大小(例如,20x20)。

負樣本

負樣本可以來自於任意的圖片,但這些圖片不能包含目標特征。負樣本由背景描述文件來描述。背景描述文件是壹個文本文件,每壹行包含了壹個負樣本圖片的文件名(基於描述文件的相對路徑)。該文件必須手工創建。

e.g: 負樣本描述文件的壹個例子:

假定目錄結構如下:

/img

img1.jpg

img2.jpg

bg.txt

則背景描述文件bg.txt的內容為:

img/img1.jpg

img/img2.jpg

正樣本

正樣本由程序craatesample程序來創建。該程序的源代碼由OpenCV給出,並且在bin目錄下包含了這個可執行的程序。

正樣本可以由單個的目標圖片或者壹系列的事先標記好的圖片來創建。

Createsamples程序的命令行參數:

命令行參數:

-vec <vec_file_name>

訓練好的正樣本的輸出文件名。

-img<image_file_name>

源目標圖片(例如:壹個公司圖標)

-bg<background_file_name>

背景描述文件。

-num<number_of_samples>

要產生的正樣本的數量,和正樣本圖片數目相同。

-bgcolor<background_color>

背景色(假定當前圖片為灰度圖)。背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的像素被認為是透明的。

-bgthresh<background_color_threshold>

-inv

如果指定,顏色會反色

-randinv

如果指定,顏色會任意反色

-maxidev<max_intensity_deviation>

背景色最大的偏離度。

-maxangel<max_x_rotation_angle>

-maxangle<max_y_rotation_angle>,

-maxzangle<max_x_rotation_angle>

最大旋轉角度,以弧度為單位。

-show

如果指定,每個樣本會被顯示出來,按下"esc"會關閉這壹開關,即不顯示樣本圖片,而創建過程繼續。這是個有用的debug選項。

-w<sample_width>

輸出樣本的寬度(以像素為單位)

-h《sample_height》

輸出樣本的高度,以像素為單位。

註:正樣本也可以從壹個預先標記好的圖像集合中獲取。這個集合由壹個文本文件來描述,類似於背景描述文件。每壹個文本行對應壹個圖片。每行的第壹個元素是圖片文件名,第二個元素是對象實體的個數。後面緊跟著的是與之匹配的矩形框(x, y, 寬度,高度)。

  • 上一篇:如何把直播軟件源代碼做成軟件?
  • 下一篇:用MATLAB怎麽給壹個數組排序?
  • copyright 2024編程學習大全網