第七章:Histograms and Matching 直方图与匹配
在分析图像、物体和视频信息的过程中,我们常常想表示称之“直方图”的东西。直方图可以用来描述各种不同的事情,如物体的色彩分布、物体边缘梯度模板[Freeman95],以及表示目标位置的当前假设的概率分布。图7-1显示如果利用直方图进行快速姿态识别。边缘梯度从“上”,“右”,“左”,“停”和“正常”等手性姿态中得到。然后设置一个网络摄像头来观察人的各种姿态以控制网络视频。在每帧中,从输入的视频中检测感兴趣的色彩区域,然后计算这些感兴趣区域周围的边缘梯度方向,将得到的边缘梯度方向放到一个方向直方图相应的bin中,然后将该直方图与姿势模板进行匹配,从而识别出各种姿势。图7-1的垂直条显示不同姿态的匹配程度。灰色的水平线为可接受阈值,表示胜出的对应姿态模型的垂直条。
很多计算机视觉领域都能找到直方图的应用。当视频中的场景帧与帧之间的边缘和颜色统计有明显的变化时,直方图被用来检测这种视频中场景的变化。通过为每个感兴趣点设置一个有相近特征的直方图所构成的”标签”,用以确定图像中感兴趣的点。边缘、色彩、角点等直方图构成了可以被传递给目标识别分类器的一个通用特征类型。色彩和边缘的直方图序列还可以被用来识别网络视频是否被复制等等。直方图是计算机视觉中最经典的工具之一。
简单地说,直方图就是对基本的数据进行某种计数,然后将其组织到一系列事先定义好的bins中。它们是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩、或任何其它特征。无论如何,直方图获得的是数据分布的统计图。通常直方图的维数要低于原始数据。图7-2刻画了一个典型情况。图中我们显示一个二维分布的点集(左上),施加一个网格(右上)并且统计每一个网格单元的数据点,然后产生一个一维直方图(右下)。由于原始数据点可以表征任何事情,直方图实际上是一个方便表示图像特征的手段。
图7-1. 方向梯度的局部直方图,用以寻找手及其特征(姿态)。这里“胜出”的姿态(最长的垂直条)就是正确识别的“L”(向左移动)
表示连续分布的直方图通过隐形地计算每个网格单元中点的均值来实现上面的功能[90]。那么会产生一个问题,如图7-3所显示的。如果网格太宽(左上),则平均得太多,结构分布就会丧失。如果网格太窄(右上),不能有足够的平均来准确表示分布而且我们会得到小尖锐的单元。
[90]当直方图利用的是比原始的描述更少的bins时,其表示的图像信息很自然的落到离散的bins里。举例来说,一个10个bin的直方图可以表示8位亮度值的图像:大约每25个灰度级将组合到一个bin中,(错误地)将这些不同灰度级同等对待。
OpenCV有表征直方图的数据类型。该直方图数据结构能够以一维或者多维的方式表示直方图,并且包含所有可能跟踪的的bin中的数据。如我们所设想,它可以配属各种有用的函数,使得我们能够在直方图上容易地进行各种普通的操作。
图7-2. 典型的直方图例子:从一个点集开始(左上),施加计算网格(右上),产生点集的一维直方图(右下)