• 大小: 9.26MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-10-09
  • 语言: Matlab
  • 标签:

资源简介

可以进行行人检测的简单代码,测试有效,可以执行,运行结果良好

资源截图

代码片段和文件信息

%Matlab版HOG代码
function F = hogcalculator(img cellpw cellph nblockw nblockh...
    nthet overlapissigned normmethod);

% HOG特征由Dalal在2005 cvpr 的一篇论文中提出

% NORMMETHOD:重叠块中的特征标准化函数的方法
%       e为一个设定的很小的数使分母不为0
%       v为标准化前的特征向量
%       ‘none‘ which means non-normalization;
%       ‘l1‘ which means L1-norm normalization; V=V/(V+e)
%       ‘l2‘ which means L2-norm normalization; V=V/根号(V平方+e平方)
%       ‘l1sqrt‘V=根号(V/(V+e))
%       ‘l2hys‘l2的省略形式。将V最大值限制为0.2

if nargin < 2
    % 在DALAL论文中指出的在rows:128*columns:64情况下的最佳值,设定为DEFAULT
    cellpw = 8;
    cellph = 8;
    nblockw = 2;
    nblockh = 2;
    nthet = 9;
    overlap = 0.5;
    issigned = ‘unsigned‘;
    normmethod = ‘l2hys‘;
else
    if nargin < 9
        error(‘输入参数不足.‘);
    end
end

[M N K] = size(img);  %M为行数,N为列数,K为维数
if mod(Mcellph*nblockh) ~= 0   %行数必须为块的高度的整数倍
    error(‘图片行数必须为块的高度的整数倍.‘);
end
if mod(Ncellpw*nblockw) ~= 0   %列数必须为块的宽度的整数倍
    error(‘图片列数必须为块的宽度的整数倍.‘);
end                             
if mod((1-overlap)*cellpw*nblockw cellpw) ~= 0 ||...  %要使滑步后左边是整数
        mod((1-overlap)*cellph*nblockh cellph) ~= 0
    error(‘滑步的像素个数必须为细胞单元尺寸的整数倍‘);
end

%设置高斯空间权值窗口的方差
delta = cellpw*nblockw * 0.5;


%计算梯度矩阵  梯度的计算【-1,0,1】效果是很好的,而3*3的sobel算子或者2*2的对角矩阵反而会系统的降低效果
hx = [-101];
hy = -hx‘;   %转置
gradscalx = imfilter(double(img)hx);  %imfilter是滤波器,hx表示滤波掩膜
gradscaly = imfilter(double(img)hy);

if K > 1
    gradscalx = max(max(gradscalx(::1)gradscalx(::2)) gradscalx(::3));  %取RGB中最大值
    gradscaly = max(max(gradscaly(::1)gradscaly(::2)) gradscaly(::3));
end
gradscal = sqrt(double(gradscalx.*gradscalx + gradscaly.*gradscaly));  %梯度矩阵 gradscal

% 计算梯度方向矩阵
gradscalxplus = gradscalx+ones(size(gradscalx))*0.0001;  %防止为0,所以gradscalx加了0.0001
gradorient = zeros(MN);                                 %初始化梯度方向矩阵
% unsigned situation: orientation region is 0 to pi.
if strcmp(issigned ‘unsigned‘) == 1                     %无向的情况
    gradorient =...
        atan(gradscaly./gradscalxplus) + pi/2;           %加pi/2因为atan的区间取值从-pi/2开始
    or = 1;
else
    % signed situation: orientation region is 0 to 2*pi. %有向的情况
    if strcmp(issigned ‘signed‘) == 1
        idx = find(gradscalx >= 0 & gradscaly >= 0);
        gradorient(idx) = atan(gradscaly(idx)./gradscalxplus(idx));
        idx = find(gradscalx < 0);
        gradorient(idx) = atan(gradscaly(idx)./gradscalxplus(idx)) + pi;
        idx = find(gradscalx >= 0 & gradscaly < 0);
        gradorient(idx) = atan(gradscaly(idx)./gradscalxplus(idx)) + 2*pi;
        or = 2;
    else
     %  error(‘Incorrect ISSIGNED parameter.‘);
        error(‘参数ISSIGNED输入有误‘);
    end
