El desenfoque es una operación de procesamiento de imágenes simple y de uso frecuente. También se le llama Suavizado. El suavizado de una imagen elimina los píxeles ruidosos de la imagen y aplica un filtro de paso bajo a una imagen. Un filtro de paso bajo significa eliminar el ruido de una imagen sin dañar la mayor parte de la imagen. El tipo de filtro más común es el lineal. En un filtro lineal, la suma ponderada del valor de los píxeles de entrada determina el valor de los píxeles de salida.
Requisito previo:
Clases requeridas para realizar la operación:
- Para leer y escribir un archivo de imagen tenemos que importar la clase File [ import java.io.File; ]. Esta clase representa nombres de rutas de archivos y directorios en general.
- Para manejar errores usamos la clase IOException [ import java.io.IOException; ]
- Para contener la imagen creamos el objeto BufferedImage para eso usamos la clase BufferedImage [ import java.awt.image.BufferedImage; ]. Este objeto se utiliza para almacenar una imagen en la RAM.
- Para realizar la operación de lectura y escritura de la imagen, importaremos la clase ImageIO [import javax.imageio.ImageIO;]. Esta clase tiene métodos estáticos para leer y escribir una imagen.
Acercarse:
- Suavizar cada píxel de la imagen tomando como array 2D
- Usando algunos métodos incorporados de la clase BufferedImage y Color c
Implementación:
Ejemplo
Java
// Java Program to Blur Image using Smoothing // Importing required packages import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; // Main class public class GFG { // Main driver method public static void main(String[] args) throws IOException, InterruptedException { Color color[]; // Creating a File class object to // read the image in the form of file from directory // Directory path is passed as an argument File fin = new File("D:/test/Image.jpeg"); // Now object of BufferedImage class is created to // convert file into image form BufferedImage input = ImageIO.read(fin); // Again creating an object of BufferedImage to // create output Image BufferedImage output = new BufferedImage( input.getWidth(), input.getHeight(), BufferedImage.TYPE_INT_RGB); // Setting dimensions for the image to be processed int i = 0; int max = 400, rad = 10; int a1 = 0, r1 = 0, g1 = 0, b1 = 0; color = new Color[max]; // Now this core section of code is responsible for // blurring of an image int x = 1, y = 1, x1, y1, ex = 5, d = 0; // Running nested for loops for each pixel // and blurring it for (x = rad; x < input.getHeight() - rad; x++) { for (y = rad; y < input.getWidth() - rad; y++) { for (x1 = x - rad; x1 < x + rad; x1++) { for (y1 = y - rad; y1 < y + rad; y1++) { color[i++] = new Color( input.getRGB(y1, x1)); } } // Smoothing colors of image i = 0; for (d = 0; d < max; d++) { a1 = a1 + color[d].getAlpha(); } a1 = a1 / (max); for (d = 0; d < max; d++) { r1 = r1 + color[d].getRed(); } r1 = r1 / (max); for (d = 0; d < max; d++) { g1 = g1 + color[d].getGreen(); } g1 = g1 / (max); for (d = 0; d < max; d++) { b1 = b1 + color[d].getBlue(); } b1 = b1 / (max); int sum1 = (a1 << 24) + (r1 << 16) + (g1 << 8) + b1; output.setRGB(y, x, (int)(sum1)); } } // Writing the blurred image on the disc where // directory is passed as an argument ImageIO.write( output, "jpeg", new File("D:/test/BlurredImage.jpeg")); // Message to be displayed in the console when // program is successfully executed System.out.println("Image blurred successfully !"); } }
Salida: En la consola
Java Program to Blur Image using Smoothing
Después de ejecutar el programa, la consola mostrará un mensaje que indica que la imagen se desdibujó correctamente. Este código no se ejecutará en un IDE en línea, ya que necesita una imagen en el disco. Se representa pictóricamente en el formato pictórico a continuación de la siguiente manera: