深度篇——图像处理的一些方法(三) 细说 HOG 特征 与 bag-of-word

返回主目录

返回 图像处理的一些方法 目录

上一章:深度篇——图像处理的一些方法(二) 细说 性能评估 IOU 和 GIOU

下一章:深度篇——图像处理的一些方法(四) 细说 图像金字塔

本小节,细说 HOG 特征 与 bag-of-word,下一小节细说 图像金字塔

五. HOG (Histogram of Oriented Gradient, HOG) 方向梯度直方图特征

HOG 特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算饿统计图像局部区域的梯度方向直方图来构成特征。HOG 特征结合 SVM 分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是:HOG + SVM 进行行人检测的方法是法国研究人员 Dalal 在 2005 年的 CVPR 上提出的,而如今虽然有很多检测算法不断提出,但基本都是以 HOG + SVM 的思路为主。

1. 主要思想

    在一幅图像中,局部目标的表象和形状(appearance and shape) 能够被梯度或边缘的方向密切分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。

 

2. 具体的实现方法

    首先将图像分成小的连通区域,把它称为细胞单元,然后采集细胞单元中各像素点的梯度或边缘的方向直方图。最后把这些直方图组合起来构成特征描述器。

 

3. HOG 特征提取算法的实现过程

   HOG 特征提取方法就是将 一张 image (要检测的目标或扫描窗口)

   (1). 灰度化 (将图像看作一张 x、y、z (灰度) 的三维图像)

   (2). 采用 Gamma 矫正法对输入图像进行颜色空间的标准化(归一化)。目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪声的干扰。首先需要将整张图像进行归一化,在图像的纹理强度中,局部的表层曝光贡献较大,所以,这种压缩处理能够有效地降低图像局部的阴影和光照变化。因为颜色信息作用不大,通常先转化为灰度图。Gamma 压缩公式:比如可以取  \large Gamma = \frac{1}{2}

   (3). 计算图像每个像素的梯度(包括大小与方向),主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值;求导操作不仅能够捕获轮廓,人影饿一些纹理信息,还能进一步弱化光照的影响。

         图像中像素点 \large (x,\; y) 的梯度为:

         最常用的方法是:首先用 [-1, 0, 1] 梯度算子对原图像做卷积运算,得到 x 方向(水平方向,以向右为正方向) 的梯度分量 grand scale x,然后用 \large [-1, 0, 1]^{T} 梯度算子对原图像做卷积运算,得到 y 方向(竖直方向,以向上为正方向) 的梯度分量 grand scale y。然后再用以上公式计算该像素点的梯度大小和方向。

   (4). 将图像划分成 cells (比如 6 x 6 像素/cell)

   (5). 统计每个 cell 的梯度直方图(不同梯度的个数),即可形成每个 cell 的 descriptor。

         为每个cell 单元构建梯度直方图的目的是为了局部图像区域提供一个编码,同时能够保持对图像中人体对象的姿势和外观的弱敏感性。cell 单元可以是矩形的,也可以是星形的。每个 cell 的方向为其对应 bin 的方向,梯度大小就是投影的权值。

   (6). 将每几个 cell 组成一个 block (比如 3 x 3 个 cell/block),一个 block 内所有 cell 的特征 descriptor 串联起来便得到该 block 的 HOG 特征 descriptor。

          把 cell 单元组成大的 block (块),block 内归一化梯度直方图。由于局部光照的变化以及 前景-背景 对比度的变化,使得梯度强度的变化范围非常大。这就需要对梯度强度做归一化。归一化能够进一步地对光照、阴影和边缘进行压缩。

          把各个 cell 单元组合成大的、空间上连通的 blocks (区间)。这样,一个 block 内所有 cell 的特征向量串联起来便得到该 block 的 HOG 特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。将归一化之后的 block 描述符(特征) 就称为 HOG 特征。

           区间有两个主要的几何形状——矩形区间(R-HOG) 和 环形区间(C-HOG)。R-HOG 区间大体上是一些方形的格子,它可以有三个参数来表征:每个区间中细胞单元的数目、每个细胞单元中像素点的数目、每个细胞的直方图通道数目。例如:行人检测的最佳参数设置是:3 x 3 cell/block,6 x 6 pixel/cell,9个直方图通道。则一块的特征数为:3 x 6 x 9 = 162。

   (7). 将图像 image 内所有 block 的 HOG 特征 descriptor 串联起来就可以得到该 image (所要检测的目标) 的 HOG 特征 descriptor。即是将检测窗口中所有重叠的 block 进行 HOG 特征收集,并将它们结合成最终的特征向量供分类使用。

 

4. 提高性能

    把这些局部直方图在图像更大的范围内(把它叫 区间 或 block) 进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block) 中的密度,然后根据这个密度对区间中的各个细胞单元做归一化。通过这个归一化后,能对光照变化和阴影获得更好的效果。

 

