Example Fiducial Square Image

From BoofCV
Revision as of 16:37, 15 September 2014 by Peter (talk | contribs) (Created page with "<center> <gallery widths=280px heights=240px> file:Example_fiducial_image.jpg | Rendered 3D flat squares on top of fiducials </gallery> </center> Demonstration how to detect...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Demonstration how to detect square image fiducials. After the fiducial detector has been created a description of each image it detects is passed in. These images are converted into binary images and resized if needed. A large number of unique fiducials can be detected with a linear growth in computational time.

Example Code:

Concepts:

  • Fiducials
  • Pose estimation

Relevant Tutorials:

Relevant Applets:

Example Code

/**
 * Detects square binary fiducials inside an image, writes out there pose, and visualizes a virtual flat cube
 * above them in the input image.
 *
 * @author Peter Abeles
 */
public class ExampleFiducialImage {
	public static void main(String[] args) {

		String directory = "../data/applet/fiducial/image/";

		String imageName = "image0000.jpg";
//		String imageName = "image0001.jpg";
//		String imageName = "image0002.jpg";

		// load the lens distortion parameters and the input image
		IntrinsicParameters param = UtilIO.loadXML(directory + "intrinsic.xml");
		BufferedImage input = UtilImageIO.loadImage(directory + imageName);
		ImageFloat32 original = ConvertBufferedImage.convertFrom(input, true, ImageType.single(ImageFloat32.class));

		// Detect the fiducial
		SquareImage_to_FiducialDetector<ImageFloat32> detector = FactoryFiducial.
				squareImageRobust(new ConfigFiducialImage(0.1), 6, ImageFloat32.class);
//				squareImageFast(new ConfigFiducialImage(0.1), 100, ImageFloat32.class);

		// give it a description of all the targets
		ImageFloat32 dog = UtilImageIO.loadImage(directory + "dog.png",ImageFloat32.class);
		detector.addTarget(dog, 125);
		// uncomment to detect the text target
		ImageFloat32 text = UtilImageIO.loadImage(directory + "text.png",ImageFloat32.class);
		detector.addTarget(text, 125);

		detector.setIntrinsic(param);

		detector.detect(original);

		// print the results
		Graphics2D g2 = input.createGraphics();
		Se3_F64 targetToSensor = new Se3_F64();
		for (int i = 0; i < detector.totalFound(); i++) {
			System.out.println("Target ID = "+detector.getId(i));
			detector.getFiducialToWorld(i, targetToSensor);
			System.out.println("Location:");
			System.out.println(targetToSensor);

			VisualizeFiducial.drawCube(targetToSensor,param,0.1,g2);
		}

		ShowImages.showWindow(input,"Fiducials");

	}
}