机器学习初探(手写数字识别)HOG图片

这里我们讲一下使用HOG的方法进行手写数字识别:

首先把

代码分享出来:

hog1.m

function B = hog1(A)
%A是28*28的
B=[];
[x,y] = size(A);
%外圈补0
A(:,y+1) = 0;
A(x+1,:) = 0;
for i=1:x
    deltax(:,i)=A(:,i+1)-A(:,i);
end
for i=1:y
    deltay(i,:)=A(i+1,:)-A(i,:);
end
for i = 1:13
    for j = 1:13
        Px=deltax(i*2-1:i*2+2,j*2-1:j*2+2);
        Py=deltay(i*2-1:i*2+2,j*2-1:j*2+2);
        B=[B;hog2(Py,Px)];
    end
end

hog2.m

function res = hog2(Px,Py);
%这里Px和Py是x方向和Y方向的偏导矩阵
%返回是一个7*1的矩阵
res=zeros(7,1);
[pxx,pxy]=size(Px);
for k=1:pxx*pxy
    len = sqrt(Px(k)^2+Py(k)^2);
    if atan2(Py(k),Px(k))>=-pi && atan2(Py(k),Px(k))<2*pi/7-pi
        res(1)=res(1)+len;
    elseif atan2(Py(k),Px(k))>=2*pi/7-pi && atan2(Py(k),Px(k))<4*pi/7-pi
        res(2)=res(2)+len;
    elseif atan2(Py(k),Px(k))>=4*pi/7-pi && atan2(Py(k),Px(k))<6*pi/7-pi
        res(3)=res(3)+len;
    elseif atan2(Py(k),Px(k))>=6*pi/7-pi && atan2(Py(k),Px(k))<8*pi/7-pi
        res(4)=res(4)+len;
    elseif atan2(Py(k),Px(k))>=8*pi/7-pi && atan2(Py(k),Px(k))<10*pi/7-pi
        res(5)=res(5)+len;
    elseif atan2(Py(k),Px(k))>=10*pi/7-pi && atan2(Py(k),Px(k))<12*pi/7-pi
        res(6)=res(6)+len;
    elseif atan2(Py(k),Px(k))>=12*pi/7-pi && atan2(Py(k),Px(k))<14*pi/7-pi
        res(7)=res(7)+len;
    end
end

hog1得到的是一个1183*1的矩阵。

http://blog.csdn.net/hqh45/article/details/44228715

原文地址:https://www.cnblogs.com/LoganChen/p/7833413.html