图像特征提取算法—HOG

article/2025/9/28 16:24:29

图像特征提取算法—HOG

一 图像基本概念

1.1特征

边缘,角,区域。但不同的目的对应着的不同的特征,边缘特征,颜色特征,梯度方向分布等。
每个物体,我们总可以用一些词语或部件来描述它,比如人脸的特征:两个眼睛、一个鼻子和一个嘴巴。对于图像而言,我们需要计算机去理解图像,描述图像就需要计算机去取得图像的特征,对图像比较全面的描述即一个二维矩阵,矩阵内的每个值代表图像的亮度。有时候我们需要让计算机更简化的来描述一个图像,抓住一些显著特征,这些特征要具有一些良好的性质,比如局部不变性。
局部不变性一般包括两个方面:尺度不变性与旋转不变性。
1)尺度不变性:人类在识别一个物体时,不管这个物体或远或近,都能对它进行正确的辨认,这就是所谓的尺度不变性。尺度空间理论经常与生物视觉关联,有人也称图像局部不变性特征为基于生物视觉的不变性方法。
2)旋转不变性:当这个物体发生旋转时,我们照样可以正确地辨认它,这就是所谓的旋转不变性。

1.2 特征描述子

就是图像的表示,抽取了有用的信息丢掉了不相关的信息,通常特征描述子会把一个wh3的图像转换成一个长度为n的向量,比如一幅641283的图像经过转换后的向量长度可以是3780。

1.3 图像特征的提取方法

(1)传统特征提取方法:基于图像本身的特征进行提取(2)深度学习方法:基于样本自动训练出区分图像的特征分类器

1.4 图像特征提取的操作步骤

预处理(分块)——特征提取——特征处理,然后再利用深度学习,机器学习等方法对特征进行分类,分割等操作预处理:预处理的目的只是排除干扰因素,突出特征信息,主要方法:(1)图片标准化:调整图片尺寸。(2)图片归一化:调整图片重心为0.特征提取:利用特殊的特征提取算子对图片进行特征提取,主要有:HOG,SIFT…特征处理:主要目的是为了排除信息量小的特征,减小计算量,常见方法有降维(主要成分分析,奇异值分解,线性判别分析)

二 常见的特征提取方法

2.1:HOG方向梯度直方图(Histogram of Oriented Gradient)

2.1.1 基本概念:梯度的方向分布作为特征,因为在边缘和角点的梯度值很大。基于统计的特征提取算法,通过统计不同梯度方向的像素而获得图像的特征向量,适合做图像中的人体检测。常与SVM(支持向量积)结合用在行人检测上。这个名字起的也很直白,就是说先计算图片某一区域中不同方向上梯度的值,然后进行累加,得到可以代表这块区域的直方图,使用直方图进行检索或分类。
2.1.2 HOG的优点:1):由于是在图像的局部方格单元上操作,所以他对图像几何和光学的形变都保持很好的不变性,这两种形变只会出现在更大的空间领域上。2):在粗的空域抽样,精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。
2.1.3特征提取:HOG特征的提取包括图像分割(分块),分区方向梯度直方图计算和组成特征等

步骤一

进行灰度化,Gamma矫正,重叠快归一化,分块等预处理。分割图像 HOG的图像分割策略,一般来说有overlap和non-overlap两种,如下图所示
在这里插入图片描述
Overlap指的是分割出的区块(patch,可以是任意尺度的)互相交叠,有重合的区域,non-overlap没有重合的区域,overlap:可以防止对一些物体的分割,以眼睛为例,如果分割的时候正好把眼睛从中间切割并分到两个patch中,提取完HOG特征之后会影响接下来的分类效果,但是如果两个patch之间有重叠,那么至少有一个patch会有完整的眼睛,overlap的缺点是计算量大,因为重叠区域的像素需要重复计算。Non-overlap优点是计算量小,缺点是会将一个连续的物体分隔开。

步骤二

