我可以在 IntegralKernel 定义的过滤器中使用 "Coefficients" 而不是 integralFilter() 函数来计算 Haar 特征吗?



我在Matlab中通过IntegralKernel类定义了一个类似Haar的特征滤波器H

H = integralKernel(integralKernel([1,1,im_width,im_height;...
                                   2, 2, w, h;...
                                   2+w, 2, w, h;],...
                                   [0,1,-1]);

im_widthim_height是图像的宽度和高度wh是过滤器边界框的宽度和高度。返回的filteH是一个Matlabstruct类型的变量,它包含如下字段:

BoundingBoxes
Weights
Coefficients - Conventional filter coefficients.
Center
Size

在Matlab文档中,当从给定的积分图像计算特征时,它使用函数integralFilter(IntegralImage,H)。代码如下:

HaarFeature = integralFilter(integralImage(I), H)

但是,如果图像数量很大(例如,10000个图像),这需要很长时间,因为我需要使用for循环来计算每个图像。然而,我发现如果我只计算给定原始图像I和滤波器H中的系数的和,速度会快得多。代码如下:

HaarFeature = sum(sum(I .* H.Coefficients));

IH.系数在Matlab中都是类型。

我的问题是,如果这两种计算哈尔特征的方法是等价的?谢谢

你必须用多个内核过滤每个图像吗?在这种情况下,您应该只为每个图像调用integralImage(I)一次,并存储和重用结果。计算积分图像需要一些时间。然而,一旦您有了它,将积分内核应用于生成的积分图像应该非常快。

最新更新