从这章开始,我们将从最基础的图像处理讲起,并且探索其中的一些算法在FPGA上的实现。第一章讲一个最基本的概念:直方图。直方图在图像灰度增强中是一个很重要的量,它反映了灰度的分布。除了灰度直方图,还有梯度直方图,光流直方图。现在一一介绍。
对于一幅灰度图像,可以表示为I(x,y)。I是图像的强度大小。灰度直方图就是统计不同灰度的分布概率。比如对于一个像素bit位为8的图像,那么其灰度范围就是从0~255.灰度直方图就是统计每个灰度级拥有的像素比例。通过直方图可以直观的反映出图像的明暗程度,比如0如果概率大,就说明图像偏暗,255概率大,就说明图像偏亮。用数学公式来表达就是:
HOG(histogram of oriented gradient)是在2005年CVPR会议上,由Dalal等人提出的解决人体目标检测的描述子。该方法使用梯度直方图来表达人体,提取人体的外形和运动信息,形成非常丰富的特征集。生成的过程如下:
1) 图像预处理。
图像预处理主要是为了消除一些光照或者噪声的影响,提高HOG描述子的鲁棒性。预处理方法有图像归一化,伽马矫正,图像平滑滤波等。
2) 计算图像梯度
图像的梯度可以表示为:
由于图像是离散的数据,将上式用离散微分表示:
选择以上微分方式,是因为从实验结果来看效果较好。上述式子相当于用模板:
对图像进行卷积,生成x和y方向的梯度值。梯度是一个矢量,有大小和方向,这两个量正是要用于进行HOG表示的。
方向的范围是-pi~pi,对于小于0的范围,通过+pi调整到正数范围。这样梯度角度范围就在0~pi之间。为什么忽略负数表示呢?这主要是来自于实验,实验表明采用0~pi的角度表现效果更好。
1) 分块统计
给定一幅图像,对图像进行分块(block)。每块有若干个cell,每个cell里边包含了若干像素,分别统计每个cell的HOG。统计HOG的时候,按照梯度方向平均分成几个范围(bin),比如分成9个bin,每个bin的范围就是20°。单独计算每个cell中不同角度的梯度幅度,将落在同一个bin的梯度幅度值累加,就得到了一个直方图。假设一幅240x240大小图像,分割成5x5的block,每个block有3x3个cell,每个cell大小为16x16,直方图bin有9个。那么这幅图像最终的向量长度是5x3x9=135。
光流是空间运动物体在观察成像平面上像素的运动的瞬时速度。光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。
光流场是一个二维矢量场,它反映了图像上每一点灰度的变化趋势,可看成是带有灰度的像素点在图像平面上运动而产生的瞬时速度场。它包含的信息即是各像点的瞬时运动速度矢量信息。研究光流场的目的就是为了从序列图像中近似计算不能直接得到的运动场。光流场在理想情况下,光流场对应于运动场。
光流场的计算是通过两帧图像之间灰度变化,以及光流场平滑的假设。即以下变分问题:
其中,u和v是x和y方向的光流值,ux是x方向微分。通过最小化以上变分问题,就可以得到光流场(u,v)。
统计光流直方图的方法和梯度直方图类似,因为光流场也和梯度一样是一个二维矢量。
一幅图像包含了大量的空间信息,通过直方图可以提取出希望得到的图像特征。灰度直方图提取了图像明暗程度的特征,梯度直方图可以反映目标的独特特质,用于目标检测和分类。而光流直方图可以用于行为识别。这几种直方图都将图像数据进行了压缩和提取,有助于之后的分类计算,减小了计算量。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。