图5-3 “积分图”与积分的类比
只需要对每个像素进行少量的计算工作,就能得到一幅图像的“积分图”。“积分图”能够在多种尺度下,使用相同的时间来计算不同的特征,因此大大提高了检测速度。 5.3.2 使用积分图计算
由于训练样本通常有近万个,并且矩形特征的数量特别庞大,如果每次计算特征值都需要统计矩形内所有像素之和,将会大大降低训练和检测的速度。Paul Viola等引入了一种新的图像的表示方法一积分图像,利用它可以快速计算矩形特征。对于输入图像I,像素点(x,y)处的积分图ii(x,y)定义如下:
ii(x,y)???I(x,y)
x?xy?y????其中I(x,y)为图像在点(x,y)处的像素值,如图5-4积分图ii(x,y)的像素值等于图中灰色部分的所有像素值的和。 x-1 x
S(x,y)
y-1 y ii(x-1,y) ii(x,y) ????5-4积分图
为了得到输入图像I的积分图像,需要逐点扫描图像一次。设I(x,y)为输入图像各
25
点的像素灰度值,S(x,y)??I(x,y)为输入图像中像素点(x,y)所在列纵坐标不超过该
y?y??点的所有像素灰度值之和(图5-4中浅灰色区域),则图像I的积分图可按如下递推公式计算:
?S(x,y)?S(x,y?1)?i(x,y)ii(x,y)?ii(x?1,y)?S(x,y) (5.4)
其中x和y从0开始,定义s(x,?1)?0,ii(?1,y)?0。
在得到图像I的积分图像后,就可以方便快捷的计算图像I中任意矩形内所有像素灰度积分,如图5-4中,点1的积分图像ii1的值为:
ii1=区域A的像素值(5.5)
(x,y)
图5-5 点(x,y)处的积分图像值
下面是积分图矩阵的实现代码片断: for(int x=0;x double y_yuv =(double)((uchar*)(mar->data.ptr+mat->step*x))[y]; //如设该点亮度值为d,则该点左侧点的亮度和为c,该点上侧点的亮度和 为b,左上侧点的亮度和为a,则该点的亮度和为d+b+c-a if (x>0&&y>0) y_yuv = y_yuv - mymDoubleGet(smat,x-1,y-1); if(x>0) y_yuv = y_yuv + mymDoubleGet(smat,x-1,y); if(y>0) y_yuv = y_yuv + mymDoubleGet(smat,x,y-1); //设置该点的亮度和 mymDoubleGet(smat,x,y,y_yuv); 26 } for(int i=0;i int h=0; double feature= featureValue(&(Sclissifier->sc[i],smat); if(feature* Sclissifier->sc[i].p< Sclissifier->sc[i].p* Sclissifier->sc[i].h) h=1; double alpha=log10(1.0/ Sclissifier->bt[i]); sumLeft+=alpha*(double)h; sumRight+=alpha*thresh; } myReleaseMat(smat0; if(sumLeft>= sumRight) return 1; else return 0; 5.4 Haar特征值计算 Haar 型特征是Viola 等提出的一种简单矩形特征,因类似于Haar 小波而得名。如图 2 所示,Haar 型特征的定义是黑色矩形和白色矩形在图像子窗口中对应的区域的灰度级总和之差,可见,它反映了图像局部的灰度变化。Viola 等用到的Haar 型特征共有4 种(图5-7.a~d),我们又增加了8 种(图 2-7.e~l)。 图像子窗口 27 图5-7. Haar 特征。(a, b, g, h)两矩形特征;(c, f) 三矩形特征;(d)四矩形特征;(e)“回”字形特征;(i, j, k, l)“L”形特征。 Haar特征是用积分图像的特点来计算某一矩形区域内的特征值。如计算下图中D区域内的像素之和: 图5-8 应用积分图像计算区域像素值 假设已经求出某一图像的积分图像,根据积分图像的特点,可以迅速计算出原图像中D区域内的像素的和的值。 SD?f1?f4?f2?f3 其中SD是原图像中D区域内的像素的和的值,f1、f2、f3和f4分别是积分图像中点1和2、3和4的值。 从上式我们可以看出,利用积分图像来计算任意区域内的像素点的和的值的过程快速且计算时间固定。利用这一特点设计出的haar特征提取快速且机器计算时间固定。 28
相关推荐: