@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_x4 if ((x + dx * 4 <= winWidth) && (y + dy <= winHeight)) { return HaarFeature.create(false, x, y, dx * 4, dy, -1, x + dx, y, dx * 2, dy, +2); } return null; } },
final void updateCaches(StageTreeClassifier cascade) { setScale(cascade.cachedScale, cascade.cachedInvArea); }
@Override public float[] getInstanceFeature(int idx) { final float[] feature = new float[features.length]; final SummedSqTiltAreaTable sat = sats[idx]; final float wvNorm = computeWindowVarianceNorm(sat); for (int i = 0; i < features.length; i++) { feature[i] = features[i].computeResponse(sat, 0, 0) / wvNorm; } return feature; }
@Override public void updateCaches(StageTreeClassifier cascade) { feature.updateCaches(cascade); left.updateCaches(cascade); right.updateCaches(cascade); } }
@Override public float[] getFeatureResponse(int dimension) { final float[] response = new float[sats.length]; for (int i = 0; i < sats.length; i++) { final float wvNorm = computeWindowVarianceNorm(sats[i]); response[i] = features[dimension].computeResponse(sats[i], 0, 0) / wvNorm; } return response; }
@Override public void updateCaches(StageTreeClassifier cascade) { feature.updateCaches(cascade); left.updateCaches(cascade); right.updateCaches(cascade); } }
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { if ((x + dx * 3 <= winWidth) && (y + dy * 3 <= winHeight)) { return HaarFeature.create(false, x, y, dx * 3, dy * 3, -1, x + dx, y + dy, dx, dy, +9); } return null; } },
@Override public float[] getFeatureResponse(int dimension) { final float[] response = new float[sats.length]; for (int i = 0; i < sats.length; i++) { final float wvNorm = computeWindowVarianceNorm(sats[i]); response[i] = features[dimension].computeResponse(sats[i], 0, 0) / wvNorm; } return response; }
final void updateCaches(StageTreeClassifier cascade) { setScale(cascade.cachedScale, cascade.cachedInvArea); }
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_x3 if ((x + dx * 3 <= winWidth) && (y + dy <= winHeight)) { return HaarFeature.create(false, x, y, dx * 3, dy, -1, x + dx, y, dx, dy, +3); } return null; } },
@Override public float[] getInstanceFeature(int idx) { final float[] feature = new float[features.length]; final SummedSqTiltAreaTable sat = sats[idx]; final float wvNorm = computeWindowVarianceNorm(sat); for (int i = 0; i < features.length; i++) { feature[i] = features[i].computeResponse(sat, 0, 0) / wvNorm; } return feature; }
void createFeatures(int width, int height) { features = HaarFeatureType.generateFeatures(width, height, HaarFeatureType.CORE); final float invArea = 1f / ((width - 2) * (height - 2)); for (final HaarFeature f : features) { f.setScale(1, invArea); } }
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_y2 if ((x + dx <= winWidth) && (y + dy * 2 <= winHeight)) { return HaarFeature.create(false, x, y, dx, dy * 2, -1, x, y + dy, dx, dy, +2); } return null; } },
@Override public float classify(final SummedSqTiltAreaTable sat, final float wvNorm, final int x, final int y) { final float response = feature.computeResponse(sat, x, y); return (response < threshold * wvNorm) ? left.classify(sat, wvNorm, x, y) : right.classify(sat, wvNorm, x, y); }
void createFeatures(int width, int height) { features = HaarFeatureType.generateFeatures(width, height, HaarFeatureType.CORE); final float invArea = 1f / ((width - 2) * (height - 2)); for (final HaarFeature f : features) { f.setScale(1, invArea); } }
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_y4 if ((x + dx <= winWidth) && (y + dy * 4 <= winHeight)) { return HaarFeature.create(false, x, y, dx, dy * 4, -1, x, y + dy, dx, dy * 2, +2); } return null; } },
@Override public void perform(Integer f) { final HaarFeature feature = features.get(f); int count = 0; for (final SummedSqTiltAreaTable t : positive) { final float wvNorm = computeWindowVarianceNorm(t); responses[f][count] = feature.computeResponse(t, 0, 0) / wvNorm; classes[count] = true; ++count; } for (final SummedSqTiltAreaTable t : negative) { final float wvNorm = computeWindowVarianceNorm(t); responses[f][count] = feature.computeResponse(t, 0, 0) / wvNorm; classes[count] = false; ++count; } sortedIndices[f] = ArrayUtils.indexSort(responses[f]); } });
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_y4 if ((x + dx <= winWidth) && (y + dy * 4 <= winHeight)) { return HaarFeature.create(false, x, y, dx, dy * 4, -1, x, y + dy, dx, dy * 2, +2); } return null; } },
@Override public float classify(final SummedSqTiltAreaTable sat, final float wvNorm, final int x, final int y) { final float response = feature.computeResponse(sat, x, y); return (response < threshold * wvNorm) ? left.classify(sat, wvNorm, x, y) : right.classify(sat, wvNorm, x, y); }
@Override public HaarFeature create(int x, int y, int dx, int dy, int winWidth, int winHeight) { // haar_x3 if ((x + dx * 3 <= winWidth) && (y + dy <= winHeight)) { return HaarFeature.create(false, x, y, dx * 3, dy, -1, x + dx, y, dx, dy, +3); } return null; } },