2006年5月,我写道
关于一种快速计算图像局部和的技术。今天,我想用图像处理工具箱中关于积分图像和积分框滤波功能的额外信息更新这篇文章。
首先,让我们回顾一下局部和的概念。
A =魔术(7)
30 39 48 1 10 19 28 38 47 7 9 18 27 29 46 6 8 17 26 35 37 5 14 16 25 34 36 45 13 15 24 33 42 44 4 21 23 32 41 43 3 12 22 31 40 49 2 11 20
的局部和
$3 \乘以3$
元素(2,3)的邻域
一个
可以这样计算:
Local_sum_2_3 = sum(submatrix,“所有”)
在图像处理应用中,我们通常对局部和除以邻域中元素的数量感兴趣,在本例中为9:
计算矩阵的所有局部和,除以邻域大小,与使用局部均值滤波器执行2-D滤波相同,如下所示:
B = imfilter(A,ones(3,3)/9);
这通常被称为
框过滤器
.计算一个
$N \乘以N$
盒子过滤器为整个
P乘以Q
图像似乎需要近似
美元PQN ^ 2美元
操作。换句话说,对于一个固定的图像大小,我们可以期望盒滤波器的计算时间按比例增加
N ^ 2美元
,在那里
N
本地和窗口大小。
让我们看看有多长时间
imfilter
对于变化的局部和邻域大小。
Imfilter_times = 0 (size(nn));
f = @() imfilter(I,ones(n,n)/n²);
Imfilter_times (k) = timeit(f);
这个函数
imfilter
执行效果比预期的好,执行时间仅随窗口大小线性增加。(这是因为
imfilter
利用了过滤器的可分离性,
我之前写过的
.)
但是我们可以更快地计算局部和,通过使用an
积分图像
,又称a
总计部分表
.让我们回到魔方的例子,使用这个函数
integralImage
.
Ai = integralImage(A)
00 00 00 30 69 117 118 128 147 175 0 68 154 209 219 247 293 350 0 114 206 269 296 350 431 525 0 119 225 304 356 444 561 700 0 132 253 356 441 571 732 875 0 153 297 432 558 731 895 1050 0 175 350 525 700 875 1050 1225
的每个元素
人工智能
是A中所有在上面和左边的元素的累积和。
人工智能(4,3)
,也就是206,是所有元素的和
(1:2, 1:3)
.
用一般公式表示,积分像为
ai (m, n) =美元\ sum_ {p = 1} ^ {m - 1} \ sum_ {q = 1} ^ {n} (p, q)美元
.
关于积分像,真正有趣的是,
人工智能
它能让你计算的和
任何
的矩形子矩阵
一个
通过四个数字的加减法。具体来说,是所有元素的和
(m1, m2, n1: n2)
是
人工智能(m2 + 1, n2 + 1) - Ai (m1, n2 + 1) Ai (m2 + 1, n1) +人工智能(m1, n1)
.考虑计算所有元素的和
(3:5, 2:6)
.
(m1, m2, n1: n2)
6 8 17 26 35 14 16 25 34 36 15 24 33 42 44
人工智能(m2 + 1, n2 + 1) - Ai (m1, n2 + 1) Ai (m2 + 1, n1) +人工智能(m1, n1)
如果我们有一个积分图像,那么,我们可以通过将四个项相加来计算盒滤波器输出的每个元素。换句话说,盒子滤波的计算可以独立于盒子滤波窗口的大小!
图像处理工具箱功能
integralBoxFilter
为你做这个。你给它一个积分图像,它会返回应用于原始图像的盒子过滤器的结果。
让我们看看改变盒子过滤器窗口大小需要多长时间。
Integral_box_filter_times = 0(1,长度(nn));
h = @() integralBoxFilter(Ai,n);
Integral_box_filter_times (k) = timeit(h);
情节(nn、integral_box_filter_times...
传奇([“integralBoxFilter”“imfilter”),...
看起来很棒!正如所料,
integralBoxFilter
速度快,执行时间与窗口大小无关。为了公平起见,我们应该包括计算积分像所需的时间。
Integral_box_filter_total_times = 0(1,长度(nn));
r = @() integralBoxFilter(integralImage(I),n);
Integral_box_filter_total_times (k) = timeit(r);
神经网络、integral_box_filter_times...
神经网络,integral_box_filter_total_times)
传奇([“imfilter”“integralBoxFilter”“integralImage + integralBoxFilter”),...
从图中,我们可以看到使用积分图像进行框滤波是可行的,即使考虑到计算积分图像所需的时间。
评论
要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。