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

时间:2015-06-25 00:54:08

标签: matlab image-processing computer-vision feature-extraction matlab-cvst

我在Matlab中通过 IntegralKernel 类定义类似哈尔的特征过滤器 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 是过滤器边界框的宽度和高度。返回的filte H 是一个Matlab struct 类型变量,其中包含以下字段:

BoundingBoxes
Weights
Coefficients - Conventional filter coefficients.
Center
Size

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

HaarFeature = integralFilter(integralImage(I), H)

但是如果图像数量很大(例如,10,000张图像),这需要很长时间,因为我需要使用 for-loop 来计算每个图像。但是,如果我只计算文件管理器 H 中给定原始图像 I 系数的总和,我发现更快。代码如下:

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

Matlab中的 I H.Coefficients 都是 double 类型。

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

1 个答案:

答案 0 :(得分:0)

您是否必须使用多个内核过滤每个图像? 在这种情况下,您应该只为每个图像调用y!=0一次,然后存储并重新使用结果。计算积分图像需要一些时间。但是,一旦你拥有它,将积分内核应用于生成的积分图像应该非常快。