2017-06-28 - 2019-01-05 (update) |
|
|
*積分画像 (integral image) とは
画像の画素値を積分した画像です.画像の画素値の和を高速に計算するための準備データとして作成します.図1は,入力画像と積分画像の例を示します.
[img:3pr1]
{{small:図1 入力画像と積分画像}}
積分画像の画素値は,入力画像の原点から注目する座標までの和を表します(図2).
{$$ S(u, v) = \sum_{i = 0}^{i \leq u}\sum_{j = 0}^{j \leq v}I(i, j) $$}
[img:ryxc]
{{small:図2 入力画像と積分画像の画素値の関係}}
後で説明しますが,積分画像を作成すると画像上の任意の矩形領域の和を高速に計算できるようになります.例えば,[1]の文献では,その特性を生かして,画像から高速に特徴を検出する方法が紹介されています.
{{small:[1]H.Bay, A.Ess, T.Tuytelaars, L.V.Gool, "SURF: Speeded Up Robust Features", European Conference on Computer Vision (ECCV), 2006}}
{{small:[link:http://www.vision.ee.ethz.ch/~surf/eccv06.pdf] }}
*サンプルコード (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/sp/imgproc
Lennaの画像に対して,積分画像を利用したBox Filterを適応します.
*画素値の和
入力画像上の任意の矩形領域の画素値の和を計算したいとします.積分画像は原点から注目する座標までの和を表しますが,積分画像の4か所の画素値を足し引きすると,任意の矩形領域の和を計算できるようになります.図3にその関係を示します.
[img:vfxp]
{{small:図3 矩形領域の画素値の和}}
{$ \sum = \sum_A - \sum_B - \sum_C + \sum_D $}
右辺の各項は,積分画像の4か所の画素値が表す数値です.この式から,積分画像のたった4か所の数値を足し引きするだけで,任意の矩形領域の画素値の和を計算できることが分かります.また,矩形領域のサイズで割ることで平均値の計算も可能です.
*画素値の分散
入力画像上の任意の矩形領域の画素値の分散を計算したいとします.まず,平均値と分散の関係についておさらいします.
{$$ \mu = \frac{1}{N}\sum I(i, j) $$}
{$$ \sigma^2 = \frac{1}{N}\sum (I(i, j) - \mu)^2 $$}
ここで,{$\mu$}は画素値の平均値,{$\sigma^2$}は画素値の分散を表します.{$N$}は注目する矩形領域の要素数です.
{$\sigma^2$}については,展開すると次のように表現することも可能です.
{$$ \begin{align*}
\sigma^2 &= \frac{1}{N}\sum (I(i, j) - \mu)^2 \\
&= \frac{1}{N}\sum (I(i, j)^2 - 2 \mu I(i, j) + \mu^2) \\
&= \frac{1}{N}(\sum I(i, j)^2 - \sum 2 \mu I(i, j) + \sum \mu^2) \\
&= \frac{1}{N}\sum I(i, j)^2 - \mu^2
\end{align*} $$}
平均値{$\mu$}は,すでに説明したように入力画像{$I$}についての積分画像{$S$}を準備しておけば,すぐに求めることができます.次に,{$\sum I(i, j)^2$}の部分は,入力画像{$I$}の各画素値を2乗した画像{$I_2$}を考え,この積分画像{$S_{I^2}$}をさらに準備しておくことで,同じように4か所の画素値の参照によってすぐに求めることができます.
>> ご意見・ご質問など お気軽にご連絡ください.info