Difference between revisions of "Example Image Blur"

From BoofCV
Jump to navigationJump to search
m
m
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
<center>
<center>
<gallery heights=250 widths=250 perrow=4 >
<gallery heights=250 widths=250 perrow=4 >
file:Original_lena512.jpg|Input image
File:Kodim17_face_orig.jpg|Input image
file:Example_lena_gaussian_blur.jpg|Gaussian Filter
File:Kodim17_face_gaussian.jpg|Gaussian Filter
file:Example_lena_mean_blur.jpg|Mean Filter
File:Kodim17_face_mean.jpg|Mean Filter
file:Example_lena_median_blur.jpg|Median 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.27/examples/src/boofcv/examples/imageprocessing/ExampleImageBlur.java ExampleImageBlur.java]
* [https://github.com/lessthanoptimal/BoofCV/blob/v0.40/examples/src/main/java/boofcv/examples/imageprocessing/ExampleImageBlur.java ExampleImageBlur.java]


Concepts:
Concepts:
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. For repeat calls using the filter interface has some advantages, but the procedural can be
  * 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 buffered = UtilImageIO.loadImage(UtilIO.pathExample("sunflowers.jpg"));
BufferedImage buffered = UtilImageIO.loadImageNotNull(UtilIO.pathExample("standard/kodim17.jpg"));


panel.addImage(buffered,"Original");
panel.addImage(buffered, "Original");


Planar<GrayU8> input = ConvertBufferedImage.convertFrom(buffered, true, ImageType.pl(3, GrayU8.class));
Planar<GrayU8> input = ConvertBufferedImage.convertFrom(buffered, true, ImageType.pl(3, GrayU8.class));
Line 46: Line 45:


// Apply gaussian blur using a procedural interface
// Apply gaussian blur using a procedural interface
GBlurImageOps.gaussian(input,blurred,-1,radius,null);
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. This has the advantage of automatically
// 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<Planar<GrayU8>> filterMean = FactoryBlurFilter.mean(input.getImageType(),radius);
BlurFilter<Planar<GrayU8>> filterMean = FactoryBlurFilter.mean(input.getImageType(), radius);
filterMean.process(input, blurred);
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. Won't work if the type
// 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(input,blurred,radius);
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);
	}
}