end

% 计算块的滑步
xbstride = cellpw*nblockw*(1-overlap);   %x方向的滑步
ybstride = cellph*nblockh*(1-overlap);
xbstridend = N - cellpw*nblockw + 1;     %x方向块左角能达到的最大值
ybstridend = M - cellph*nblockh + 1;

% 块总数=ntotalbh*ntotalbw
ntotalbh = ((M-cellph*nblockh)/ybstride)+1; %除了第一个,后面每

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-09 14:03  可以用的行人检测\
     文件        9572  2011-05-11 18:32  可以用的行人检测\HOG.m
     目录           0  2018-03-09 14:03  可以用的行人检测\SVM_Toolbox\
     文件      176640  2009-11-08 22:30  可以用的行人检测\SVM_Toolbox\SVM的工具箱简介.doc
     目录           0  2018-03-09 14:03  可以用的行人检测\SVM_Toolbox\osu_svm3.00\
     文件        2905  2002-02-25 11:38  可以用的行人检测\SVM_Toolbox\osu_svm3.00\Contents.m
     文件        1978  2002-02-15 15:26  可以用的行人检测\SVM_Toolbox\osu_svm3.00\LinearSVC.m
     文件         234  2001-12-06 18:24  可以用的行人检测\SVM_Toolbox\osu_svm3.00\Normalize.m
     文件        2880  2002-02-15 16:26  可以用的行人检测\SVM_Toolbox\osu_svm3.00\PolySVC.m
     文件        2431  2002-02-15 15:46  可以用的行人检测\SVM_Toolbox\osu_svm3.00\RbfSVC.m
     文件        5967  2002-02-15 16:28  可以用的行人检测\SVM_Toolbox\osu_svm3.00\SVMClass.m
     文件        4067  2002-02-15 18:35  可以用的行人检测\SVM_Toolbox\osu_svm3.00\SVMPlot.m
     文件        5845  2002-02-15 17:44  可以用的行人检测\SVM_Toolbox\osu_svm3.00\SVMPlot2.m
     文件        7212  2002-02-15 16:09  可以用的行人检测\SVM_Toolbox\osu_svm3.00\SVMTest.m
     文件        5415  2002-02-15 16:26  可以用的行人检测\SVM_Toolbox\osu_svm3.00\SVMTrain.m
     文件         504  2002-01-28 12:47  可以用的行人检测\SVM_Toolbox\osu_svm3.00\Scale.m
     文件        1728  1997-08-13 06:33  可以用的行人检测\SVM_Toolbox\osu_svm3.00\cmap.mat
     目录           0  2018-03-09 14:03  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\
     文件      144664  2000-06-22 00:30  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\DemoData_class.mat
     文件      144656  2000-02-23 01:01  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\DemoData_test.mat
     文件      432016  2000-02-23 00:56  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\DemoData_train.mat
     文件       38496  2002-02-25 10:38  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\SVMClassifier.mat
     文件        1907  2002-02-15 16:36  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\c_clademo.m
     文件        2892  2002-02-15 15:59  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\c_lindemo.m
     文件        3369  2002-02-25 11:15  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\c_poldemo.m
     文件        3248  2002-02-25 11:15  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\c_rbfdemo.m
     文件         749  2002-02-25 09:30  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\c_svcdemo.m
     文件        3382  2002-02-25 11:14  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\one_rbfdemo.m
     文件         612  2000-10-10 05:01  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\osusvmdemo.m
     文件        1910  2002-02-25 09:33  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\u_clademo.m
     文件        2894  2002-02-25 09:34  可以用的行人检测\SVM_Toolbox\osu_svm3.00\demo\u_lindemo.m
............此处省略288个文件信息

评论

共有 条评论

相关资源