将图像分割后,接下来就要计算每个patch的方向梯度直方图。A:利用任意一种梯度算子的核,例如sobel,laplacian等,对该patch进行卷积,然后利用下面公式得到每个像素点处的梯度方向和幅值:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Gx和Gy代表水平和垂直方向的梯度值,M(x,y)代表梯度的幅值,θ(x,y)代表梯度方向。可以得到梯度图。B:将360度(2*pi)根据需要分割成若干个bin,例如分割成16个bin,每个bin包含22.5度,整个直方图包含16维,即16个bin,然后根据线性内插法将其幅值累加到直方图中。
在这里插入图片描述

论文中建议将图像分割成更大的Block,并利用该Block对其中每个小patch进行颜色,亮度的归一化,这步主要是用来去掉光照,阴暗等影响,对光照影响不敏感的可以不做这一步,例如数字图像,对最终分类准确率的影响不大。

步骤三

组成特征:将每个patch中提取出的小HOG特征首位相连,组成一个大的一维向量,这就是最终的图像特征,可以将这个特征送到分类器中训练。例如有16个patch,则有16*12=192维长度的特征。

改进的HOG

与pyramid相结合,即PHOG,对一幅图像进行不同尺度的分割,然后计算每个尺度中patch的小HOG,最后将他们连成一个很长的一维向量作为特征。例如对512512的图像先进行33的分割,其次是66,1212,最终得到的是912+3612+14412=2268维的特征。不同尺度上获得的HOG特征必须对其归一化,因为33任意一维都比12*12大。PHOG相对于HOG优点是能检测到不同的尺度的特征,表达能力强,但缺点是数据量和计算量更大。

算法结果
在这里插入图片描述

参考文献
Navneet dalal and bill triggs,《Histograms of Oriented Gradients for Human Detection》,2005


http://chatgpt.dhexx.cn/article/hEc1Kpbf.shtml

相关文章

时域特征提取_EEG信号特征提取算法

点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 时域分析与频域分析 EEG信号特征提取就是以脑电信号作为源信号,确定各种参数并以此为向量组成表征信号特征的特征向量。 特征參数主要包括时域信号(如幅值)和频域信号(如频率)两大类,相应的特征提取方法也…

特征提取算法

特征提取 1、背景2、边界预处理Moore boundary tracing algorithmChain CodesFreeman Chain Codesslope chain codes (SCCs) minimum-perimeter polygon (MPP)signaturesskeletons 3、Region Feature Descriptors3.1 区域描述子和特征向量3.2 Topological Descriptors3.3 Textu…

深度学习之特征提取算法

目录 前言 二、LBP(Local Binary Patterns,局部二值模式) 三、HOG算法(Histogram of Oriented Gradient, 方向梯度直方图) 四、SIFT算子(Scale-invariant feature transform ,尺度不变特征变换) 五、H…

idea如何使用git关联远程仓库

1.git的配置 一般本地安装了git,idea会自动检索, 2.创建git本地仓库 一般以你要上传的项目为根目录 3.将文件提交至本地仓库 4.提交至远程仓库 点击VCS选择git点击push提交,第一次连接会让你输入远程仓库的地址。 我们先将github上的地…

git 将本地项目关联到远程仓库

原文链接:https://www.jianshu.com/p/2a8b4e627991 参考链接: https://blog.csdn.net/baidu_35085676/article/details/53456884 1.首先在项目目录下初始化本地仓库 git init 2.添加所有文件( . 表示所有) git add . 3.提交所有文件到本地仓库 git comm…

git创建本地仓库远程仓库,并关联。全过程

1.在网页中自己的github账号下,创建仓库project 2.在本机创建文件夹project。 进入文件夹project. (1) git init (2) git add README.md (3) git commit -m "first commit" (4) git branch -M master (5) git remote add origin https://github.co…

Git本地仓库与远程仓库关联

