4 1 理解層疊分類器的檢測原理

2021-09-07 07:49:43 字數 1674 閱讀 1722

級聯是一系列測試或階段,用於區分是不是某乙個物件,比如臉和非臉。對於正向分類,影象的某個部分必須通過級聯的所有階段。反之,如果影象在任何乙個階段失敗了,分類器就會立即判定他為非。

影象的部分或視窗是在給定位置和給定放大級別上的畫素樣本。級聯分類器獲取影象在不同位置和不同放大級別的視窗,並為每個視窗執行級聯的各個階段。通常,正向檢測出現在多個重疊視窗中。這些重疊的正向檢測被稱為「領域」,它們意味著更有可能出現真正的匹配。例如,如果我們稍微移動或調整框架的大小,乙個真實的臉看起來仍然像乙個臉。

現在,您可能想知道我們是如何設計級聯的各個階段的。答案是,我們不直接設計它們。相反,我們讓機器學習元演算法基於一組訓練影象和一組特徵來設計階段。通常,元演算法是adaboost(自適應增強)的變體,adaboost是一種帶有特定指數誤差函式的線性回歸公式。訓練影象包括正樣本和負樣本,我們必須提供正樣本中物件座標的元資料。這些特性是分類器可能會(也可能不會)在每個鄰域中找到的本地模式模板。訓練演算法選取了正樣本的典型特徵和負樣本的非典型特徵,並根據這些特徵設計了訓練階段。

haar-like特徵是人臉檢測和一般目標檢測中最常用的特徵之一。對於每個視窗,haar級聯分類器從其他視窗中抽取一些灰度畫素值,用來衡量視窗與以下暗區與亮區相遇的特徵的相似性:

因此,haar級聯的階段表示水平或對角線邊緣、細線或點,它們代表乙個物件(相對於非物件)。該演算法的一些變體刪除了一些特徵(如對角線特徵)或新增了一些特徵(如四個矩形相交的角),但基本思想是相同的。

haar-like的特徵在旋轉或翻轉方面不夠健壯。例如,如果haar級聯被訓練來檢測直立的面孔,它將不會檢測倒置的面孔。同樣的,如果haar級聯訓練的是左眼,那麼右眼就不是理想的,因為右眼是左眼的映象。因此,左眼和右眼最好有單獨的級聯。我們將使用opencv附帶的4個訓練有素的haar級聯,這些級聯將檢測一張直立的人臉、一張直立的貓臉、乙個人的左眼和乙個人的右眼。

區域性二值模式(lbp)特徵是另一種流行的特徵。它們也被稱為區域性二值模式直方圖(lbph)特徵。顧名思義,lbph特徵是亮度值的直方圖或計數。對於視窗中的每個畫素,分類器觀察在一定半徑內的每個相鄰畫素是更亮了還是更暗了。直方圖包含了每個相鄰位置中較暗畫素的計數。例如,假設乙個視窗包含以下兩個1畫素半徑的鄰域:

計算這兩個鄰域(還沒有計算視窗中的其他鄰域),直方圖可以如下圖所示:

讓我們回顧一下我們是如何得出這些數字的。第乙個鄰域有黑色的角(相對於中心),因此我們向直方圖表的每個角落的單元格加1。第二個鄰域有乙個黑色的頂行(相對於中心),因此我們向直方圖錶頂行的每個單元格新增另乙個1。

lbp級聯的階段表示代表物件(相對於非物件)的漸變或轉換。

和haar級聯一樣,lbp級聯在旋轉或翻轉方面也不健壯。opencv帶有預先訓練的lbp級聯,適用於直立的人臉和直立的貓臉。可選地,我們可以使用這些來代替haar級聯。

[有關opencv實現級聯分類器的資訊,請參見官方文件,位於:具體來說,我們將使用cv::cascadeclassifier類.]

###返回到第四章目錄###

###返回到書籍目錄###

基於Adaboost檢測的分類器訓練

最近工作遇到了需要檢測影象的問題,需要自己訓練分類器,根據網上的一些參考 mfc基礎入門 基於adaboost演算法的車牌檢測在opencv上的研究與實現 進行了自己的一些嘗試,opencv中提供了兩種訓練函式 opencv haartraining 和 opencv traincascade,具體...

基於級聯分類器的目標檢測objdect

opencv支援的目標檢測的方法是利用樣本的haar特徵進行的分類器訓練,得到的級聯boosted分類器 cascade classification 注意,新版本的c 介面除了haar特徵以外也可以使用lbp特徵。先介紹一下相關的結構,級聯分類器的計算特徵值的基礎類featureevaluator...

關於級聯分類器檢測框的輸出尺寸

關於對級聯分類器理解的乙個誤區 之前一直以為流程是這樣的,從最大尺寸開始,每次根據scalefactor進行縮小,直到縮小到下限。後來發現不管怎麼縮小下限,都會輸出同乙個結果 比如原先輸出到尺寸為24,然而24的尺寸不能檢測到我希望捕捉到更小目標,不斷地調節級聯分類器的最小尺寸和每次縮放比例,並不能...