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:
- Carregar uma imagem usando o método de fábrica Load exposto pela classe Image.
- Converter a imagem em RasterImage.
- Criar instâncias das classes BilateralSmoothingFilterOptions e SharpenFilterOptions.
- Chamar o método RasterImage.Filter enquanto especifica um retângulo como limites da imagem e uma instância da classe BilateralSmoothingFilterOptions.
- Chamar o método RasterImage.Filter enquanto especifica um retângulo como limites da imagem e uma instância da classe SharpenFilterOptions.
- Ajustar o contraste.
- Definir o brilho.
- 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()); | |
} |