我在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 类型。
我的问题是,如果这两种计算哈尔特征的方法是等价的吗?谢谢!
答案 0 :(得分:0)
您是否必须使用多个内核过滤每个图像?
在这种情况下,您应该只为每个图像调用y!=0
一次,然后存储并重新使用结果。计算积分图像需要一些时间。但是,一旦你拥有它,将积分内核应用于生成的积分图像应该非常快。