1. 程式人生 > >機器學習之Haar特徵

機器學習之Haar特徵

Haar特徵/矩形特徵

  Haar特徵是一種反映影象的灰度變化的,畫素分模組求差值的一種特徵。它分為三類:邊緣特徵、線性特徵、中心特徵和對角線特徵用黑白兩種矩形框組合成特徵模板,在特徵模板內用 黑色矩形畫素和 減去 白色矩形畫素和來表示這個模版的特徵值。
  例如:臉部的一些特徵能由矩形模組差值特徵簡單的描述,如:眼睛要比臉頰顏色要深,鼻樑兩側比鼻樑顏色要深,嘴巴比周圍顏色要深等。但矩形特徵只對一些簡單的圖形結構,如邊緣、線段較敏感,所以只能描述在特定方向(水平、垂直、對角)上有明顯畫素模組梯度變化的影象結構。


這裡寫圖片描述
圖1 特徵模板

如上圖A、B、D模組的影象Haar特徵為:v=Sum白-Sum黑
C 模組的影象Haar特徵為:v=Sum白(左)+Sum白(右)-2*Sum黑
這裡要保證白色矩形模組中的畫素與黑色矩形的模組的畫素數相同,所以乘2
  對於一幅影象來說,可以通過通過改變特徵模板的大小和位置,可窮舉出大量的特徵來表示一幅影象。
上圖的特徵模板稱為“特徵原型”;特徵原型在影象子視窗中擴充套件(平移伸縮)得到的特徵稱為“矩形特徵”;矩形特徵的值稱為“特徵值”。例如在24*24大小的影象中可以以座標(0,0)開始寬為20高為20矩形模版計算上圖A特徵,也可以以座標(0,2)開始寬為20高為20矩形模版計算上圖A特徵,也可以以座標(0,0)開始寬為22高為22矩形模版計算上圖A特徵,這樣矩形特徵值隨著類別、大小和位置的變化,使得很小的一幅很小的影象含有非常多的矩形特徵。矩形特徵值是矩形模版類別、矩形位置和矩形大小這三個因素的函式。

首先清楚兩點:

影象大小為24*24,特徵圖1(a)大小為2*1 (寬 *高)
1、對於這種情況,水平可滑動23步,垂直可以滑動24步,所以共有23*24個特徵。
2、對於一個特徵,特徵本身沿水平、豎直方向分別縮放。
還看特徵1(a),特徵大小為2*1,則延水平方向可放大為:4*1,6*1,8*1,…,24*1;豎直方向可放大為:2*1,2*2,2*3,…,2*24。即每個特徵有XY种放大方式。(!放大的矩形特徵並限制保持2:1的比例!

用Haar-like提取特徵

首先介紹一下Haar-like特徵。如下圖所示,Haar-like特徵是很簡單的,無非就那麼幾種,首先介紹論文《Rapid Object Detection using a Boosted Cascade of Simple Features》中提到的三種特徵,分為兩矩形特徵、三矩形特徵、對角特徵。當然還有很多分類方法,這裡先不介紹,下面再繼續講。先介紹如何計算特徵。
這裡寫圖片描述
計算特徵很簡單,就是拿黑色部分的所有的畫素值的和減去白色部分所有畫素值的和。得到的就是一個特徵值。
說的很簡單,但是在工程中需要進行快速計算某個矩形內的畫素值的和,這就需要引入積分圖的概念。
(1)、使用積分圖加速計算特徵
需要注意的是這裡的積分圖輸入的影象是經過歸一化的影象哈。與上面用到的符號不一樣了。

首先給出積分圖的定義:

這裡寫圖片描述

上述含義是指在位置(x,y)(x,y)上,對應的積分圖中的畫素為該位置的左上角所有的畫素的之和。
那麼我們實現的時候是如何進行計算積分圖的呢?
s(x,y)=s(x,y−1)+i(x,y)
ii(x,y)=ii(x−1,y)+s(x,y)

初始值s(x,−1)=0,ii(−1,y)=0s(x,−1)=0,ii(−1,y)=0.
  上面這兩個遞迴公式是什麼意思呢?就是首先每一行都遞迴計算s(x,y)(公式中也可以看出是按行計算的),每一行首先都是計算s,計算完畢之後在每一列都計算ii(x,y)。這樣掃描下去就可以計算好了積分圖了。這種方法跟動態規劃的思想有點類似。

好了計算好了積分圖,我們接下來就可以利用積分圖來加速計算某個方塊內部的畫素的和了。

計算方塊內的畫素和


這裡寫圖片描述
圖2 計算某個方塊內的畫素和

  圖中的大框是積分圖,為了講解如何計算任意矩形內的畫素值,我們畫出四個區域A、B、C、D,並且圖中有四個位置分別為1、2、3、4。我們要計算D區域內部的畫素和該怎麼計算?

我們記位置4的左上的所有畫素為rectsum(4)rectsum(4),那麼
D位置的畫素之和就是rectsum(1)+rectsum(4)−rectsum(2)−rectsum(3)rectsum(1)+rectsum(4)−rectsum(2)−rectsum(3)。
是不是有了積分圖,就可以很快地計算出了任意矩形內的畫素之和了?
我們前面提到有三種類型的Haar-like特徵。
其中二矩形特徵需要6次查詢積分圖中的值,而三矩形特徵需要8次查詢積分圖中的值,而對角的特徵需要9次。

提取的特徵的個數有多少?

那麼,如果給定一個視窗,視窗的大小為24*24畫素,那麼我們得到的特徵有多少個呢?
計算公式如下:
可以參考本文的第一幅圖中的ABCD個特徵那幅圖。
該部分未完待續!!!

使用Adaboost進行訓練

該部分未完待續!!!

其他一些引數的確定

如何確定有多少個級聯的分類器,有多少個特徵,閾值如何確定的。

掃描視窗的時候的縮放如何確定

合併檢測出的多個視窗

補充說明

Haar-like特徵的分類(Haar-like特徵的變種)