主要内容

integralImage

计算二维积分图像

描述

在一个积分图像,每个像素表示对应的输入像素与输入像素上方和左侧的所有像素的累加和。

积分图像使您能够快速计算图像子区域的总和。无论子区域的大小如何,子区域的总和可以在常数时间内计算为积分图像中只有4个像素的线性组合。维奥拉-琼斯算法普及了积分图像的使用[1]

例子

J= integralImage (从图像中计算积分图像.函数在输出的积分图像的顶部和左侧补零,J

例子

J= integralImage (取向计算指定方向的积分图像取向

例子

全部折叠

创建一个简单的样本矩阵。

I =魔法(5)
我=5×517 24 18 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

计算样本矩阵的积分像。这些步骤展示了原始矩阵中的前几个值如何映射到积分图像中的值。注意,(行,列)坐标为(rc)对应的像素坐标为(r+ 1,c+1)在积分图像中。

  • 积分像的第一行和第一列都是0年代。

  • 坐标(1,1)处值为17的原始矩阵中的像素在积分图像中是不变的,因为在求和中没有其他像素。因此,坐标(2,2)处的积分图像中的像素值为17。

  • 坐标(1,2)处原始矩阵中的像素映射到积分像中的像素(2,3)。该值是原始像素值(24)、它上面的像素值(0)和它左边的像素值(17)的总和:24 + 17 + 0 = 41。

  • 坐标(1,3)处原始矩阵中的像素映射到积分像中的像素(2,4)。该值是原始像素值(1)、它上面的像素值(0)和它左边的像素值(已经被求和为41)的总和。因此,积分图像中(2,4)像素处的值为1 + 41 + 0 = 42。

J = integralImage(I)
J =6×600 00 00 17 41 42 50 65 0 40 69 77 99 130 0 44 79 100 142 195 0 54 101 141 204 260 0 65 130 195 260 325

将灰度图像读入工作空间。显示图像。

I = imread(“pout.tif”);imshow(我)

计算积分像。

J = integralImage(I);

使用drawrectangle工具选择矩形子区域。该工具返回一个矩形对象。

D = drawrectangle;

顶点的属性矩形对象将顶点坐标存储为4 × 2矩阵。顶点的顺序从左上角开始,以顺时针方向继续。将矩阵拆分为包含行坐标和列坐标的两个向量。因为积分图像在顶部和左侧加了零,所以将行坐标和列坐标加1以检索积分数组的相应元素。

r = floor(d.v tices(:,2)) + 1;c = floor(d.v tices(:,1)) + 1;

将积分图像的4个像素合并,计算矩形子区域内所有像素的和。

regionSum = J (r (1), c (1)) - J (r (2), c (2)) + J (r (3), c (3)) - J (r (4), c (4))
regionSum = 613092

创建一个简单的样本矩阵。

I =魔法(5)
我=5×517 24 18 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9

创建一个旋转方向的整体图像。

J = integralImage(I,“旋转”
J =6×70 0 0 0 0 0 0 17 24 18 15 0 17 64 47 40 38 39 15 64 74 91 104 105 76 39 74 105 149 188 183 130 76 105 170 232 272 236 195 130

定义一个旋转的矩形子区域。这个例子指定了原始图像中顶点位于坐标(1,3)的子区域。该子区域的旋转高度为1,宽度为2。

R = 1;C = 3;H = 1;W = 2;

求出积分图像中子区域的四个角像素值。

regionBottom = J(r+w+h,c-h+w+1);regionTop = J(r,c+1);regionLeft = J(r+h,c-h+1);regionRight = J(r+w,c+w+1);regionCorners = [regionBottom regionTop regionLeft regionRight]
regionCorners =1×4105 0 24 39

通过对四个角的像素值求和来计算子区域的像素总和。

regionSum = regionBottom + regionTop - regionLeft - regionRight
regionSum = 42

输入参数

全部折叠

图像,指定为任意维度的数值数组。如果输入图像有超过两个维度(ndims (I) > 2),例如对于RGB图像,然后integralImage计算所有二维平面沿高维的积分图像。

数据类型:||int8|int16|int32|uint8|uint16|uint32

图像方向,指定为“正直”“旋转”.如果你设置方向为“旋转”,然后integralImage返回用于计算旋转45度矩形的和的积分图像。

数据类型:字符|字符串

输出参数

全部折叠

积分图像,作为数值矩阵返回。函数对积分像进行零点补零取向图像的。这种尺寸便于沿图像边界计算像素和。积分像,J,本质上是值的填充版本cumsum2) (cumsum(我)

形象定位 积分图像尺寸
竖直积分像 零填充在上面,然后向左。size(J) = size(I)+1
旋转积分像 在顶部,左边和右边加0。size(J) = size(I)+[1 2]

数据类型:

算法

全部折叠

积分图像求和

积分图像中的每一个像素都表示对应的输入像素值与输入像素的上方和左侧的所有输入像素的总和。因为integralImage对结果的积分图像进行零填充,该像素的(行,列)坐标为(n)映射到像素,坐标为(+ 1,n+1)在积分图像中。

在图中,输入图像中的当前像素为坐标(4,5)处的深绿色像素,上面和输入像素左侧的所有输入图像中的像素都用浅绿色着色。绿色像素值的总和返回到坐标为(5,6)的以灰色表示的积分图像像素中。

integralImage通过将输入图像和积分图像中的像素值相加,可以更快地计算积分图像。像素(n)在积分图像中J是四个像素的线性组合:一个来自输入图像,三个来自积分图像的先前计算的像素。

J (m, n) = (m, n - 1) + J (m - 1, n) + I (m - 1, n - 1) - J (m - 1, n - 1)

该图显示了在计算灰度像素处的积分图像时,哪些像素被包含在和中。绿色像素加和,红色像素减和。

旋转积分图像求和

如果指定图像取向作为“旋转”,则积分图像中的像素表示对应的输入像素值与所有在输入像素对角上方的输入像素的和。integralImage沿对角线执行求和。这种方法比旋转图像和在直线方向上计算积分图像的计算量少。

在图中,输入图像中的当前像素为坐标(4,5)处的深绿色像素。输入图像中所有在输入像素对角线上方的像素都用浅绿色着色。绿色像素值的总和返回到坐标为(5,6)的以灰色表示的积分图像像素中。

integralImage通过将输入图像和积分图像中的像素值相加,可以更快地计算旋转的积分图像。像素(n)在积分图像中J是五个像素的线性组合:两个来自输入图像,三个来自积分图像的先前计算像素:

J (m, n) = (m - 1, n - 1) + J (m - 1, n + 1) - J (m - 2 n) +我(m - 1, n - 1) + (m - 2 n - 1)

该图显示了在计算灰度像素处的积分图像时,哪些像素被包含在和中。绿色像素加和,红色像素减和。

图像子区域求和

以左上角为坐标的垂直方向的子区域(n),高度h,和宽度w在原图中有求和:

regionSum = J (m - 1, n - 1) + (h - m + n + w1) - J (h - m + n - 1) - (m - 1, n + w1)

例如,在下面的输入图像中,蓝色阴影区域的总和为:46 - 22 - 20 + 10 = 14。计算减去上面和阴影区域左边的区域。重叠的区域被加回来以补偿双重减法。

旋转方向的子区域使用不同的高度和宽度定义[2].区域的和为:

regionSum = J (m + h + w - h + w + 1) + J (m, n + 1) (m + h, h + 1) - J (m + w, n + w + 1)

参考文献

[1]维奥拉,P.和M. J.琼斯。“使用增强的简单特征级联快速目标检测”。2001年IEEE计算机学会计算机视觉与模式识别会议论文集.2001.第1卷,511-518页。

[2] R.连哈特和J.梅尔特。快速目标检测的haar类特征扩展集。2002年IEEE图像处理国际会议论文集.2002年9月。第一卷,第900-903页。

扩展功能

版本历史

在R2015b中引入