积分图(Integral Image)也称为求和图(Summed Area Table),是一种用于快速计算图像中任意矩形区域像素值总和的技术。
基本概念
积分图的每个位置(i, j)存储的是从图像左上角(1, 1)到当前位置(i, j)所有像素值的累积和。通过这种方式,可以非常快速地计算出任意矩形区域内的像素总和,而不需要对这个区域内的每一个像素点进行逐一累加。
计算方法
假设原始图像的像素值为 I ( x , y ) I(x, y) I(x,y),其对应的积分图值为 S ( x , y ) S(x, y) S(x,y),则有:
S ( x , y ) = ∑ x ′ ≤ x , y ′ ≤ y I ( x ′ , y ′ ) S(x, y) = \sum_{x' \leq x, y' \leq y} I(x', y') S(x,y)=x′≤x,y′≤y∑I(x′,y′)
这个公式可以通过动态规划的方式高效地计算出来。具体来说,对于积分图中的每一个位置,其值等于当前位置像素值加上左边、上边以及左上角三个位置的积分图值之和减去左上角对角线位置的积分图值(因为这部分被重复计算了一次):
S ( x , y ) = I ( x , y ) + S ( x − 1 , y ) + S ( x , y − 1 ) − S ( x − 1 , y − 1 ) S(x, y) = I(x, y) + S(x-1, y) + S(x, y-1) - S(x-1, y-1) S(x,y)=I(x,y)+S(x−1,y)+S(x,y−1)−S(x−1,y−1)
这在需要频繁计算不同区域像素和的情况非常有用下,比如实现均值滤波、Adaboost或Haar特征检测等算法。
Integral image is a useful image representation from which local image sums can be computed rapidly. A box filter can be thought of as a local weighted sum at each pixel.
imboxfilt performs filtering using either convolution-based filtering or integral image filtering, using an internal heuristic to determine which filtering approach to use.