積分圖及其應用

  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就完事了。深深感嘆算法的博大精深!

以上。

相關文章
相關標籤/搜索