Aplicación de Filtros de Mediana y Wiener

Aplicando Filtros de Mediana y Wiener

El filtro de mediana es una técnica de filtrado digital no lineal, a menudo utilizado para eliminar ruido. Esta reducción de ruido es un paso predefinido típico para mejorar los resultados de procesamientos posteriores. El filtro de Wiener es el filtro lineal estacionario óptimo de error cuadrático medio (MSE) para imágenes degradadas por ruido aditivo y desenfoque. Utilizando Aspose.PSD para Java API, los desarrolladores pueden aplicar el filtro de mediana para reducir el ruido de la imagen y aplicar el filtro de Wiener de Gauss en imágenes. Este artículo demuestra cómo se pueden aplicar los filtros de mediana y Wiener de Gauss a imágenes.

Aplicando Filtro de Mediana

Aspose.PSD proporciona la clase MedianFilterOptions para aplicar un filtro en una RasterImage. El fragmento de código proporcionado a continuación demuestra cómo aplicar un filtro de mediana a una imagen de ráster.

String dataDir = Utils.getDataDir(ApplyMedianAndWienerFilters.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "median_test_denoise_out.gif";
try (Image image = Image.load(sourceFile);
// Cast the image into RasterImage
RasterImage rasterImage = (RasterImage) image) {
if (rasterImage == null) {
return;
}
// Create an instance of MedianFilterOptions class and set the size, Apply MedianFilterOptions filter to RasterImage object and Save the resultant image
MedianFilterOptions options = new MedianFilterOptions(4);
rasterImage.filter(image.getBounds(), options);
image.save(destName, new GifOptions());
}

Aplicando Filtro de Wiener de Gauss

Aspose.PSD proporciona la clase GaussWienerFilterOptions para aplicar un filtro en una RasterImage. El fragmento de código proporcionado a continuación demuestra cómo aplicar el filtro de Wiener de Gauss a una imagen de ráster.

String dataDir = Utils.getDataDir(ApplyGausWienerFilters.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "gauss_wiener_out.gif";
try (Image image = Image.load(sourceFile);
RasterImage rasterImage = (RasterImage) image) {
if (rasterImage == null) {
return;
}
// Create an instance of GaussWienerFilterOptions class and set the radius size and smooth value.
GaussWienerFilterOptions options = new GaussWienerFilterOptions(12, 3);
options.setGrayscale(true);
// Apply MedianFilterOptions filter to RasterImage object and Save the resultant image
rasterImage.filter(image.getBounds(), options);
image.save(destName, new GifOptions());
}

Aplicando Filtro de Wiener de Gauss para Imagen a Color

Aspose.PSD proporciona GaussWienerFilterOptions para imágenes a color también. El fragmento de código proporcionado a continuación demuestra cómo aplicar el filtro de Wiener de Gauss a una imagen a color.

String dataDir = Utils.getDataDir(ApplyGausWienerFiltersForColorImage.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "gauss_wiener_color_out.gif";
try (Image image = Image.load(sourceFile);
// Cast the image into RasterImage
RasterImage rasterImage = (RasterImage) image) {
if (rasterImage == null) {
return;
}
// Create an instance of GaussWienerFilterOptions class and set the radius size and smooth value.
GaussWienerFilterOptions options = new GaussWienerFilterOptions(5, 1.5);
options.setBrightness(1);
// Apply MedianFilterOptions filter to RasterImage object and Save the resultant image
rasterImage.filter(image.getBounds(), options);
image.save(destName, new GifOptions());
}

Aplicando Filtro de Wiener de Movimiento

Aspose.PSD proporciona la clase MotionWienerFilterOptions para aplicar un filtro en una RasterImage. El fragmento de código proporcionado a continuación muestra cómo aplicar el filtro de Wiener de movimiento a una imagen de ráster.

String dataDir = Utils.getDataDir(ApplyMotionWienerFilters.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "motion_filter_out.gif";
try (Image image = Image.load(sourceFile);
// Cast the image into RasterImage
RasterImage rasterImage = (RasterImage) image) {
if (rasterImage == null) {
return;
}
// Create an instance of MotionWienerFilterOptions class and set the length, smooth value and angle.
MotionWienerFilterOptions options = new MotionWienerFilterOptions(50, 9, 90);
options.setGrayscale(true);
// Apply MedianFilterOptions filter to RasterImage object and Save the resultant image
rasterImage.filter(image.getBounds(), options);
image.save(destName, new GifOptions());
}

Aplicar Filtros de Corrección en una Imagen

Este artículo demuestra el uso de Aspose.PSD para Java para realizar filtros de corrección en una imagen. Las API de Aspose.PSD han expuesto métodos eficientes y fáciles de usar para lograr este objetivo. Aspose.PSD para Java ha expuesto las clases BilateralSmoothingFilterOptions y SharpenFilterOptions para la filtración. La clase BilateralSmoothingFilterOptions necesita un entero como tamaño. Los pasos para realizar el redimensionamiento son tan simples como los siguientes:

  1. Cargar una imagen utilizando el método de fábrica Load expuesto por la clase Imagen.
  2. Convertir la imagen en RasterImage.
  3. Crear instancias de las clases BilateralSmoothingFilterOptions y SharpenFilterOptions.
  4. Llamar al método RasterImage.Filter especificando el rectángulo como los límites de la imagen e instancia de la clase BilateralSmoothingFilterOptions.
  5. Llamar al método RasterImage.Filter especificando el rectángulo como los límites de la imagen e instancia de la clase SharpenFilterOptions.
  6. Ajustar el contraste
  7. Establecer el brillo
  8. Guardar los resultados.

El siguiente fragmento de código te muestra cómo aplicar el filtro de corrección.

try (Image image = Image.load(dataDir + "sample.psd");
// Convert the image into RasterImage.
RasterImage rasterImage = (RasterImage) image) {
if (rasterImage == null) {
return;
}
// Get Bounds[rectangle] of image.
Rectangle rect = image.getBounds();
// Create an instance of BilateralSmoothingFilterOptions class with size
// parameter.
BilateralSmoothingFilterOptions bilateralOptions = new BilateralSmoothingFilterOptions(3);
// Create an instance of SharpenFilterOptions class.
SharpenFilterOptions sharpenOptions = new SharpenFilterOptions();
// Supply the filters to raster image.
rasterImage.filter(rect, bilateralOptions);
rasterImage.filter(rect, sharpenOptions);
// Adjust the contrast accordingly.
rasterImage.adjustContrast(-10);
// Set brightness using Binarize Bradley
rasterImage.binarizeBradley(80);
// Save the results to output path.
rasterImage.save(dataDir + "a1_out.jpg");
}

Utilizar el algoritmo de umbral de Bradley

La segmentación de imagen se utiliza en aplicaciones de gráficos. El objetivo de segmentar una imagen es clasificar los píxeles como “oscuros” o “claros”. Aspose.PSD API te permite usar la segmentación de Bradley al convertir imágenes. El siguiente fragmento de código te muestra cómo definir el valor de umbral y luego invocar el algoritmo de umbral de Bradley.

String dataDir = Utils.getDataDir(Bradleythreshold.class) + "Conversion/";
String sourceFile = dataDir + "sample.psd";
String destName = dataDir + "binarized_out.png";
// Load an image
try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
// Define threshold value, Call BinarizeBradley method and pass the threshold value as parameter and Save the output image
double threshold = 0.15;
image.binarizeBradley(threshold);
image.save(destName, new PngOptions());
}