news 2026/8/5 17:28:50

MATLAB实现HOG特征提取与SVM行人检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MATLAB实现HOG特征提取与SVM行人检测

一、HOG特征提取实现

1. 核心算法流程
functionhog_feat=compute_hog(img)% 输入:灰度图像(单通道)% 输出:归一化后的HOG特征向量% 参数设置cell_size=8;% cell尺寸(像素)block_size=2;% block包含的cell数num_bins=9;% 方向直方图分箱数[rows,cols]=size(img);% 1. 计算梯度[Gx,Gy]=imgradientxy(img,'sobel');grad_mag=sqrt(Gx.^2+Gy.^2);grad_dir=atan2(Gy,Gx)*180/pi;% 转换为角度% 2. 构建梯度直方图num_cells_x=floor(cols/cell_size);num_cells_y=floor(rows/cell_size);hog_cell=zeros(num_cells_y,num_cells_x,num_bins);fori=1:num_cells_yforj=1:num_cells_x% 提取当前cell区域cell_img=grad_mag((i-1)*cell_size+1:i*cell_size,...(j-1)*cell_size+1:j*cell_size);cell_dir=grad_dir((i-1)*cell_size+1:i*cell_size,...(j-1)*cell_size+1:j*cell_size);% 计算方向直方图hist=zeros(1,num_bins);fork=1:numel(cell_dir)angle=cell_dir(k);ifangle<0,angle=angle+180;endbin=round(angle/(180/num_bins))+1;hist(bin)=hist(bin)+cell_mag(k);endhog_cell(i,j,:)=hist/sum(hist);% 归一化endend% 3. Block归一化hog_feat=[];fori=1:block_size:num_cells_y-block_size+1forj=1:block_size:num_cells_x-block_size+1block=hog_cell(i:i+block_size-1,j:j+block_size-1,:);block=block(:);% 展平block=block/norm(block+eps);% L2归一化hog_feat=[hog_feat;block];endendend
2. 关键优化点
  • Gamma校正:预处理阶段进行对比度归一化

    img=sqrt(img);% Gamma=0.5的近似实现
  • 方向插值:采用双线性插值提升方向估计精度

  • 重叠Block:设置50%重叠区域提升特征连续性


二、SVM分类器训练

1. 数据准备
% 加载INRIA数据集pos_dir='INRIAPerson/pos/';neg_dir='INRIAPerson/neg/';% 提取正样本特征pos_feat=[];fori=1:numel(dir(pos_dir))img=imread(fullfile(pos_dir,dir(pos_dir){i}));img=imresize(img,[64,128]);pos_feat=[pos_feat;compute_hog(img)];endlabels_pos=ones(size(pos_feat,1),1);% 提取负样本特征neg_feat=[];fori=1:numel(dir(neg_dir))img=imread(fullfile(neg_dir,dir(neg_dir){i}));img=imresize(img,[64,128]);neg_feat=[neg_feat;compute_hog(img)];endlabels_neg=-ones(size(neg_feat,1),1);% 合并数据集features=[pos_feat;neg_feat];labels=[labels_pos;labels_neg];
2. 训练流程
% 划分训练集和测试集cv=cvpartition(size(features,1),'HoldOut',0.3);train_feat=features(cv.training,:);train_labels=labels(cv.training,:);test_feat=features(cv.test,:);test_labels=labels(cv.test,:);% 训练SVM模型model=fitcsvm(train_feat,train_labels,...'KernelFunction','linear',...'BoxConstraint',1,...'Standardize',true);% 性能评估predicted=predict(model,test_feat);accuracy=sum(predicted==test_labels)/numel(test_labels);disp(['测试集准确率: ',num2str(accuracy*100,'%.2f'),'%']);

三、行人检测实现

