Haar-like矩形特征计算详解
Haar-like矩形特征的特征值的快速計算方法
FROM:?http://blog.sina.com.cn/s/blog_4e6680090100d2sd.html
1、Haar-like特征:
????Haar-like特征最早是由Papageorgiou等應用于人臉表示。Papageorgiou在針對正面人臉和人體檢測問題的研究中使用Haar小波基函數,他們發現標準正交Haar小波基在應用上受到一定的限制,為了取得更好的空間分辨率,他們使用了3種類型的3種形式的特征。Viola等在此基礎上作了擴展,使用2種類型4種形式的特征。3種類型分別為:2-矩形特征、3-矩形特征、4-矩形特征。
????
????對于圖中的A,??B和D這類特征,特征數值計算公式為:
?????????????????????????????????v=Sum白-Sum黑
????而對于C來說,計算公式如下:
?????????????????????????????????v=Sum白-2*Sum黑
????之所以將黑色區域像素和乘以2 ,是為了使兩種矩形區域中像素數目一致。
????通過改變特征模板的大小和位置,可在圖像子窗口中窮舉出大量的特征。為了描述的方便,本文將上圖的特征模板稱為“特征原型”;特征原型在圖像子窗口中擴展 (平移伸縮)得到的特征稱為“矩形特征”;矩形特征的稱為 “特征值”o
?????假設訓練或檢測窗口大小為Wx H個像素,w , h 分別為特征原型的長、 寬,所示四種特征原型對應的w / h 分別為:2/1,1/2,3/1,2/2。
????
????一個haar-like特征在24*24像素圖的子檢測窗口中的矩形特征數量總計為134736個。
????2、積分圖:
????由于訓練樣本通常有近萬個,并且矩形特征的數量非常龐大,如果每次計算特征值都要統計矩形內所以像素之和,將會大大降低訓練和檢測的速度。因此引入了一種新的圖像表示方法——積分圖像,矩形特征的特征值計算,只與此特征矩形的端點的積分圖有關,所以不管此特征矩形的尺度變換如何,特征值的計算所消耗的時間都是常量。這樣只要遍歷圖像一次,就可以求得所有子窗口的特征值。
????積分圖的定義為:
???
????其中I(x',y')為圖像在點(x',y')處的像素值。
????為了節約時間,減少重復計算,則圖像I的積分圖可按如下遞推公式計算:
???
????這樣就可以進行2種運算:
????(1)任意矩形區域內像素積分。由圖像的積分圖可方便快速地計算圖像中任意矩形內所有像素灰度積分。如下圖2.3所示,點1的積分圖像ii1的值為(其中Sum為求和) :
????ii1=Sum(A)
????
????同理,點2、點3、點4的積分圖像分別為:
????ii2=Sum(A)+Sum(B);??????ii3=Sum(A)+Sum(C);????ii4=Sum(A)+Sum(B)+Sum(C)+Sum(D);
????矩形區域D內的所有像素灰度積分可由矩形端點的積分圖像值得到:
?????????????????????Sum(D)=ii1+ii4-(ii2+ii3)????????????(1)
????(2) 特征值計算
????矩形特征的特征值是兩個不同的矩形區域像素和之差,由(1)式可以計算任意矩形特征的特征值,下面以圖2.1中特征原型A為例說明特征值的計算。
???
????如圖2.4 所示,該特征原型的特征值定義為:
????Sum(A)-Sum(B)
????根據(1)式則有:Sum(A)=ii4+ii1-(ii2+ii3);????Sum(B)=ii6+ii3-(ii4+ii5);
????所以此類特征原型的特征值為:
?????????????????(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5)
????另示:運用積分圖可以快速計算給定的矩形之所有象素值之和Sum(r)。假設r=(x,y,w,h),那么此矩形內部所有元素之和等價于下面積分圖中下面這個式子:
?????????????????Sum(r) = ii(x+w,y+h)+ii(x-1,y-1)-ii(x+w,y-1)-ii(x-1,y+h)
????由此可見,矩形特征特征值計算只與此特征端點的積分圖有關,而與圖像坐標值無關。對于同一類型的矩形特征,不管特征的尺度和位置如何,特征值的計算所耗費的時間都是常量,而且都只是簡單的加減運算。其它類型的特征值計算方法類似。
?
[matlab code]
?
%---------------------------------------------------------------------------------------------%2 遍歷得到各點的積分
function ii = bianli(I)
[row,col] = size(I);
ii=zeros(row,col);
for i=1:row
????for j=1:col
????????s=sum(I(1:i,j));
????????if(j-1<=0)
????????????ii(i,j) = s;
????????else
????????????ii(i,j)=s+ii(i,j-1);
????????end
????????s=0;
????end
end
%---------------------------------------------------------------------------------------------
%3 在矩陣上面補0和左面補0
%rn 補rn行0
%cn 補cn列0
function ii = buzero(iio,rn,cn)
[row,col]=size(iio);
ii=[zeros(rn,col+cn);[zeros(row,cn),iio]];
%---------------------------------------------------------------------------------------------
%對于圖中B的矩陣特征
function F = tezhen1(ii)
minw = 1; %最小寬
minh = 2; %最小高
aw=1; %伸縮倍率,w方向
ah=1; %伸縮倍率,h方向
F=[];
F1=[];
w=minw;
h=minh;
[row,col]=size(ii);
while(minh*ah<=row)????
????while(minw*aw<=col)
????????for i=1:row-h
????????????for j=1:col-w
????????????????white = ii(i,j)+ii(i+h/2,j+w)-ii(i+h/2,j)-ii(i,j+w);
????????????????black = ii(i+h/2,j)+ii(i+h,j+w)-ii(i+h,j)-ii(i+h/2,j+w);
????????????????F1((i-1)*(col-w)+j)=white-black;
????????????end
????????end
????????F=[F,F1];
????????F1=[];
????????aw=aw+1;
????????w=minw*aw;
????end
????ah=ah+1;
????h=minh*ah;
????w=minw; %復位
????aw=1;???%復位
end
%---------------------------------------------------------------------------------------------
%測試
%I=[1,2,3,4,5,6;7,8,9,10,11,12;13,14,15,16,17,18;19,20,21,22,23,24;25,26,27,28,29,30;31,32,33,34,35,36]; %應為189個
%I=rgb2gray(imread('1.bmp')); %20*20像素圖,因為21000
ii=bianli(I);
ii=buzero(ii,1,1);
F=tezhen1(ii); %為矩形特征值數組
總結
以上是生活随笔為你收集整理的Haar-like矩形特征计算详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈尔特征(Haar-like featu
- 下一篇: AdaBoost人脸检测原理