Camera和Image sensor技术基础笔记(9) -- 积分图像(Integral Image)的理解(非公式)

积分图像是什么

        积分图像是一种在图像中快速计算矩形区域和的方法,在1984年由Crow提出。一旦积分图像首先被计算出来,就可以在常量时间内计算图像中任意大小矩形区域的和。在图像模糊、边缘提取、对象检测的时候极大降低计算量、提高计算速度。

积分图像原理

        在一个积分图像中,一个像素的值是其左边和上边的像素的值的和,我们举个例子来说明。

        上图左边是原始的输入图像数据,右边是其对应的积分图像。可以看出积分图像的左边和顶部都扩展了一个像素单位,多出来的格子中填0,以便计算积分图像像素值。我们假设坐标(x,y)表示像素的行号和列号,下标从1开始,那么位于(2,1)的像素在积分图像中的位置会变成(3,2),同理,坐标(2,2)的像素在积分图像中位置变成(3,3)。

        下面描述用IntImage(x,y)表示积分图像中坐标为x,y的像素的值,用RawImage(x,y)表示原始图像中坐标为x,y的像素的值。

        我们从IntImage(2,2)开始看,这个点对应RawImage(1,1),左边和上边都没有像素,因此其值就是RawImage(1,1) = 1。

        对于IntImage(2,3),其对应RawImage(1,2),左边有像素,上边没有,其值是左边的RawImage(1,1) + RawImage(1,2) = 1 + 5 = 6。

        对于IntImage(3,2),对应RawImage(2,1),左边没有像素,上边有RawImage(1,1),因此其值就是RawImage(1,1) + RawImage(2,1) = 1 + 2 = 3。

        对于IntImage(3,3),对应RawImage(2,2),左边有RawImage(2,1),上边有RawImage(1,2),加上左上角的RawImage(1,1),因此其值是RawImage(1,1) + RawImage(1,2) + RawImage(2,1)  +RawImage(2,2)= 1 + 5 + 2 + 4 = 12。

        上面这种方式说明的是积分图像像素的值和原始图像值的对应关系。

        实际在使用积分图像时,如果我们想要计算某块区域的像素值的和,如下图浅蓝色区域:

        

        我们以几何的方式来理解积分图像某个点的值的意义:

坐标 - 值值的几何意义
(3,5)- 22

以点为矩形右下点,向左和向上走所围出的矩形的像素值的和,即

左上:(1,1),   左下(3,1)

右上:(1,5),   右下(3,5)

这四个点围出的矩形中所有像素的值的和,我们可以将这个和类比为矩形面积(不是用长*宽,而是像素值求和代表面积值)

  (3,3)   - 10

以点为矩形右下点,向左和向上走所围出的矩形的像素值的和,即

左上:(1,1),   左下(3,1)

右上:(1,3),   右下(3,3)

这四个点围出的矩形中所有像素的值的和,我们可以将这个和类比为矩形面积(不是用长*宽,而是像素值求和代表面积值)

(5,3)- 20

以点为矩形右下点,向左和向上走所围出的矩形的像素值的和,即

左上:(1,1),   左下(5,1)

右上:(1,3),   右下(5,3)

这四个点围出的矩形中所有像素的值的和,我们可以将这个和类比为矩形面积(不是用长*宽,而是像素值求和代表面积值)

(5,5)- 46

以点为矩形右下点,向左和向上走所围出的矩形的像素值的和,即

左上:(1,1),   左下(5,1)

右上:(1,5),   右下(5,5)

这四个点围出的矩形中所有像素的值的和,我们可以将这个和类比为矩形面积(不是用长*宽,而是像素值求和代表面积值)

        我们以类比于矩形面积的方式来看,记点(x,y)的面积为S(x,y),现在要求蓝色区域的面积S,从图形上可以看出: S = S(5,5) - S(3,5) - S(5,3) + S(3,3) = 14(其中S(3,3)因为减了两次,所以加回来一次)。

        对于(5,5)这个点,想要得到单个点的值P,同样可以按照面积的理解方式来计算:

        P = S(5,5) - S(4,5) - S(5,4) + S(4,4) = 4

参考

Integral Image- MATLAB & Simulink

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
牛顿-科斯特公式和龙贝格算法是数值积分的经典算法。在 MATLAB 中,可以使用`integral`函数进行数值积分计算,该函数支持多种数值积分算法,包括牛顿-科斯特公式和龙贝格算法。 下面分别介绍使用`integral`函数实现牛顿-科斯特公式和龙贝格算法计算定积分的方法。 1. 牛顿-科斯特公式 牛顿-科斯特公式是用多项式插值的方法进行数值积分的一种算法。在 MATLAB 中,可以使用`integral`函数的`'Newton-Cotes'`选项来实现牛顿-科斯特公式计算定积分。 例如,计算$f(x)=x^2$在区间$[0,1]$上的定积分,可以使用如下代码: ```matlab f = @(x) x.^2; a = 0; b = 1; I = integral(f,a,b,'Method','Newton-Cotes'); ``` 其中,`f`是被积函数,`a`和`b`是积分区间的上下限,`'Method'`选项设置为`'Newton-Cotes'`表示使用牛顿-科斯特公式计算积分。计算结果保存在变量`I`中。 2. 龙贝格算法 龙贝格算法是递归地使用梯形公式和辛普森公式进行数值积分的一种算法。在 MATLAB 中,可以使用`integral`函数的`'Romberg'`选项来实现龙贝格算法计算定积分。 例如,计算$f(x)=x^2$在区间$[0,1]$上的定积分,可以使用如下代码: ```matlab f = @(x) x.^2; a = 0; b = 1; I = integral(f,a,b,'Method','Romberg'); ``` 其中,`f`是被积函数,`a`和`b`是积分区间的上下限,`'Method'`选项设置为`'Romberg'`表示使用龙贝格算法计算积分。计算结果保存在变量`I`中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值