一、前提条件 1、本地一个仓库:本地仓库已经经过git init 初始化 2、远程一个仓库:已经存在了一个远程的仓库 3、GitHub已经添加了SSH Keys 二、建立远程与本地仓库的关联 本地仓库与远程仓库关联有两种方法,一种是通过IDE(比…

使用git命令,本地仓库关联到远程仓库

本地仓库关联到远程: 创建成功会得到一个url地址和git全局设置的两行命令,下面从本地链接远程时会用到。 git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 2、选择本地文件夹,在…

git关联两个远程仓库,一个仓库(github)拉取代码,另一个仓库(gitlab)推送代码

有这种情况,小伙伴们在github上下载的开源项目(该开源项目还在继续开发维护),然后自己下载下来进行二次开发,然后又要把项目推送自己的gitlab私服上,这个时候不得不本地代码关联两个远程仓库。接下来我将一…

IDEA本地项目关联远程Git远程仓库

IDEA本地项目关联远程Git远程仓库 下面介绍几种方法: 一、代码 clone 到本地 这种方法是直接 clone 代码,这样不需要在手动关联仓库。 1、本地创建空白文件夹 2、右键 Git Bash Here 打开控制台 3、直接 clone 远程仓库的代码 git clone 远程地址&…

如何简单的在IDEA中关联git远程仓库

在IDEA中关联远程仓库有许多的方法,那么在这呢我教大家一种简单的方法。 那么在开始之前呢,需要大家在你自己的电脑上安装git,并且在Gitee上创建自己的仓库。 同时IDEA中需要下载Gitee的插件 那么我在这也创建好了一个测试仓库 点击黄色的…

关于GIT怎么将本地仓库和远程仓库进行关联

1 首先在本地创建一个和远程仓库一样的文件夹(直接在git的命令界面中就能创建,git命令界面貌似大部分的linux的命令都能用) 2 由于是一个空文件要让git认识需要初始化,初始化命令:git init ,会在在nihao中会出现一个.git的文件 3 初始化完成后…

本地项目关联远程 git 仓库

用了几年 git 来管理代码,除了常用的提交代码的一些指令,其他的每次用到都需要查一次资料,这样很麻烦。最近有一个新项目需要关联远程仓库,我自己也整理了一下。 安装 Git:官网 下面介绍几种方法: 一、代…

Git关联远程仓库和分支

背景 在我们开发过程中经常会将本地代码放到代码仓中。 解决方法有两种,这两种方法都有一个前提就是需要在gitLab中新建一个代码仓。 第一种方法就是先将这个新的远程代码仓拉取到本地,再将本地的代码移植到本地仓中,最后push到远程仓库中…

使用Git将本地仓库与远程仓库关联的三种方式

前提条件: Git已经配置完,能实现Push,Pull、Clone等操作 GitHub/Gitee已经添加了SSH Keys 没有配置好的参考这篇文章:是的是的 一、通过Clone远程仓库的方式 前提条件:创建好云端仓库即可 通过git clone指令clone到…

利用Git连接远程仓库(详细步骤)

利用Git连接远程仓库步骤及常见问题 1.先创建一个文件夹,名字为远程仓库的名称 2.在该文件目录下打开Git Bash 3.输入git init,进行初始化(初次连接时) 4.连接远程仓库(初次连接是下一次进入该文件夹就不用了) 输入…

Git- 连接远程仓库

如何使用Git 连接远程仓库呢?远程仓库->一般指的是代码托管平台。那就先来瞅瞅三个较熟悉的版本(代码)托管服务平台。 版本(代码)托管服务平台: 码云(gitee.com):是开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平…

Git关联远程仓库

前面我们介绍的所有操作都是在本地仓库完成的,本文我们主要来看看如何和远程仓库进行交互,为了方便起见,这里远程仓库我们选择GitHub。 本文是Git系列的第五篇,了解前面的文章有助于更好的理解本文: 1.Git概述 2.Git基…

【git学习】本地关联远程仓库

目录 一、本地仓库关联远程仓库(新建仓库) 二、拉取远程分支到本地(已有远程仓库) 一、本地仓库关联远程仓库(新建仓库) 本地新建工程,然后关联远程git仓库并向远程仓库提交代码。 1、本地新建…

笔录Flutter (六) 布局系列: Stack、Positioned、Align

Flutter练习demo 常用属性 关于alignment的使用 使用这些属性 直接使用Alignment(x, y) x、y两个值的范围在 -1 到 1 之间。如图: 坐标的圆点表示center,如上图所示: 使用 效果图: import package:flutter/material.dart;c…