積分画像とは?計算方法と高速化の仕組みについてまとめました。
積分画像とは
積分画像(Integral Image)は、注目画素とその左と上にある全ての画素値の和を求めた物です。

例えば、入力画像Iが与えられた場合
I=⎣⎡I(0,0)I(0,1)I(0,2)I(1,0)I(1,1)I(1,2)I(2,0)I(2,1)I(2,2)⎦⎤
積分画像I’の画素値は次のように計算します。
I’=⎣⎡I′(0,0)I′(0,1)I′(0,2)I′(1,0)I′(1,1)I′(1,2)I′(2,0)I′(2,1)I′(2,2)⎦⎤
I′(0,0)I′(1,0)I′(2,0)I′(0,1)I′(1,1)I′(2,1)I′(0,2)I′(1,2)I′(2,2)=I(0,0)=I(0,0)+I(1,0)=I(0,0)+I(1,0)+I(2,0)=I(0,0)+I(1,0)=I(0,0)+I(1,0)+I(0,1)+I(1,1)=I(0,0)+I(1,0)+I(0,1)+I(1,1)+I(2,0)+I(2,1)=I(0,0)+I(0,1)+I(0,2)=I(0,0)+I(0,1)+I(0,1)+I(1,0)+I(1,1)+I(1,2)=I(0,0)+I(0,1)+I(0,1)+I(1,0)+I(1,1)+I(1,2)+I(2,0)+I(2,1)+I(2,2)
積分画像による高速化の仕組み
積分画像は近傍画素の処理の高速化によく使われます。
例えば、注目画素と8近傍の計9画素の画素値の総和を求めたいとします。
普通に計算すると、「画素値の取り出し9回」と「加算8回」を行う必要があります。
ところが、あらかじめ積分画像を作っておけば、「画素値の取り出し4回」と「加算1回+減算2回」で済ませることができます。
例として、赤色領域(注目画素+8近傍の画素)にある画素値の総和Sを求めることを考えてみましょう。

Sは以下の式で計算できます。
S=S1−S2−S3+S4
S1からS2とS3を引き、引きすぎた分S4を加算しています。
ここで、S1,S2,S3,S4は積分画像の画素値に等しくなります。
■積分画像I’

S1=I′(3,3)S2=I′(0,3)S3=I′(3,0)S4=I′(0,0)
よって、積分画像を先に作成しておけば、少ない計算回数(加算1回+減算2回)と画素へのアクセス回数(4回)で画素値の総和を計算できます。
それにより計算時間を大幅に抑えることができます。
近傍画素の個数が多くなったり、繰り返し回数が増えるほど、高速化の効果も大きくなります。
積分画像を使った高速化は、畳み込み演算や特徴量の計算などでよく利用されている重要なアルゴリズムです。
積分画像の計算式
入力画像Iとその積分画像I’があるとします。
このとき、左上座標(x,y)、幅w, 高さhの矩形領域内にある画素値の総和Sは次式で計算できます。
S=I′(x+w,y+h)−I′(x,y+h)−I′(x+w,y)+I′(x,y)
関連ページ

【Python/OpenCV】積分画像を用いた処理の高速化
Python版OpenCVで積分画像を作成する方法をソースコード付きで解説します。

【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。
コメント