快速局部和,积分图象,和积分盒滤波
2006年5月,我写道
关于一种快速计算图像局部和的技术。今天,我想用图像处理工具箱中关于积分图像和积分框滤波功能的额外信息更新这篇文章。
首先,让我们回顾一下局部和的概念。
A =魔术(7)
的局部和
$3 \乘以3$
元素(2,3)的邻域
一个
可以这样计算:
submatrix = A(1:3, 2:4)
Local_sum_2_3 = sum(submatrix,“所有”)
Local_sum_2_3 = 182
在图像处理应用中,我们通常对局部和除以邻域中元素的数量感兴趣,在本例中为9:
local_sum_2_3/9
Ans = 20.2222
计算矩阵的所有局部和,除以邻域大小,与使用局部均值滤波器执行2-D滤波相同,如下所示:
B = imfilter(A,ones(3,3)/9);
B(2、3)
Ans = 20.2222
这通常被称为
框过滤器
.计算一个
$N \乘以N$
盒子过滤器为整个
P乘以Q
图像似乎需要近似
美元PQN ^ 2美元
操作。换句话说,对于一个固定的图像大小,我们可以期望盒滤波器的计算时间按比例增加
N ^ 2美元
,在那里
N
本地和窗口大小。
让我们看看有多长时间
imfilter
对于变化的局部和邻域大小。
I =兰特(3000,4000);
Nn = 15:10:205;
Imfilter_times = 0 (size(nn));
为K = 1:长度(nn)
N = nn(k);
f = @() imfilter(I,ones(n,n)/n²);
Imfilter_times (k) = timeit(f);
结束
imfilter_times情节(nn)
标题(“使用过滤器的盒子过滤器执行时间”)
包含(“窗口大小”)
ylabel (“时间(s)”)
Ai = integralImage(A)
的每个元素
人工智能
是A中所有在上面和左边的元素的累积和。
人工智能(4,3)
,也就是206,是所有元素的和
(1:2, 1:3)
.
(1:2, 1:3)
总和(ans,“所有”)
Ans = 206
人工智能(4,3)
Ans = 206
用一般公式表示,积分像为
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 = 3;
M2 = 5;
N1 = 2;
N2 = 6;
(m1, m2, n1: n2)
总和(ans,“所有”)
Ans = 375
人工智能(m2 + 1, n2 + 1) - Ai (m1, n2 + 1) Ai (m2 + 1, n1) +人工智能(m1, n1)
Ans = 375
如果我们有一个积分图像,那么,我们可以通过将四个项相加来计算盒滤波器输出的每个元素。换句话说,盒子滤波的计算可以独立于盒子滤波窗口的大小!
图像处理工具箱功能
integralBoxFilter
为你做这个。你给它一个积分图像,它会返回应用于原始图像的盒子过滤器的结果。
让我们看看改变盒子过滤器窗口大小需要多长时间。
Integral_box_filter_times = 0(1,长度(nn));
为K = 1:长度(nn)
N = nn(k);
h = @() integralBoxFilter(Ai,n);
Integral_box_filter_times (k) = timeit(h);
结束
情节(nn、integral_box_filter_times...
神经网络,imfilter_times)
传奇([“integralBoxFilter”“imfilter”],...
位置=“西北”)
标题(“框过滤器执行时间”)
包含(“窗口大小”)
ylabel (“时间(s)”)
看起来很棒!正如所料,
integralBoxFilter
速度快,执行时间与窗口大小无关。为了公平起见,我们应该包括计算积分像所需的时间。
Integral_box_filter_total_times = 0(1,长度(nn));
为K = 1:长度(nn)
N = nn(k);
r = @() integralBoxFilter(integralImage(I),n);
Integral_box_filter_total_times (k) = timeit(r);
结束
情节(nn、imfilter_times...
神经网络、integral_box_filter_times...
神经网络,integral_box_filter_total_times)
标题(“框过滤器执行时间”)
包含(“窗口大小”)
ylabel (“时间(s)”)
传奇([“imfilter”“integralBoxFilter”“integralImage + integralBoxFilter”],...
位置=“西北”)
从图中,我们可以看到使用积分图像进行框滤波是可行的,即使考虑到计算积分图像所需的时间。
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。