积分图及其应用

  Paul Viola提出一种利用积分图快速计算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。Haar特征是什么就很少作介绍,总之Haar特征的计算须要重复计算目标区域的像素值,使用积分图能大大减小计算量,达到实时计算Haar特征的目的。简单来讲,就是先构造一张“积分图”(integral image),也叫Summed Area Table,以后任何一个Haar矩形特征均可以经过查表的方法(Look Up Table)和有限次简单运算获得,大大减小了运算次数。因此但凡须要重复计算目标区域内像素值和的场合,积分图都能派上用场。下面开始介绍积分图原理,并给出其的几个应用。算法

一、积分图原理api

  将矩形表示为:spa

  其中,x,y表示坐标,w,h表示宽、高,a表示角度。设计

  积分图像中,每一个点存储的是其左上方全部像素之和:3d

           

 

其中I(x,y)表示图像(x,y)位置的像素值。积分图像能够采用增量的方式计算:blog

初始边界:SAT(-1,y)=SAT(x,-1)=SAT(-1,-1)=0io

为了更好地说明这个等式的原因,下面我用几幅图来讲明:模板

     

          图1.坐标(x,y)处在原图像中示例                 图2.坐标(x,y-1)处的积分图像SAT(x,y-1)示例效率

   

 图3.坐标(x-1,y)处的积分图像SAT(x,y-1)示例     图4.坐标(x-1,y-1)处的积分图像SAT(x-1,y-1)示例  原理

 

 能够看到,SAT(x,y-1)+SAT(x,y-1)后,有一部分重合的区域,即SAT(x-1,y-1),因此需减掉,最后还须要将当前坐标(x,y)的像素值I(x,y)包含进来。

定义了积分图的概念,就能够很方便的计算任意区域内的像素和,以下图所示:

因此,

点1的积分SAT1=Sum(Ra),

点2的积分SAT2=Sum(Ra)+Sum(Rb),

点3的积分SAT3=Sum(Ra)+Sum(Rc),

点4的积分SAT4=Sum(Ra)+Sum(Rb)+Sum(Rc)+Sum(Rd)

那么,区域Rd内全部点的像素值之和(积分)能够表示为:

Sum(Rd)=SAT1+SAT4-SAT2-SAT3

因此不管矩形的尺寸大小,只需查找积分图像4次就能够求得任意矩形内像素值的和。

 

二、积分图应用

(1)Haar-like特征值计算

  以以下一种Haar-like边缘特征为例

                       

  假设须要计算的这种Haar-like特征在图中的位置以下所示:

       

  那么,A,B区域所构成的Haar-like边缘特征是:

  显然,对一个灰度图而言,事先将其积分图构建好,当须要计算灰度图某个区域内全部像素点的像素值之和的时候,利用积分图,经过查表运算,能够迅速获得结果。

 

(2)使用积分图像实现自适应阈值化

自适应阈值是一种局部方法。它的原理是根据每一个像素的邻域(如5x5)计算阈值,如将每一个像素的值与指定的邻域的平均值进行比较,若是某像素的值与它的局部平均值差异很大,就会被看成异常值在阈值化过程当中被分离。

如若不采用积分图像,则每一个像素比较时,都须要进行5x5次加法运算;而采用积分图像,运算复杂度不随邻域大小而改变,每次只需计算2次加法和2次减法。

(3)

我本人在作车牌字符分割时,设计了一个动态模板在车牌图像上滑动,而且每次滑动都计算一次模板内包含的非零像素点个数,没用积分图的时候,每次计算都要遍历,效率真的过低,滑动1000屡次,计算耗时竟达到了几百ms,这在实时处理中是不能容忍的。然后去补了积分图的知识,使用积分图来计算每次滑动后区域内的非零像素点个数,效率不要过高,只耗费了几ms就完事了。深深感叹算法的博大精深!

以上。

相关文章
相关标签/搜索