function p = hog(I,block,cell,angle,bin)
% hog 计算一幅图像的HOG特征
%IN:
% I - 图像 大小 MxN (Color or Gray)
% block - block大小
% angle - 180 或者 360
% bin- 直方图的方向个数
% cell- cell大小
%eg。hog(I,2,8,180,9)表示block为2x2cell;cell大小为8x8;
%OUT:
% p - histogram of oriented gradients
Img = imread(I);
if size(Img,3) == 3
G = rgb2gray(Img);
else
G = Img;
end
X = size(G,2);%图像宽度 列
Y = size(G,1);%图像高度 行
n=block*cell/2;%%此处好像不对。n=cell;ok
ny=(Y/n-1);%Y方向上的要求的cell的个数
nx=(X/n-1);%X方向上的要求的cell的个数
p=[];
for j=1:ny%行
for i=1:nx%列
Ltop=G(((j-1)*n+1):j*n,((i-1)*n+1):i*n);
Lbottom=G((j*n+1):(j+1)*n,((i-1)*n+1):i*n);
Rtop=G(((j-1)*n+1):j*n,(i*n+1):(i+1)*n);
Rbottom=G((j*n+1):(j+1)*n,(i*n+1):(i+1)*n);
pltop=anna_phog(Ltop,9,180);
plbottom=anna_phog(Lbottom,9,180);
prtop=anna_phog(Rtop,9,180);
prbottom=anna_phog(Rbottom,9,180);
pblock=[pltop;plbottom;prtop;prbottom];
if sum(pblock)~=0
pblock=pblock/sum(pblock);
end
p=[p;pblock];
end
end
s = sprintf('%s.txt',I);
%dlmwrite(s,p);
[x,y]=size(p);
for i=1:x
dlmwrite(s,p(i,1));
end
end