5. 优点

    与其他的特征描述方法相比,HOG 有很多优点。首先,由于 HOG 是在图像的局部方格单元上操作,所以它对图像几何的和光学的变形都能保持很好的不变性,这两种变形只会出现在更大的空间领域上。其次,在粗的空间领域抽样、精细的方向抽样以及较强的局部光学归一化条件下,只需要行人大体上能够保持直立的姿势,可以允许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。因此 HOG 特征是特别适合于做图像中的人体检测的。

 

6. 行人检测 HOG + SVM 的总体思路

   (1). 提前正负样本的 HOG 特征

   (2). 投入 SVM 分类器训练,得到 model

   (3). 由 model 生成检测子

   (4). 利用检测子检测负样本,得到 hard example

   (5). 提取 hard example 的 HOG 特征,并结合第一步中的 特征一起投入训练,得到最终的检测子。

 

六. bag-of-words 词袋 (BOW)

1. bag-of-words 模型是信息检索领域常用的文档表示方法。在信息检索中,bag-of-words 模型假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个词的出现都是独立的,不依赖于其他单词是否出现。也就是说,文档中任意一个位置出现的任何单词,都不受该文档语意影响而独立选择的。

   比如下面的两个文档:

    (1): Bob likes to play basketball, Jim likes too.

    (2): Bob also likes to play football games.

    基于这两个文本文档,构造一个词典:

dictionary = {1: "Bob", 2: "likes", 3: "to", 4: "play",
              5: "basketball", 6: "also", 7: "football",
              8: "games", 9: "Jim", 10: "too"}

    这个词典一共包含 10 个不同的单词,利用词典的索引号,上面两个文档每一个都可以用一个 10 维向量表示(用整数数字 0~n (n 为正整数) 表示某个单词在文档中出现的次数):

    (1):  [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

    (2):  [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

    向量中每个元素表示词典中相关元素在文档中出现的次数(下文中,将用单词的直方图表示)。不过,在构造文档向量的过程中可以看到,并没有表达单词在原来句子中出现的次序(这是 bag-of-words 模型的缺点之一,不过瑕不掩瑜,甚至在此处无关紧要)。

 

2. bag-of-words 模型的使用场合

   现在想象一个巨大的文档集合 D,里面一共有 M 个文档,而文档里面的所有单词提取出来后,一起构成一个包含 N 个单词的词典,利用 bag-of-words 模型,每个文档都可以被表示成一个 N 维向量,计算机非常擅长处理数值向量。这样,就可以利用计算机来完成海量文档的分类过程。

    考虑将 bag-of-words 模型应用于图像表示。为了表示一幅图像,可以将图像看作文档,即若干个 “视觉词汇” 的集合,同样的,视觉词汇相互之间没有顺序。

  

    同样的,字典也可以如下:

dictionary = {1: "鼻子", 2: "眼睛", 3: "头发", 4: "项链",
              5: "嘴巴", 6: "下巴", 7: "肩膀", 8: "脸蛋"}

 

     由于图像中的词汇不像文本文档中的那样是现成的。需要首先从图像中提取出相互独立的视觉词汇,这通常需要经过三个步骤:

      (1). 特征检测

      (2). 特征表示

      (3). 单词本的生成

      通过观察会发现,同一类目标的不同实例之间虽然存在差异,但仍然可以找到它们之间的一些共同的地方,比如说人脸,虽然说不同人的脸差异比较大,但眼睛、嘴、鼻子等一些比较细小的部位,却观察不到太大的差别,可以把这些不同实例之间共同的部位提取出来,作为识别这一类目标的视觉词汇。

       而 SIFT 算法是提取图像中局部不变特征的应用最广泛的算法,因此可以用 SIFT 算法从图像中提取不变特征点,作为视觉词汇,并构造单词表,用单词表中的单词表示一幅图像。

 

3. bag-of-words 模型应用三步

   (1). 利用 SIFT 算法,从每类图像中提取视觉词汇,将所有的视觉词汇集合在一起

   (2). 利用 k-means 算法构造单词表。k-means 算法是一种基于样本间相似性度量的间接聚类方法。SIFT 提取的视觉词汇向量之间根据距离的远近,可以利用 k-means 算法将语义相近的词汇合并,作为单词表中的基础词汇,构造一个包含 k 个词汇的单词表。

   (3). 利用单词表中的词汇表示图像。利用 SIFT 算法,可以从每幅图像中提取很多个特征,这些特征点都可以用单词表中的单词近似代替,通过统计单词表中每个单词在图像中出现的次数,从而将图像表示为一个 k 维数值向量。

 

                  

返回主目录

返回 图像处理的一些方法 目录

上一章:深度篇——图像处理的一些方法(二) 细说 性能评估 IOU 和 GIOU

下一章:深度篇——图像处理的一些方法(四) 细说 图像金字塔

发布了63 篇原创文章 · 获赞 16 · 访问量 5989

猜你喜欢

转载自blog.csdn.net/qq_38299170/article/details/104434459