Difference between revisions of "Example Remove Perspective Distortion"
From BoofCV
Jump to navigationJump to searchm |
m |
||
Line 9: | Line 9: | ||
Example Code: | Example Code: | ||
* [https://github.com/lessthanoptimal/BoofCV/blob/v0. | * [https://github.com/lessthanoptimal/BoofCV/blob/v0.27/examples/src/boofcv/examples/geometry/ExampleRemovePerspectiveDistortion.java ExampleRemovePerspectiveDistortion.java] | ||
Concepts: | Concepts: | ||
* Homography | * Homography | ||
* | * Perspective | ||
* Distortion | * Distortion | ||
Line 36: | Line 36: | ||
// load a color image | // load a color image | ||
BufferedImage buffered = UtilImageIO.loadImage(UtilIO.pathExample("goals_and_stuff.jpg")); | BufferedImage buffered = UtilImageIO.loadImage(UtilIO.pathExample("goals_and_stuff.jpg")); | ||
Planar<GrayF32> input = ConvertBufferedImage. | Planar<GrayF32> input = ConvertBufferedImage.convertFromPlanar(buffered, null, true, GrayF32.class); | ||
RemovePerspectiveDistortion<Planar<GrayF32>> removePerspective = | RemovePerspectiveDistortion<Planar<GrayF32>> removePerspective = | ||
Line 56: | Line 56: | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 07:52, 17 August 2017
It is often easier to process an image after perspective distortion is removed. The billboard in this example is at an acute angle relative to the camera, making its text hard to read. A homography can be created, using the for cornerns of the billboard, and used to remove this distortion.
Example Code:
Concepts:
- Homography
- Perspective
- Distortion
Relevant Examples:
Example Code
/**
* Certain image processing techniques, such as Optical Character Recognition (OCR), can be performed better if
* perspective distortion is remove from an image. In this example a homography is computed from the four corners
* of a bulletin board and the image is projected into a square image without perspective distortion. The
* {@link RemovePerspectiveDistortion} class is used to perform the distortion. The class is easy to understand
* if you know what a homography is, you should look at it!
*
* @author Peter Abeles
*/
public class ExampleRemovePerspectiveDistortion {
public static void main(String[] args) {
// load a color image
BufferedImage buffered = UtilImageIO.loadImage(UtilIO.pathExample("goals_and_stuff.jpg"));
Planar<GrayF32> input = ConvertBufferedImage.convertFromPlanar(buffered, null, true, GrayF32.class);
RemovePerspectiveDistortion<Planar<GrayF32>> removePerspective =
new RemovePerspectiveDistortion<>(400, 500, ImageType.pl(3, GrayF32.class));
// Specify the corners in the input image of the region.
// Order matters! top-left, top-right, bottom-right, bottom-left
if( !removePerspective.apply(input,
new Point2D_F64(267, 182), new Point2D_F64(542, 68),
new Point2D_F64(519, 736), new Point2D_F64(276, 570)) ){
throw new RuntimeException("Failed!?!?");
}
Planar<GrayF32> output = removePerspective.getOutput();
BufferedImage flat = ConvertBufferedImage.convertTo_F32(output,null,true);
ShowImages.showWindow(buffered,"Original Image",true);
ShowImages.showWindow(flat,"Without Perspective Distortion",true);
}
}