/** * {@inheritDoc} * @see org.openimaj.image.processor.connectedcomponent.ConnectedComponentProcessor#process(org.openimaj.image.pixel.ConnectedComponent) */ @Override public void process(ConnectedComponent cc) { if (fill) image.drawShapeFilled(cc.calculateRegularBoundingBox(), colour); else image.drawShape(cc.calculateRegularBoundingBox(), colour); } }
/** * {@inheritDoc} * @see org.openimaj.image.processor.connectedcomponent.ConnectedComponentProcessor#process(org.openimaj.image.pixel.ConnectedComponent) */ @Override public void process(ConnectedComponent cc) { if (fill) image.drawShapeFilled(cc.calculateRegularBoundingBox(), colour); else image.drawShape(cc.calculateRegularBoundingBox(), colour); } }
@Override public void process(ConnectedComponent cc) { // Dilate a connected component final Rectangle cc_bb = cc.calculateRegularBoundingBox(); final Set<Pixel> newPixels = new HashSet<Pixel>(); for (int j = (int) (cc_bb.y - sh); j <= cc_bb.y + sh + cc_bb.height; j++) { for (int i = (int) (cc_bb.x - sw); i <= cc_bb.x + sw + cc_bb.width; i++) { final Pixel p = new Pixel(i, j); if (element.intersect(p, cc.getPixels()).size() >= 1) { newPixels.add(p); } } } cc.getPixels().addAll(newPixels); }
@Override public void process(ConnectedComponent cc) { // Dilate a connected component final Rectangle cc_bb = cc.calculateRegularBoundingBox(); final Set<Pixel> newPixels = new HashSet<Pixel>(); for (int j = (int) (cc_bb.y - sh); j <= cc_bb.y + sh + cc_bb.height; j++) { for (int i = (int) (cc_bb.x - sw); i <= cc_bb.x + sw + cc_bb.width; i++) { final Pixel p = new Pixel(i, j); if (element.intersect(p, cc.getPixels()).size() >= 1) { newPixels.add(p); } } } cc.getPixels().addAll(newPixels); }
protected List<CCDetectedFace> extractFaces(FImage faceMap, FImage skinMap, FImage image) { final List<ConnectedComponent> blobs = ccl.findComponents(faceMap); final List<CCDetectedFace> faces = new ArrayList<CCDetectedFace>(); for (final ConnectedComponent blob : blobs) { if (blob.calculateArea() > 1000) { final double[] centroid = blob.calculateCentroid(); final double[] hw = blob.calculateAverageHeightWidth(centroid); final double percentageSkin = calculatePercentageSkin(skinMap, (int) Math.round(centroid[0] - (hw[0] / 2)), (int) Math.round(centroid[1] - (hw[1] / 2)), (int) Math.round(centroid[0] + (hw[0] / 2)), (int) Math.round(centroid[1] + (hw[1] / 2))); final double ratio = hw[0] / hw[1]; if (Math.abs(ratio - GOLDEN_RATIO) < goldenRatioThreshold && percentageSkin > percentageThreshold) { final Rectangle r = blob.calculateRegularBoundingBox(); faces.add(new CCDetectedFace( r, image.extractROI(r), blob, (float) ((percentageSkin / percentageThreshold) * (Math.abs(ratio - GOLDEN_RATIO) / goldenRatioThreshold)))); } } } return faces; }
@Override public void process(ConnectedComponent cc) { //hit and miss transform; doesn't affect original pixels. outputPixels.clear(); for (StructuringElement element : elements) { Set<Pixel> pixels = cc.getPixels(); int [] se_size = element.size(); Rectangle cc_bb = cc.calculateRegularBoundingBox(); for (int j=(int) (cc_bb.y-se_size[1]); j<=cc_bb.y+se_size[1]+cc_bb.height; j++) { for (int i=(int) (cc_bb.x-se_size[0]); i<=cc_bb.x+se_size[0]+cc_bb.width; i++) { Pixel p = new Pixel(i, j); if (element.matches(p, pixels)) { outputPixels.add(p); } } } } }
@Override public void process(ConnectedComponent cc) { //hit and miss transform; doesn't affect original pixels. outputPixels.clear(); for (StructuringElement element : elements) { Set<Pixel> pixels = cc.getPixels(); int [] se_size = element.size(); Rectangle cc_bb = cc.calculateRegularBoundingBox(); for (int j=(int) (cc_bb.y-se_size[1]); j<=cc_bb.y+se_size[1]+cc_bb.height; j++) { for (int i=(int) (cc_bb.x-se_size[0]); i<=cc_bb.x+se_size[0]+cc_bb.width; i++) { Pixel p = new Pixel(i, j); if (element.matches(p, pixels)) { outputPixels.add(p); } } } } }
@Override public void process(ConnectedComponent cc) { // Erode a connected component final Set<Pixel> retain = new HashSet<Pixel>(); final Set<Pixel> pixels = cc.getPixels(); final int[] se_size = element.size(); final Rectangle cc_bb = cc.calculateRegularBoundingBox(); for (int j = (int) (cc_bb.y - se_size[1]); j <= cc_bb.y + se_size[1] + cc_bb.height; j++) { for (int i = (int) (cc_bb.x - se_size[0]); i <= cc_bb.x + se_size[0] + cc_bb.width; i++) { final Pixel p = new Pixel(i, j); if (element.matches(p, pixels)) { retain.add(p); } } } cc.getPixels().retainAll(retain); }
@Override public void process(ConnectedComponent cc) { // Erode a connected component final Set<Pixel> retain = new HashSet<Pixel>(); final Set<Pixel> pixels = cc.getPixels(); final int[] se_size = element.size(); final Rectangle cc_bb = cc.calculateRegularBoundingBox(); for (int j = (int) (cc_bb.y - se_size[1]); j <= cc_bb.y + se_size[1] + cc_bb.height; j++) { for (int i = (int) (cc_bb.x - se_size[0]); i <= cc_bb.x + se_size[0] + cc_bb.width; i++) { final Pixel p = new Pixel(i, j); if (element.matches(p, pixels)) { retain.add(p); } } } cc.getPixels().retainAll(retain); }
continue; final Rectangle bb = cc.calculateRegularBoundingBox(); if (cc2 == cc) continue; final Rectangle bb2 = cc2.calculateRegularBoundingBox(); if (bb2.intersectionArea(bb) > 0) overlapping++;
continue; final Rectangle bb = cc.calculateRegularBoundingBox(); if (cc2 == cc) continue; final Rectangle bb2 = cc2.calculateRegularBoundingBox(); if (bb2.intersectionArea(bb) > 0) overlapping++;
/** * Render a connected component with a given grey level and display it * * @param input * the connected component * @param col * the grey level * @return frame containing the rendered image */ public static JFrame display(final ConnectedComponent input, final float col) { final ConnectedComponent cc = input.clone(); final Rectangle bb = cc.calculateRegularBoundingBox(); // Render the mask, leaving a 10 px border cc.translate(10 - (int) bb.x, 10 - (int) bb.y); final FImage mask = new FImage((int) Math.max(bb.width + 20, 100), (int) Math.max(bb.height + 20, 100)); final BlobRenderer<Float> br = new BlobRenderer<Float>(mask, 1.0F); cc.process(br); return DisplayUtilities.display(mask); }
/** * Render a connected component with a given grey level and display it * * @param input * the connected component * @param col * the grey level * @return frame containing the rendered image */ public static JFrame display(final ConnectedComponent input, final float col) { final ConnectedComponent cc = input.clone(); final Rectangle bb = cc.calculateRegularBoundingBox(); // Render the mask, leaving a 10 px border cc.translate(10 - (int) bb.x, 10 - (int) bb.y); final FImage mask = new FImage((int) Math.max(bb.width + 20, 100), (int) Math.max(bb.height + 20, 100)); final BlobRenderer<Float> br = new BlobRenderer<Float>(mask, 1.0F); cc.process(br); return DisplayUtilities.display(mask); }
final Rectangle bb = cc.calculateRegularBoundingBox();
final Rectangle bb = cc.calculateRegularBoundingBox();