基于OpenCV Haar實戰(zhàn)級聯(lián)分類器的使用
點擊上方“小白學(xué)視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
近年來,對象檢測引起了廣泛的關(guān)注。從智能手機到交通監(jiān)控,目標檢測已遍及每個領(lǐng)域。時間和準確性是對象檢測中的關(guān)鍵約束。目標檢測算法的成功取決于其特征表示技術(shù)和學(xué)習(xí)算法,后者僅關(guān)注圖像的關(guān)鍵部分。在本文中,我們將研究一種技術(shù)“使用簡單特征的增強級聯(lián)進行快速對象檢測”,在OpenCV級聯(lián)分類器中使用以及研究級聯(lián)分類器功能的用法。
圖像由像素組成,像素操作成本很高。因此,我們需要更好的圖像表示。

1.兩個矩形特征:
甲二矩形特征計算兩個矩形區(qū)域內(nèi)的像素的總和之間的差。這些區(qū)域具有相同的大小和形狀,并且在水平或垂直方向上相鄰。上圖中的A和B是示例。
2.三個矩形特征:
甲三矩形特征計算在一個中心的矩形從總和中減去2米外面的矩形內(nèi)的總和。上圖中的C是三邊形特征類型。
3.四個矩形特征:
一個四矩形特征計算對角對矩形之間的區(qū)別。上圖中的D是示例。
位置x,y處的積分圖像包含x,y(含)以上和左側(cè)的像素之和:

ii(x,y)是積分圖像,I(x,y)是原始圖像。
使用以下重復(fù)對:

s(x,y)是累積行總和。s(x,-1)= 0且ii(-1,y)=0。使用積分圖像,可以用較少的引用獲得任何矩形和。這是示例:

矩形D中像素的總和只能使用四個數(shù)組引用來計算。位置1處的積分圖像的值是矩形A中像素的總和。位置2處的值為A + B,位置3處的值為A + C,位置4處的值為A + B + C + D。D內(nèi)的總和可以計算為4 + 1-(2 + 3)。
同樣,可以在六個數(shù)組引用中計算兩個矩形特征,對于三個矩形特征,可以計算八個,對于四個矩形特征,則可以計算九個。這些矩形的圖像表示為有效學(xué)習(xí)提供了足夠的對象信息。
每個圖像子窗口有超過180,000個矩形要素,其數(shù)量遠大于像素數(shù)。即使可以非常有效地計算每個功能,但計算完整的集合也很昂貴。弱學(xué)習(xí)算法用于選擇最能區(qū)分正例和負例的單個矩形特征。對于每個特征,弱學(xué)習(xí)者確定最佳閾值分類函數(shù),以使最少數(shù)量的示例被錯誤分類。
在輸入圖像上移動一個窗口,并為圖像的每個子部分計算Haar特征。從分類函數(shù)中學(xué)習(xí)到的閾值將對象和非對象分開。沒有任何一個功能可以執(zhí)行錯誤率低的分類任務(wù)。描述一個對象需要大量特征。通過對弱學(xué)習(xí)者做出的決策進行加權(quán)平均,可以獲得準確的分類器。

級聯(lián)的分類器用于提高檢測性能,同時從根本上減少計算時間。

圖像的所有部分對檢測物體都不有用。因此,消除這些負樣本可減少計算時間。從上圖可以看出,級聯(lián)分類器有很多階段。每個階段都包含根據(jù)上一節(jié)中提到的增強算法訓(xùn)練的分類器。
窗口將在圖像的區(qū)域上滑動,這些區(qū)域在初始階段將被分類為正或負。如果該區(qū)域標記為負,則窗口將滑動到下一個區(qū)域。如果為正,則分類器將進入下一階段。如果標簽在最后階段為正,則找到對象,通過消除負樣本減少了計算時間。
import cv2face_classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt_tree.xml')
加載圖像并應(yīng)用級聯(lián)分類器。
img=cv2.imread("wp4419229.jpg")faces = face_classifier.detectMultiScale(img, 1.001, 4)
現(xiàn)在使用“面”在對象上繪制矩形。
if faces is ():print("No faces found")for (x,y,w,h) in faces:cv2.rectangle(resized, (x,y), (x+w,y+h), (127,0,255), 2)print("reached")cv2.imshow('image',resized)cv2.waitKey(0)
第一個參數(shù)是圖像,第二個參數(shù)是縮放因子,第三個參數(shù)是最小鄰居數(shù)。Haar級聯(lián)分類器在滑動窗口協(xié)議上運行,并使用縮放因子。目標窗口以最小大小開始,并且在測試了該大小的所有窗口之后,使用縮放因子將窗口放大,直到達到最大大小。
使用上述協(xié)議,我們將獲得許多對單個面孔的響應(yīng)。鄰居的最小數(shù)量是較低的閾值,即,如果響應(yīng)高于閾值,則該區(qū)域為有效對象,最小和最大大小都可以作為參數(shù)傳遞。
使用級聯(lián)分類器,我們可以提高深度神經(jīng)網(wǎng)絡(luò)分類器(二進制或多類)的準確性。我們可以使用級聯(lián)分類器來裁剪僅包含對象的圖像,并將其單獨傳遞給分類器。由于消除了圖像的不必要部分,因此提高了準確性。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

