主要内容

integralImage

计算二维积分图像

描述

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

积分图像使您能够快速计算图像子区域的总和。无论子区域的大小,子区域和可以在常数时间内作为积分图像中仅4个像素的线性组合计算。积分图像的使用是由Viola-Jones算法推广开来的[1]

例子

J= integralImage (从图像中计算积分图像.函数zero填充了输出积分图像的顶部和左侧,J

例子

J= integralImage (方向计算具有指定方向的整体图像方向

例子

全部折叠

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

我=魔法(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 0 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

将灰度图像读取到工作区中。显示图像。

我= imread ('pout.tif');imshow(我)

计算积分图像。

J = integralImage(我);

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

d = drawrectangle;

顶点财产的财产矩形对象以4 × 2矩阵的形式存储顶点的坐标。顶点从左上角开始按顺时针方向排列。将矩阵分解为包含行坐标和列坐标的两个向量。因为整型图像在顶部和左侧填充了零,所以将行坐标和列坐标加1以检索整型数组的相应元素。

r = floor(d.Vertices(:,2)) + 1;c = floor(d.Vertices(:,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

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

我=魔法(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(我,“旋转”
j =6×70 0 0 0 0 0 0 0 0 17 24 11 8 15 0 17 64 47 40 38 39 15 64 74 91 104 105 76 39 74 105 149 188 183 130 76 105 130 230 232 232 232 232 236 195 130 236 195 130

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

r = 1;c = 3;h = 1;w = 2;

得到积分图像中该子区域的四个角像素的值。

regionBottom = J (r + w + h,碳氢键+ w + 1);regionTop = J (r、c + 1);regionLeft = J (r + 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,基本上是值的填充版本浓汤2) (cumsum(我)

形象定位 积分图像大小
正直的整体形象 顶部和左侧填零。尺寸(J) = (1) + 1
积分图像旋转 零填充在顶部,左侧和右侧。size(J) = size(I)+[1 2]

数据类型:

算法

全部折叠

积分图像的总和

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

在该图中,输入图像中的电流像素是坐标(4,5)处的暗绿色像素。输入像素上方和左侧的输入图像中的所有像素都是浅绿色的。绿色像素值的总和返回到坐标为(5,6)的积分图像像素中,以灰色表示。

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

j(m,n)= j(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)= j(m-1,n-1)+ j(m-1,n + 1) - j(m-2,n)+ i(m-1,n-1)+ i(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,pp。511-518。

R. Lienhart和J. Maydt。“用于快速目标检测的哈尔类特征扩展集”。2002年IEEE图像处理国际会议论文集.2002年9月。卷。1,pp。900-903。

扩展功能

在R2015B中介绍