protected void computeSATs(FImage[] magnitudeMaps) { for (int i = 0; i < nbins; i++) { sats[i] = new SummedAreaTable(magnitudeMaps[i]); } }
protected void computeSATs(FImage[] magnitudeMaps) { for (int i = 0; i < nbins; i++) { sats[i] = new SummedAreaTable(magnitudeMaps[i]); } }
@Override public void processImage(FImage image) { // shortcut trivial case if (this.height == 1 && this.width == 1) return; final SummedAreaTable sat = new SummedAreaTable(); sat.analyseImage(image); final int hw = width / 2; final int hh = height / 2; for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { final int sx = Math.max(0, x - hw); final int sy = Math.max(0, y - hh); final int ex = Math.min(image.width, x + hw + 1); final int ey = Math.min(image.height, y + hh + 1); final float mean = sat.calculateArea(sx, sy, ex, ey); image.pixels[y][x] = mean; } } } }
@Override public void processImage(FImage image) { // shortcut trivial case if (this.height == 1 && this.width == 1) return; final SummedAreaTable sat = new SummedAreaTable(); sat.analyseImage(image); final int hw = width / 2; final int hh = height / 2; for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { final int sx = Math.max(0, x - hw); final int sy = Math.max(0, y - hh); final int ex = Math.min(image.width, x + hw + 1); final int ey = Math.min(image.height, y + hh + 1); final float mean = sat.calculateArea(sx, sy, ex, ey); image.pixels[y][x] = mean; } } } }
@Override public void processImage(FImage image) { // shortcut trivial case if (this.height == 1 && this.width == 1) return; final SummedAreaTable sat = new SummedAreaTable(); sat.analyseImage(image); final int hw = width / 2; final int hh = height / 2; for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { final int sx = Math.max(0, x - hw); final int sy = Math.max(0, y - hh); final int ex = Math.min(image.width, x + hw + 1); final int ey = Math.min(image.height, y + hh + 1); final int area = (ex - sx) * (ey - sy); final float mean = sat.calculateArea(sx, sy, ex, ey) / area; image.pixels[y][x] = mean; } } } }
@Override public void processImage(FImage image) { // shortcut trivial case if (this.height == 1 && this.width == 1) return; final SummedAreaTable sat = new SummedAreaTable(); sat.analyseImage(image); final int hw = width / 2; final int hh = height / 2; for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { final int sx = Math.max(0, x - hw); final int sy = Math.max(0, y - hh); final int ex = Math.min(image.width, x + hw + 1); final int ey = Math.min(image.height, y + hh + 1); final int area = (ex - sx) * (ey - sy); final float mean = sat.calculateArea(sx, sy, ex, ey) / area; image.pixels[y][x] = mean; } } } }
@Override public void processCorrelationMap(FImage img, FImage template, FImage corr) { SummedAreaTable sum = new SummedAreaTable(); img.analyseWith(sum); final float templateMean = FloatArrayStatsUtils.mean(template.pixels); //TODO: cache this final float[][] pix = corr.pixels; for( int y = 0; y < corr.height; y++ ) { for( int x = 0; x < corr.width; x++ ) { double num = pix[y][x]; double t = sum.calculateArea(x, y, x+template.width, y+template.height); num -= t * templateMean; pix[y][x] = (float)num; } } } },
@Override public void processCorrelationMap(FImage img, FImage template, FImage corr) { SummedAreaTable sum = new SummedAreaTable(); img.analyseWith(sum); final float templateMean = FloatArrayStatsUtils.mean(template.pixels); //TODO: cache this final float[][] pix = corr.pixels; for( int y = 0; y < corr.height; y++ ) { for( int x = 0; x < corr.width; x++ ) { double num = pix[y][x]; double t = sum.calculateArea(x, y, x+template.width, y+template.height); num -= t * templateMean; pix[y][x] = (float)num; } } } },
/** * Extract the facial keypoints from a canonical image. * The image must contain a face and have the dimensions * specified by {@link #getCanonicalImageDimension()}. * * @param canonicalImage the canonical image containing a detected face. * @return A list of facial keypoints for the image. */ public FacialKeypoint[] extractFacialKeypoints(FImage canonicalImage) { SummedAreaTable sat = new SummedAreaTable(canonicalImage); //run the haar cascade detector for each facial keypoint type FImage [] AC = new FImage[9]; for (int i=0; i<9; i++) { FImage map = MaskedHaarCascade.maskedHaarCascade(sat, model.winsize, model.winsize, model.part[i].HCas, model.part[i].talpha, model.part[i].M); AC[i] = map.multiplyInplace(-(float)model.appwt); } //and then fit the model to find the best keypoints return findParts(AC); }
@Override public void processImage(FImage image) { render(image, new SummedAreaTable(image), (int) axis.getBeginPoint().getX(), (int) axis.getBeginPoint().getY(), (int) axis.getEndPoint().getX(), (int) axis.getEndPoint().getY()); }
@Override public void processImage(FImage image) { render(image, new SummedAreaTable(image), (int) axis.getBeginPoint().getX(), (int) axis.getBeginPoint().getY(), (int) axis.getEndPoint().getX(), (int) axis.getEndPoint().getY()); }
@Override public void processImage(FImage image) { final SummedAreaTable sat = new SummedAreaTable(image); final FImage output = new FImage(image.width, image.height);
@Override public void processImage(FImage image) { final SummedAreaTable sat = new SummedAreaTable(image); final FImage output = new FImage(image.width, image.height);