我在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_width和im_height是图像的宽度和高度w和h是过滤器边界框的宽度和高度。返回的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));
I和H.系数在Matlab中都是双类型。
我的问题是,如果这两种计算哈尔特征的方法是等价的?谢谢
你必须用多个内核过滤每个图像吗?在这种情况下,您应该只为每个图像调用integralImage(I)
一次,并存储和重用结果。计算积分图像需要一些时间。然而,一旦您有了它,将积分内核应用于生成的积分图像应该非常快。