zoukankan      html  css  js  c++  java
  • 机器视觉 Histogram of oriented gradients

    Histogram of oriented gradients 简称 HoG, 是计算机视觉和图像处理领域一种非常重要的特征,被广泛地应用于物体检测,人脸检测,人脸表情检测等。

    HoG 最早是在2005 年的CVPR 上由 Navneet Dalal 和 Bill Triggs 提出来的。HoG 的算法很简单,对于物体的特征表示却非常有效。简单而高效,这大概也是其从被提出来之后,就被CV界广泛使用的原因所在。

    下面简单介绍一下HoG 的算法:
    首先是计算梯度:
    我们知道图像上一点,在水平方向和垂直方向都存在梯度,假设其水平方向上的梯度为 Gx, 垂直方向上的梯度为 Gy, 我们可以从下面的表达式计算其梯度:

    Gx=f(i,j+1)f(i,j1)

    Gy=f(i+1,j)f(i1,j)

    对于图像来说,我们可以构造两个滤波器 [1,0,1], [1,0,1]T, 让这两个滤波器对图像分别在水平方向和垂直方向做卷积,就可以得到图像水平方向和垂直方向的梯度。

    接下来,要计算该点的orientation,首先计算梯度形成的正切角,

    tanθ=Gy/Gxθ=tan1(Gy/Gx)

    θ 的取值范围可以是 0180 或者 0360, 一般来说取 0180,将这 0180 分成K个区间,那么每个区间的跨度是Δ=180/K, orientation 记录的就是正切角落入第几个区间:

    Ori=θΔ

    一般来说K=9, 那么Δ=20, Ori 的范围就是 0-8, 图像上每一个点都有一个正切角 θ, 并且可以得到每个像素点的orientation, 可以对这些orientation 做统计,就能得到一个histogram, 即直方图。所以称为 Histogram of oriented gradients.

    我们可以看到,如果K 定了的话,那么 histogram 的长度也就定了。如果在整张图像上都用这一个histogram 来统计,那么不管图像的尺寸多大,最终的histogram还是长度为K。很显然,这不是我们希望看到的,这样必然会丢失很多信息。所以就有block representation.

    block representation, 简单来说,就是将图像进行分块, 将图像分成一块一块,每一块都可以用一个histogram 做统计,然后将每一块的histogram 连起来,形成一个长的的histogram。block representation 也是局部特征提取最常用到的一种方式。

    图像分块,也有两种方式,一种是overlap,一种是non-overlap,也就是说块与块之间有重叠,或者没有重叠。在计算HoG的时候,一般都会选择overlap 的分块方式。

    MATLAB 中已经集成了HoG 的函数,可以直接调用库函数计算HoG. 这个函数的调用形式如下:

    [f1, visualization]=extractHOGFeatures(I)

    其中 I 是输入的图像, f1 就是计算得到的HoG 特征,是一个高维的histogram, visualization 是将HoG 进行可视化的一个 object 变量。

    这个函数的输入变量有很多,除了输入图像I 之外,还有一些其它的变量, 一般都会采用默认的缺省值。
    下面逐一介绍这些缺省变量:
    cellsize: [8 ,8], 这是计算HoG的最小块了,每个 8×8 的 cell 都可以得到一个histogram。
    Blocksize: [2, 2], 这是说明一个block 含有多少个cell,[2 2] 意味着一个block 含有 2×2 个cell。
    BlockOverlap: 这是说明block 之间重叠部分的大小,以cell的个数来表示,默认值是一半的cell都有重叠。
    NumBins: 就是上面提到的K,默认值为9。
    UseSignedOrientation: 就是上面提到的角度的取值范围,默认为无符号的角度范围,即 0180

    所以说,采用默认值计算,虽然一个cell 的histogram的长度只有9,但是一个block 有4 个 cell,那么一个block 的histogram 的长度变成了36,对于一张尺寸为64×64 的图像来说,采用overlap 的分块方式,将有 49 个block,所以最终 HoG 的长度是 36×64=1764. 图像尺寸越大,HoG 的长度也会随之增长。不过总得来说,HoG 还算是一种简洁紧凑的特征。比起Gabor,LBP,SIFT 来说,算是比较经济实惠,性价比很高的了。

    最后给出一个例子:

    这里写图片描述

    这里写图片描述

    参考来源
    https://en.wikipedia.org/wiki/Histogram_of_oriented_gradients

    Dalal N, Triggs B. Histograms of oriented gradients for human detection[C]//Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on. IEEE, 2005, 1: 886-893.

  • 相关阅读:
    数据不是搜集起来的,是沉淀下来的,跟脚印一样,脚印不是修路的人搜集起来的,只要有了路就一定有脚印,不可能说修一条路不留下脚印,世界上没有这样的路
    VC6.0编译的DLL文件能否反编译知道里面的代码?
    Why does the PDB format change every release?
    mysql_query与 mysql_real_query区别
    如何把Backtrack 5安装到U盘/Backtrack 4安装方法
    FreeBSD:像Linux下一样使用vim
    栈的出栈序列个数
    npm outdated -g --depth=0
    npm Updating packages downloaded from the registry
    TypeScript安装
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412548.html
Copyright © 2011-2022 走看看