integralImage
计算二维积分图像
描述
在一个积分图像,每个像素表示对应的输入像素与输入像素上方和左侧的所有像素的累积和。
积分图像使您能够快速计算图像子区域的总和。子区域的总和可以在常数时间内计算为积分图像中仅四个像素的线性组合,而不考虑子区域的大小。维奥拉-琼斯算法普及了积分图像的使用[1].
例子
创建整体形象
创建一个简单的样本矩阵。
我=魔法(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
计算样本矩阵的积分像。这些步骤展示了原始矩阵中的前几个值如何映射到积分像中的值。请注意,像素与(行,列)坐标(r,c)对应坐标为(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.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(I,“旋转”)
J =6×70 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度的矩形的和的积分图像。
数据类型:字符
|字符串
输出参数
算法
积分图像求和
积分图像中的每个像素表示对应的输入像素值与输入像素上方和左侧的所有输入像素的总和。因为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
是一个只有5个像素的线性组合:2个来自输入图像,3个来自积分图像的先前计算像素:
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月。卷1,页900-903。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
integralImage
金宝app支持生成C代码(需要MATLAB®编码器™).有关更多信息,请参见图像处理的代码生成.
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
版本历史
在R2015b中引入R2022b:金宝app支持基于线程的环境
integralImage
现在支持金宝app基于线程的环境。
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。