%---------------------------------------------------------------------------------------------
%2 遍历得到各点的积分
function ii = bianli(I)
%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];%测试矩阵2
I=imread('D:\MIT\faces\004998.bmp');
[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
ii=buzero(ii,1,1);
F=tezhen1(ii);
%---------------------------------------------------------------------------------------------
%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的矩阵特征(宽1,高2)
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=imread('D:\my documents\MIT\faces\004998.bmp'); %20*20像素图,应为21000
ii=bianli(I);
ii=buzero(ii,1,1);
F=tezhen1(ii); %为矩形特征值数组