1. 滑动窗口检测
functiondetections=sliding_window_detection(img,model,step=8)[rows,cols]=size(img);detections=[];fory=1:step:rows-64forx=1:step:cols-128window=imcrop(img,[x,y,128,64]);hog_feat=compute_hog(window);ifpredict(model,hog_feat)==1detections=[detections;x,y,128,64];endendendend
2. 非极大值抑制(NMS)
functionkeep=nms(boxes,overlap)ifisempty(boxes),return;end% 转换为x1,y1,x2,y2格式x1=boxes(:,1);y1=boxes(:,2);x2=x1+boxes(:,3)-1;y2=y1+boxes(:,4)-1;% 计算面积area=(x2-x1+1).*(y2-y1+1);% 按置信度排序[~,idx]=sort(predictions,'descend');x1=x1(idx);y1=y1(idx);x2=x2(idx);y2=y2(idx);area=area(idx);pick=[];while~isempty(idx)last=length(idx);i=idx(last);pick=[pick;i];% 计算重叠区域xx1=max(x1(i),x1(idx(1:last-1)));yy1=max(y1(i),y1(idx(1:last-1)));xx2=min(x2(i),x2(idx(1:last-1)));yy2=min(y2(i),y2(idx(1:last-1)));w=max(0,xx2-xx1+1);h=max(0,yy2-yy1+1);overlap_ratio=(w.*h)./(area(idx(1:last-1))+area(i)-w.*h);% 删除重叠过高的框idx(idx(1:last-1)&overlap_ratio>overlap)=[];endend

四、完整检测流程

% 加载测试图像img=imread('test.jpg');img_gray=rgb2gray(img);% 检测detections=sliding_window_detection(img_gray);% 非极大值抑制keep=nms(detections,0.3);final_detections=detections(keep,:);% 可视化结果figure;imshow(img);hold on;fori=1:size(final_detections,1)rectangle('Position',final_detections(i,:),...'EdgeColor','r','LineWidth',2);endhold off;

参考代码 HOG特征提取在进行SVM行人检测www.youwenfan.com/contentcsn/81104.html

五、扩展应用

  1. 实时检测:结合YOLOv3实现混合检测框架
  2. 多目标跟踪:集成卡尔曼滤波器进行轨迹预测
  3. 异常检测:分析时序行人行为特征
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 16:38:45

改进YOLOv8结合跨尺度多头自注意力机制实现野火烟雾检测

1. 改进YOLOv8结合跨尺度多头自注意力机制实现野火烟雾检测 近年来&#xff0c;野火频发对生态环境和人类生命财产安全构成严重威胁&#xff0c;而早期烟雾检测是预警野火的关键环节。基于深度学习的烟雾检测算法已成为国内外研究热点&#xff0c;众多学者针对不同应用场景提出…

作者头像 李华
网站建设 2026/8/5 8:48:29

致进食障碍者

进食障碍的一直重复发作&#xff0c;仿佛在播放一张唱片时&#xff0c;它永远都会转到同一条声槽。 进食紊乱刺激了进食障碍者走出时间的束缚。当时间变成了毁灭者&#xff0c;个体会使用症状让自己走出来。而进食障碍就是症状之一。

作者头像 李华
网站建设 2026/8/5 4:30:31

深度合成算法备案超全解析!从定义到落地的4步合规法则

为了规范互联网信息服务算法推荐活动&#xff0c;促进互联网信息服务健康有序发展&#xff0c;国家网信部门出台了《互联网信息服务算法推荐管理规定》。其明确规定了应用算法推荐技术向用户提供互联网信息服务的企业或机构必须进行算法备案。 那不少企业和开发者就有了这样的困…

作者头像 李华
网站建设 2026/8/3 21:46:32

我如何设计一个不会“发疯”的多智能体系统?

一、所有“失控”的多智能体&#xff0c;第一天就已经写错了我见过太多人是这样做多智能体系统的&#xff1a;一个 Planner一个 Executor一个 Reviewer一个 Summarizer然后让他们开始“自由交流”。看起来像一个团队&#xff0c;实际上更像一个精神病院。我们这代做了二十年工程…

作者头像 李华
网站建设 2026/8/5 4:35:54

day122—二分查找—完成旅途的最少时间(LeetCode-2187)

题目描述给你一个数组 time &#xff0c;其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。每辆公交车可以 连续 完成多趟旅途&#xff0c;也就是说&#xff0c;一辆公交车当前旅途完成后&#xff0c;可以 立马开始 下一趟旅途。每辆公交车 独立 运行&#xff0…

作者头像 李华
网站建设 2026/8/5 4:25:03

2025实测7款AI写小说神器!从卡文到日更,新手老手都适配

写小说最崩溃的不是没脑洞&#xff0c;是大纲写一半断层、卡文卡到怀疑人生&#xff0c;甚至熬夜写的稿子突然丢失&#xff01; 之前让我用写小说工具可能会不屑一顾&#xff0c;但现在是2025年&#xff0c;AI元年&#xff0c;AI写小说工具早就不是“人工智障”&#xff0c;而…

作者头像 李华