@Override protected GrayU8 getBinaryImage() { return detector.getDetector().getBinary(); }
@Override protected boolean process(GrayF32 image) { return detector.process(image); }
@Override protected List<Point2D_F64> getCalibrationPoints() { return detector.getKeypointFinder().getKeyPoints().toList(); }
@Override protected void renderClusters(Graphics2D g2, double scale) { List<BinaryEllipseDetector.EllipseInfo> found = detector.getDetector().getEllipseDetector().getFound().toList(); List<List<EllipsesIntoClusters.Node>> clusters = detector.getDetector().getClusters(); g2.setStroke(new BasicStroke(2)); int id = 0; for( List<EllipsesIntoClusters.Node> c : clusters ) { g2.setColor(colorId[Math.min(id++,colorId.length-1)]); for( EllipsesIntoClusters.Node n : c ) { EllipseRotated_F64 a = found.get(n.which).ellipse; line.x1 = a.center.x*scale; line.y1 = a.center.y*scale; for (int i = 0; i < n.connections.size; i++) { EllipseRotated_F64 b = found.get(n.connections.get(i)).ellipse; line.x2 = b.center.x*scale; line.y2 = b.center.y*scale; g2.draw(line); } } } }
@Override protected List<EllipseRotated_F64> getFoundEllipses() { return detector.getDetector().getEllipseDetector().getFoundEllipses(null); }
@Override protected void renderGrid(Graphics2D g2 , double scale ) { List<Grid> grids = detector.getDetector().getGrider().getGrids().toList(); BasicStroke thin = new BasicStroke(3); BasicStroke thick = new BasicStroke(5); for( Grid g : grids ) { double x0 = Double.MAX_VALUE; double x1 = -Double.MAX_VALUE; double y0 = Double.MAX_VALUE; double y1 = -Double.MAX_VALUE; for (int i = 0; i < g.ellipses.size(); i++) { EllipseRotated_F64 e = g.ellipses.get(i); if( e == null ) continue; x0 = Math.min(e.center.x,x0); x1 = Math.max(e.center.x,x1); y0 = Math.min(e.center.y,y0); y1 = Math.max(e.center.y,y1); } x0 *= scale; y0 *= scale; x1 *= scale; y1 *= scale; g2.setColor(Color.WHITE); g2.setStroke(thick); VisualizeShapes.drawRectangle(x0,y0,x1,y1,line,g2); g2.setColor(Color.ORANGE); g2.setStroke(thin); VisualizeShapes.drawRectangle(x0,y0,x1,y1,line,g2); } }
@Override protected List<Contour> getContours() { BinaryLabelContourFinder contour = detector.getDetector().getEllipseDetector().getEllipseDetector().getContourFinder(); return BinaryImageOps.convertContours(contour); }
binary = alg.getBinary(); } else if( detector instanceof CalibrationDetectorCircleRegularGrid) { DetectCircleRegularGrid<GrayF32> alg = ((CalibrationDetectorCircleRegularGrid) detector).getDetector(); debugEllipses.clear(); debugEllipses.addAll(alg.getEllipseDetector().getFoundEllipses(null));
binary = ((CalibrationDetectorCircleHexagonalGrid) a).getDetector().getBinary(); } else if( a instanceof CalibrationDetectorCircleRegularGrid){ binary = ((CalibrationDetectorCircleRegularGrid) a).getDetector().getBinary(); } else { throw new RuntimeException("Unknown class "+a.getClass().getSimpleName());