積分圖及其應用


  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)和有限次簡單運算得到,大大減少了運算次數。所以但凡需要重復計算目標區域內像素值和的場合,積分圖都能派上用場。下面開始介紹積分圖原理,並給出其的幾個應用。

1、積分圖原理

  將矩形表示為:

  其中,x,y表示坐標,w,h表示寬、高,a表示角度。

  積分圖像中,每個點存儲的是其左上方所有像素之和:

           

 

其中I(x,y)表示圖像(x,y)位置的像素值。積分圖像可以采用增量的方式計算:

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

為了更好地說明這個等式的緣由,下面我用幾幅圖來說明:

     

          圖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次就可以求得任意矩形內像素值的和。

 

2、積分圖應用

(1)Haar-like特征值計算

  以如下一種Haar-like邊緣特征為例

                       

  假設需要計算的這種Haar-like特征在圖中的位置如下所示:

       

  那么,A,B區域所構成的Haar-like邊緣特征是:

  顯然,對一個灰度圖而言,事先將其積分圖構建好,當需要計算灰度圖某個區域內所有像素點的像素值之和的時候,利用積分圖,通過查表運算,可以迅速得到結果。

 

(2)使用積分圖像實現自適應閾值化

自適應閾值是一種局部方法。它的原理是根據每個像素的鄰域(如5x5)計算閾值,如將每個像素的值與指定的鄰域的平均值進行比較,如果某像素的值與它的局部平均值差別很大,就會被當作異常值在閾值化過程中被分離。

如若不采用積分圖像,則每個像素比較時,都需要進行5x5次加法運算;而采用積分圖像,運算復雜度不隨鄰域大小而改變,每次只需計算2次加法和2次減法。

(3)

我本人在做車牌字符分割時,設計了一個動態模板在車牌圖像上滑動,並且每次滑動都計算一次模板內包含的非零像素點個數,沒用積分圖的時候,每次計算都要遍歷,效率真的太低,滑動1000多次,計算耗時竟達到了幾百ms,這在實時處理中是不能容忍的。而后去補了積分圖的知識,使用積分圖來計算每次滑動后區域內的非零像素點個數,效率不要太高,只耗費了幾ms就完事了。深深感嘆算法的博大精深!

以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM