Search in sources :

Example 6 with ConfigFiducialImage

use of boofcv.factory.fiducial.ConfigFiducialImage in project BoofCV by lessthanoptimal.

the class ExampleFiducialImage method main.

public static void main(String[] args) {
    String imagePath = UtilIO.pathExample("fiducial/image/examples/");
    String patternPath = UtilIO.pathExample("fiducial/image/patterns/");
    // String imageName = "image00.jpg";
    String imageName = "image01.jpg";
    // String imageName = "image02.jpg";
    // load the lens distortion parameters and the input image
    CameraPinholeRadial param = CalibrationIO.load(new File(imagePath, "intrinsic.yaml"));
    LensDistortionNarrowFOV lensDistortion = new LensDistortionRadialTangential(param);
    BufferedImage input = UtilImageIO.loadImage(imagePath, imageName);
    GrayF32 original = ConvertBufferedImage.convertFrom(input, true, ImageType.single(GrayF32.class));
    // Detect the fiducial
    SquareImage_to_FiducialDetector<GrayF32> detector = FactoryFiducial.squareImage(new ConfigFiducialImage(), ConfigThreshold.local(ThresholdType.LOCAL_MEAN, 21), GrayF32.class);
    // new ConfigFiducialImage(), ConfigThreshold.fixed(100), GrayF32.class);
    // give it a description of all the targets
    // 4 cm
    double width = 4;
    detector.addPatternImage(loadImage(patternPath, "ke.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "dog.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "yu.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "yu_inverted.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "pentarose.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "text_boofcv.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "leaf01.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "leaf02.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "hand01.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "chicken.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "h2o.png", GrayF32.class), 100, width);
    detector.addPatternImage(loadImage(patternPath, "yinyang.png", GrayF32.class), 100, width);
    detector.setLensDistortion(lensDistortion, param.width, param.height);
    detector.detect(original);
    // print the results
    Graphics2D g2 = input.createGraphics();
    Se3_F64 targetToSensor = new Se3_F64();
    Point2D_F64 locationPixel = new Point2D_F64();
    Polygon2D_F64 bounds = new Polygon2D_F64();
    for (int i = 0; i < detector.totalFound(); i++) {
        detector.getCenter(i, locationPixel);
        detector.getBounds(i, bounds);
        g2.setColor(new Color(50, 50, 255));
        g2.setStroke(new BasicStroke(10));
        VisualizeShapes.drawPolygon(bounds, true, 1.0, g2);
        if (detector.hasUniqueID())
            System.out.println("Target ID = " + detector.getId(i));
        if (detector.hasMessage())
            System.out.println("Message   = " + detector.getMessage(i));
        System.out.println("2D Image Location = " + locationPixel);
        if (detector.is3D()) {
            detector.getFiducialToCamera(i, targetToSensor);
            System.out.println("3D Location:");
            System.out.println(targetToSensor);
            VisualizeFiducial.drawCube(targetToSensor, param, detector.getWidth(i), 3, g2);
            VisualizeFiducial.drawLabelCenter(targetToSensor, param, "" + detector.getId(i), g2);
        } else {
            VisualizeFiducial.drawLabel(locationPixel, "" + detector.getId(i), g2);
        }
    }
    ShowImages.showWindow(input, "Fiducials", true);
}
Also used : LensDistortionNarrowFOV(boofcv.alg.distort.LensDistortionNarrowFOV) ConfigFiducialImage(boofcv.factory.fiducial.ConfigFiducialImage) BufferedImage(java.awt.image.BufferedImage) ConvertBufferedImage(boofcv.io.image.ConvertBufferedImage) Polygon2D_F64(georegression.struct.shapes.Polygon2D_F64) LensDistortionRadialTangential(boofcv.alg.distort.radtan.LensDistortionRadialTangential) GrayF32(boofcv.struct.image.GrayF32) CameraPinholeRadial(boofcv.struct.calib.CameraPinholeRadial) Point2D_F64(georegression.struct.point.Point2D_F64) File(java.io.File) Se3_F64(georegression.struct.se.Se3_F64)

Aggregations

ConfigFiducialImage (boofcv.factory.fiducial.ConfigFiducialImage)6 ConvertBufferedImage (boofcv.io.image.ConvertBufferedImage)3 GrayF32 (boofcv.struct.image.GrayF32)3 BufferedImage (java.awt.image.BufferedImage)3 LensDistortionRadialTangential (boofcv.alg.distort.radtan.LensDistortionRadialTangential)2 ConfigThreshold (boofcv.factory.filter.binary.ConfigThreshold)2 File (java.io.File)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 SquareImage_to_FiducialDetector (boofcv.abst.fiducial.SquareImage_to_FiducialDetector)1 LensDistortionNarrowFOV (boofcv.alg.distort.LensDistortionNarrowFOV)1 ConfigFiducialBinary (boofcv.factory.fiducial.ConfigFiducialBinary)1 PathLabel (boofcv.io.PathLabel)1 CameraPinholeRadial (boofcv.struct.calib.CameraPinholeRadial)1 GrayU8 (boofcv.struct.image.GrayU8)1 Point2D_F64 (georegression.struct.point.Point2D_F64)1 Se3_F64 (georegression.struct.se.Se3_F64)1 Polygon2D_F64 (georegression.struct.shapes.Polygon2D_F64)1 BufferedReader (java.io.BufferedReader)1 FileReader (java.io.FileReader)1