这里我们讲一下使用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