Difference between revisions of "Example Image Blur"
From BoofCV
Jump to navigationJump to searchm  | 
				m  | 
				||
| (9 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
<center>  | <center>  | ||
<gallery   | <gallery heights=250 widths=250 perrow=4 >  | ||
File:Kodim17_face_orig.jpg|Input image  | |||
File:Kodim17_face_gaussian.jpg|Gaussian Filter  | |||
File:Kodim17_face_mean.jpg|Mean Filter  | |||
File:Kodim17_face_median.jpg|Median Filter  | |||
</gallery>  | </gallery>  | ||
</center>  | </center>  | ||
| Line 11: | Line 11: | ||
Example Code:  | Example Code:  | ||
* [https://github.com/lessthanoptimal/BoofCV/blob/v0.  | * [https://github.com/lessthanoptimal/BoofCV/blob/v0.40/examples/src/main/java/boofcv/examples/imageprocessing/ExampleImageBlur.java ExampleImageBlur.java]  | ||
Concepts:  | Concepts:  | ||
* Image Processing  | * Image Processing  | ||
*   | * Filtering  | ||
Related Examples:  | Related Examples:  | ||
| Line 26: | Line 26: | ||
/**  | /**  | ||
  * This example shows you can can apply different standard image blur filters to an input image using different  |   * This example shows you can can apply different standard image blur filters to an input image using different  | ||
  * interface.   |   * interface. For repeat calls using the filter interface has some advantages, but the procedural can be  | ||
  * simple to code up.  |   * simple to code up.  | ||
  *  |   *  | ||
| Line 32: | Line 32: | ||
  */  |   */  | ||
public class ExampleImageBlur {  | public class ExampleImageBlur {  | ||
	public static void main( String[] args ) {  | |||
	public static void main(String[] args) {  | |||
		ListDisplayPanel panel = new ListDisplayPanel();  | 		ListDisplayPanel panel = new ListDisplayPanel();  | ||
		BufferedImage   | 		BufferedImage buffered = UtilImageIO.loadImageNotNull(UtilIO.pathExample("standard/kodim17.jpg"));  | ||
		panel.addImage(  | 		panel.addImage(buffered, "Original");  | ||
		GrayU8   | 		Planar<GrayU8> input = ConvertBufferedImage.convertFrom(buffered, true, ImageType.pl(3, GrayU8.class));  | ||
		GrayU8 blurred =   | 		Planar<GrayU8> blurred = input.createSameShape();  | ||
		// size of the blur kernel. square region with a width of radius*2 + 1  | 		// size of the blur kernel. square region with a width of radius*2 + 1  | ||
| Line 46: | Line 45: | ||
		// Apply gaussian blur using a procedural interface  | 		// Apply gaussian blur using a procedural interface  | ||
		GBlurImageOps.gaussian(  | 		GBlurImageOps.gaussian(input, blurred, -1, radius, null);  | ||
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true),"Gaussian");  | 		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Gaussian");  | ||
		// Apply a mean filter using an object oriented interface.   | 		// Apply a mean filter using an object oriented interface. This has the advantage of automatically  | ||
		// recycling memory used in intermediate steps  | 		// recycling memory used in intermediate steps  | ||
		BlurFilter<GrayU8> filterMean = FactoryBlurFilter.mean(  | 		BlurFilter<Planar<GrayU8>> filterMean = FactoryBlurFilter.mean(input.getImageType(), radius);  | ||
		filterMean.process(  | 		filterMean.process(input, blurred);  | ||
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true),"Mean");  | 		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Mean");  | ||
		// Apply a median filter using image type specific procedural interface.   | 		// Apply a median filter using image type specific procedural interface. Won't work if the type  | ||
		// isn't known at compile time  | 		// isn't known at compile time  | ||
		BlurImageOps.median(  | 		BlurImageOps.median(input, blurred, radius, radius, null);  | ||
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true),"Median");  | 		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Median");  | ||
		ShowImages.showWindow(panel,"Image Blur Examples",true);  | 		ShowImages.showWindow(panel, "Image Blur Examples", true);  | ||
	}  | 	}  | ||
}  | }  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
Latest revision as of 15:00, 17 January 2022
Applying different types of image blur is a common way to "remove" noise from images and make later steps more effective. This example shows you how to apply different image blur operators using different interfaces.
Example Code:
Concepts:
- Image Processing
 - Filtering
 
Related Examples:
Example Code
/**
 * This example shows you can can apply different standard image blur filters to an input image using different
 * interface. For repeat calls using the filter interface has some advantages, but the procedural can be
 * simple to code up.
 *
 * @author Peter Abeles
 */
public class ExampleImageBlur {
	public static void main( String[] args ) {
		ListDisplayPanel panel = new ListDisplayPanel();
		BufferedImage buffered = UtilImageIO.loadImageNotNull(UtilIO.pathExample("standard/kodim17.jpg"));
		panel.addImage(buffered, "Original");
		Planar<GrayU8> input = ConvertBufferedImage.convertFrom(buffered, true, ImageType.pl(3, GrayU8.class));
		Planar<GrayU8> blurred = input.createSameShape();
		// size of the blur kernel. square region with a width of radius*2 + 1
		int radius = 8;
		// Apply gaussian blur using a procedural interface
		GBlurImageOps.gaussian(input, blurred, -1, radius, null);
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Gaussian");
		// Apply a mean filter using an object oriented interface. This has the advantage of automatically
		// recycling memory used in intermediate steps
		BlurFilter<Planar<GrayU8>> filterMean = FactoryBlurFilter.mean(input.getImageType(), radius);
		filterMean.process(input, blurred);
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Mean");
		// Apply a median filter using image type specific procedural interface. Won't work if the type
		// isn't known at compile time
		BlurImageOps.median(input, blurred, radius, radius, null);
		panel.addImage(ConvertBufferedImage.convertTo(blurred, null, true), "Median");
		ShowImages.showWindow(panel, "Image Blur Examples", true);
	}
}