HOG特征提取matlab代码

本文详细介绍了如何通过MATLAB代码实现HOG特征提取的过程,包括图像预处理、梯度计算、方向直方图构建及块规范化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clear;clc;


img=imread('1.png');


% 1、%灰度化
img=rgb2gray(img);
img=double(img);


step=8;      %8*8个像素作为一个cell
[m1 n1]=size(img);
%改变图像尺寸为step的最近整数倍
img=imresize(img,[floor(m1/step)*step,floor(n1/step)*step],'nearest');
[m n]=size(img);


% 2、%伽马校正
img=sqrt(img);
% 3、求梯度和方向
fy=[-1 0 1];        %定义竖直模板
fx=fy';             %定义水平模板
Iy=imfilter(img,fy,'replicate');    %竖直梯度
Ix=imfilter(img,fx,'replicate');    %水平梯度
Ied=sqrt(Ix.^2+Iy.^2);              %梯度幅值
Iphase=Iy./Ix;              %边缘斜率,有些为inf,-inf,nan,其中nan需要再处理一下
the=atan(Iphase)*180/3.14159; %求梯度角度


for i=1:m
    for j=1:n
        if(Ix(i,j)>=0&&Iy(i,j)>=0) %第一象限
            the(i,j)=the(i,j);
        elseif(Ix(i,j)<=0&&Iy(i,j)>=0) %第二象限
            the(i,j)=the(i,j)+180;
        elseif(Ix(i,j)<=0&&Iy(i,j)<=0) %第三象限
            the(i,j)=the(i,j)+180;
        elseif(Ix(i,j)>=0&&Iy(i,j)<=0) %第四象限
            the(i,j)=the(i,j)+360;
        end


        if isnan(the(i,j))==1  %0/0会得到nan,如果像素是nan,重设为0
            the(i,j)=0;
        end


    end
end
the=the+0.000001; %防止角度为0


% 4、划分cell,求cell的直方图( 1 cell = 8*8 pixel )
clear i j;
%下面是求cell
step=8;                %step*step个像素作为一个cell
orient=9;               %方向直方图的方向个数
jiao=360/orient;        %每个方向包含的角度数
Cell=cell(1,1);              %所有的角度直方图,cell是可以动态增加的,所以先设了一个
ii=1;
jj=1;


for i=1:step:m
    ii=1;
    for j=1:step:n
        Hist1(1:orient)=0;
        for p=1:step
            for q=1:step
                %梯度方向直方图
                Hist1(ceil(the(i+p-1,j+q-1)/jiao))=Hist1(ceil(the(i+p-1,j+q-1)/jiao))+Ied(i+p-1,j+q-1);
            end
        end
        Cell{ii,jj}=Hist1;       %放入Cell中
        ii=ii+1;
    end
    jj=jj+1;
end


% 5、划分block,求block的特征值,使用重叠方式( 1 block = 2*2 cell )
clear m n i j;
[m n]=size(Cell);
feature=cell(1,(m-1)*(n-1));
for i=1:m-1
    for j=1:n-1
        block=[];
        block=[Cell{i,j}(:)' Cell{i,j+1}(:)' Cell{i+1,j}(:)' Cell{i+1,j+1}(:)'];
        block=block./sum(block); %归一化
        feature{(i-1)*(n-1)+j}=block;
    end
end


% 6、图像的HOG特征值
[m n]=size(feature);
l=2*2*orient;
featureVec=zeros(1,n*l);
for i=1:n
    featureVec((i-1)*l+1:i*l)=feature{i}(:);
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值