Применение медианного и Винеровского фильтров

Применение медианного и Винеровского фильтров

Медианный фильтр - это нелинейная цифровая фильтрационная техника, часто используемая для удаления шума. Такое уменьшение шума является типичным предварительным этапом обработки для улучшения результатов последующей обработки. Фильтр Винера - это оптимальный линейный стационарный фильтр среднеквадратичной ошибки (MSE) для изображений, загрязненных аддитивным шумом и размытием. С помощью Aspose.PSD для Java API разработчики могут применить медианный фильтр для удаления шума с изображения и применить фильтр Гаусса Винера к изображениям. В этой статье показано, как можно применить медианный фильтр и фильтр Гаусса Винера к изображениям.

Применение медианного фильтра

Aspose.PSD предоставляет класс MedianFilterOptions для применения фильтра к RasterImage. Приведенный ниже фрагмент кода демонстрирует, как применить медианный фильтр к растровому изображению.

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());
}

Применение фильтра Гаусса Винера

Aspose.PSD предоставляет класс GaussWienerFilterOptions для применения фильтра к RasterImage. Приведенный ниже фрагмент кода демонстрирует, как применить фильтр Гаусса Винера к растровому изображению.

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());
}

Применение фильтра Гаусса Винера для цветного изображения

Aspose.PSD также предоставляет класс GaussWienerFilterOptions для цветных изображений. Приведенный ниже фрагмент кода демонстрирует, как применить фильтр Гаусса Винера к цветному изображению.

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());
}

Применение фильтра движения Винера

Aspose.PSD предоставляет класс MotionWienerFilterOptions для применения фильтра к RasterImage. Приведенный ниже фрагмент кода демонстрирует, как применить фильтр движения Винера к растровому изображению.

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());
}

Применение фильтра коррекции к изображению

Эта статья демонстрирует использование Aspose.PSD для Java для выполнения фильтров коррекции на изображении. API Aspose.PSD предоставляет эффективные и простые в использовании методы для достижения этой цели. Для фильтрации в Java Aspose.PSD были представлены классы BilateralSmoothingFilterOptions и SharpenFilterOptions. Класс BilateralSmoothingFilterOptions требует целого числа в качестве размера. Шаги выполнения изменения размера следующие:

  1. Загрузить изображение с помощью метода фабрики Load, предоставленного классом Image.
  2. Преобразовать изображение в RasterImage.
  3. Создать экземпляры классов BilateralSmoothingFilterOptions и SharpenFilterOptions.
  4. Вызвать метод RasterImage.Filter, указав прямоугольник в качестве границ изображения и экземпляр класса BilateralSmoothingFilterOptions.
  5. Вызвать метод RasterImage.Filter, указав прямоугольник в качестве границ изображения и экземпляр класса SharpenFilterOptions.
  6. Регулировать контраст
  7. Установить яркость
  8. Сохранить результаты.

В следующем фрагменте кода показано, как применить фильтр коррекции.

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");
}

Использование алгоритма порога Брэдли

Пороговая обработка изображения используется в графических приложениях. Цель порогования изображения - классифицировать пиксели как “темные” или “светлые”. API Aspose.PSD позволяет использовать пороговую обработку Брэдли при преобразовании изображений. В следующем фрагменте кода показано, как определить пороговое значение, а затем вызвать алгоритм порога Брэдли.

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());
}