Aplicando Filtros de Mediana e Wiener

Aplicando Filtros de Mediana e Wiener

O filtro de mediana é uma técnica de filtragem digital não linear, frequentemente utilizada para remover ruídos. Essa redução de ruído é um passo típico de pré-processamento para melhorar os resultados do processamento posterior. O filtro de Wiener é o filtro linear estacionário ótimo de erro quadrático médio (MSE) para imagens degradadas por ruído aditivo e desfoque. Usando a API Aspose.PSD para Java, os desenvolvedores podem aplicar o filtro de mediana para remover o ruído da imagem e podem aplicar o filtro Gaussiano de Wiener nas imagens. Este artigo demonstra como os filtros de mediana e de Wiener Gaussiano podem ser aplicados às imagens.

Aplicando Filtro de Mediana

O Aspose.PSD fornece a classe MedianFilterOptions para aplicar o filtro em uma RasterImage. O trecho de código fornecido abaixo demonstra como aplicar o filtro de mediana em uma imagem raster.

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 Gaussiano

O Aspose.PSD fornece a classe GaussWienerFilterOptions para aplicar o filtro em uma RasterImage. O trecho de código fornecido abaixo demonstra como aplicar o filtro de Wiener Gaussiano em uma imagem raster.

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 Gaussiano para Imagem Colorida

O Aspose.PSD fornece GaussWienerFilterOptions também para imagens coloridas. O trecho de código fornecido abaixo demonstra como aplicar o filtro de Wiener Gaussiano em uma imagem colorida.

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 Wiener de Movimento

O Aspose.PSD fornece a classe MotionWienerFilterOptions para aplicar o filtro em uma RasterImage. O trecho de código fornecido abaixo demonstra como aplicar o filtro de Wiener de movimento em uma imagem raster.

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 Filtro de Correção em uma Imagem

Este artigo demonstra o uso do Aspose.PSD para Java para aplicar filtros de correção em uma imagem. As APIs do Aspose.PSD expuseram métodos eficientes e fáceis de usar para alcançar esse objetivo. O Aspose.PSD para Java expôs as classes BilateralSmoothingFilterOptions e SharpenFilterOptions para filtragem. A classe BilateralSmoothingFilterOptions precisa de um inteiro como tamanho. Os passos para realizar o Redimensionamento são simples como abaixo:

  1. Carregar uma imagem usando o método de fábrica Load exposto pela classe Image.
  2. Converter a imagem em RasterImage.
  3. Criar instâncias das classes BilateralSmoothingFilterOptions e SharpenFilterOptions.
  4. Chamar o método RasterImage.Filter enquanto especifica um retângulo como limites da imagem e uma instância da classe BilateralSmoothingFilterOptions.
  5. Chamar o método RasterImage.Filter enquanto especifica um retângulo como limites da imagem e uma instância da classe SharpenFilterOptions.
  6. Ajustar o contraste.
  7. Definir o brilho.
  8. Salvar os resultados.

O trecho de código a seguir mostra como aplicar o filtro de correção.

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 o Algoritmo de Limiar de Bradley

A limiarização de imagem é usada em aplicações gráficas. O objetivo da limiarização de uma imagem é classificar pixels como “escuros” ou “claros”. A API Aspose.PSD permite que você utilize a limiarização de Bradley ao converter imagens. O trecho de código a seguir mostra como definir o valor do limiar e, em seguida, invocar o algoritmo de limiar 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());
}