Hog特征提取

来源:互联网 发布:剑三成女捏脸数据下载 编辑:程序博客网 时间:2024/05/16 04:56

 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

原创粉丝点击