前段时间,写了一篇《matlab Hog特征提取浅析》,当时只是完成了对Hog特征提取方法的简单原理分析。最近,我深入地研究了Hog特征的提取方法,并运用积分直方图对其加速。为了便于以后运用,特将这一过程中的构思,方法,问题一一记录下来。
相关资料:
1.http://blog.csdn.net/zouxy09/article/details/7929348/2.http://blog.csdn.net/xiaowei_cqu/article/details/17928733
3.http://blog.csdn.net/WLMLBY/article/details/53446943
提取Hog特征的方法是先把窗口图像分割成cell,再把cell分割成block。然后提取block中各像素点的方向梯度合成直方图,最后把这些block的直方图组合起来就得到了图像的Hog特征。
下面具体说一下我的编程思路。
主程序(Main.m):
close all;clear all;clc;
filePath = 'E:\HOG\HogSamples\';
fileExt = '*.bmp';
files = dir(fullfile(filePath,fileExt));
len = size(files,1);
% Generate a test Image.
% testImg = reshape((1:16:256),4,4);
% hogFeature = ExtrHogFeature(testImg,3,3,1,180,9);
for i = 1:len
tic;
disp(['----------',num2str(i),'----------'])
srcImg = imread(strcat(filePath,files(i,1).name));
hogFeature = ExtrHogFeature(srcImg,5,4,2,360,15);
toc;
end
在主程序中,我遍历了指定文件夹下(“E:\HOG\HogSamples\”)的指定后缀名(*.bmp)的文件。并将遍历得到的图像作为窗口图像传递给了ExtrHogFeature函数。ExtrHogFeature函数就是我编写的,用来提取Hog特征的函数。 ExtrHogFeature函数:
function feature = ExtrHogFeature(imgFile,cellStep,blockStep,overlap,angle,binNum)
if nargin < 2
cellStep = 3;
blockStep = 4;
overlap = 1;
angle = 180;
binNum = 9;
elseif nargin < 6
error('Input parameters are not enough.');
elseif overlap < 0 || overlap >= blockStep
error('The input parameter "overlap" is wrong!');
elseif angle ~= 180 && angle ~= 360
error('The input parameter "angle" is only 180 or 360!');
end
[h,w,d] = size(imgFile);
if(d ~= 1)
grayImg = rgb2gray(