AutoMaskingArgs

Inheritance: java.lang.Object

All Implemented Interfaces: com.aspose.imaging.masking.options.IMaskingArgs

public class AutoMaskingArgs implements IMaskingArgs

Представляет аргументы, указанные для автоматических методов маскирования

Конструкторы

КонструкторОписание
AutoMaskingArgs()

Методы

МетодОписание
getNumberOfObjects()Получает количество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).
setNumberOfObjects(int value)Устанавливает количество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).
getObjectsRectangles()Получает прямоугольники объектов, принадлежащие разделённым объектам (необязательно).
setObjectsRectangles(Rectangle[] value)Устанавливает прямоугольники объектов, принадлежащие разделённым объектам (необязательно).
getObjectsPoints()Получает точки, принадлежащие разделённым объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения.
setObjectsPoints(Point[][] value)Устанавливает точки, принадлежащие разделённым объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения.
getOrphanedPoints()Получает точки, которые больше не принадлежат ни одному объекту (необязательно).
setOrphanedPoints(Point[] value)Устанавливает точки, которые больше не принадлежат ни одному объекту (необязательно).
getPrecision()Получает точность метода сегментации (необязательно).
setPrecision(double value)Устанавливает точность метода сегментации (необязательно).
getMaxIterationNumber()Получает максимальное количество итераций.
setMaxIterationNumber(int value)Устанавливает максимальное количество итераций.

Example: This example shows how to decompose a raster image into multiple images using image masking and the K-means segmentation algorithm.

Этот пример показывает, как разложить растровое изображение на несколько изображений с использованием маскирования изображения и алгоритма сегментации K-средних. Маскирование изображения — это техника обработки изображений, используемая для разделения фона и объектов на переднем плане.

String dir = "c:\\temp\\";

com.aspose.imaging.RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(dir + "Blue hills.png");
try {
    com.aspose.imaging.masking.options.AutoMaskingArgs args = new com.aspose.imaging.masking.options.AutoMaskingArgs();

    // Установите количество кластеров (разделённых объектов). Значение по умолчанию — 2: объект переднего плана и фон.
    args.setNumberOfObjects(3);

    // Установите максимальное количество итераций.
    args.setMaxIterationNumber(50);

    // Установите точность метода сегментации (необязательно)
    args.setPrecision(1);

    // Каждый кластер (сегмент) будет сохранён в отдельный PNG‑файл.
    com.aspose.imaging.imageoptions.PngOptions exportOptions = new com.aspose.imaging.imageoptions.PngOptions();
    exportOptions.setColorType(com.aspose.imaging.fileformats.png.PngColorType.TruecolorWithAlpha);
    exportOptions.setSource(new com.aspose.imaging.sources.StreamSource(new java.io.ByteArrayInputStream(new byte[0])));

    com.aspose.imaging.masking.options.MaskingOptions maskingOptions = new com.aspose.imaging.masking.options.MaskingOptions();

    // Используйте кластеризацию K‑средних.
    // Кластеризация K‑средних позволяет разделить изображение на несколько независимых кластеров (сегментов).
    maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.KMeans);
    maskingOptions.setDecompose(true);
    maskingOptions.setArgs(args);

    // Цвет фона будет оранжевым.
    maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
    maskingOptions.setExportOptions(exportOptions);

    // Создайте экземпляр класса ImageMasking.
    com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);

    // Разделите исходное изображение на несколько кластеров (сегментов).
    com.aspose.imaging.masking.result.MaskingResult maskingResults = masking.decompose(maskingOptions);
    try
    {
        // Получите изображения из результата маскирования и сохраните их в PNG.
        for (int i = 0; i < maskingResults.getLength(); i++) {
            final IMaskingLayer resultsItem = maskingResults.get_Item(i);
            String outputFileName = String.format("Blue hills.Segment%s.png", resultsItem.getObjectNumber());
            Image resultImage = resultsItem.getImage();
            try {
                resultImage.save(dir + outputFileName);
            } finally {
                resultImage.close();
            }
        }
    }
    finally
    {
        maskingResults.close();
    }
} finally {
    image.close();
}

Example: This example shows how to specify suggestions for image masking algorithm to improve precision of segmentation (clustering) method.

Этот пример показывает, как задать предложения для алгоритма маскирования изображения с целью повышения точности метода сегментации (кластеризации). Маскирование изображения — это техника обработки изображений, используемая для разделения фона и объектов на переднем плане.

String dir = "c:\\temp\\";

com.aspose.imaging.RasterImage image = (com.aspose.imaging.RasterImage) com.aspose.imaging.Image.load(dir + "Gorilla.bmp");
try {
    com.aspose.imaging.masking.options.AutoMaskingArgs args = new com.aspose.imaging.masking.options.AutoMaskingArgs();

    // Предложение №1.
    // Визуально проанализируйте изображение и задайте область интереса. Результат сегментации будет включать только объекты, полностью находящиеся внутри этой области.
    args.setObjectsRectangles(new com.aspose.imaging.Rectangle[]
            {
                    new com.aspose.imaging.Rectangle(86, 6, 270, 364),
            });

    // Предложение №2.
    // Визуально проанализировать изображение и установить точки, принадлежащие отдельным объектам.
    args.setObjectsPoints(new com.aspose.imaging.Point[][]
            {
                    new com.aspose.imaging.Point[]{new com.aspose.imaging.Point(103, 326)},
                    new com.aspose.imaging.Point[]{new com.aspose.imaging.Point(280, 43)},
                    new com.aspose.imaging.Point[]{new com.aspose.imaging.Point(319, 86)},
            });

    // Каждый кластер (сегмент) будет сохранён в отдельный PNG‑файл.
    com.aspose.imaging.imageoptions.PngOptions exportOptions = new com.aspose.imaging.imageoptions.PngOptions();
    exportOptions.setColorType(com.aspose.imaging.fileformats.png.PngColorType.TruecolorWithAlpha);
    exportOptions.setSource(new com.aspose.imaging.sources.StreamSource());

    com.aspose.imaging.masking.options.MaskingOptions maskingOptions = new com.aspose.imaging.masking.options.MaskingOptions();

    // Использовать кластеризацию GraphCut.
    maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.GraphCut);
    maskingOptions.setDecompose(false);
    maskingOptions.setArgs(args);

    // Цвет фона будет оранжевым.
    maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
    maskingOptions.setExportOptions(exportOptions);

    // Создайте экземпляр класса ImageMasking.
    com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);

    // Разделите исходное изображение на несколько кластеров (сегментов).
    com.aspose.imaging.masking.result.MaskingResult maskingResults = masking.decompose(maskingOptions);

    try
    {
        // Получите изображения из результата маскирования и сохраните их в PNG.
        for (int i = 0; i < maskingResults.getLength(); i++) {
            String outputFileName = String.format("Gorilla.Segment%s.png", maskingResults.get_Item(i).getObjectNumber());
            Image resultImage = maskingResults.get_Item(i).getImage();
            try {
                resultImage.save(dir + outputFileName);
            } finally {
                resultImage.close();
            }
        }
    }
    finally
    {
        maskingResults.close();
    }
} finally {
    image.close();
}

Example: Using a segment mask to speed up the segmentation process

// Параметры экспорта маскирования
com.aspose.imaging.imageoptions.PngOptions exportOptions = new com.aspose.imaging.imageoptions.PngOptions();
exportOptions.setColorType(com.aspose.imaging.fileformats.png.PngColorType.TruecolorWithAlpha);
exportOptions.setSource(new com.aspose.imaging.sources.StreamSource());

com.aspose.imaging.masking.options.MaskingOptions maskingOptions = new com.aspose.imaging.masking.options.MaskingOptions();

// Использовать кластеризацию GraphCut.
maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.GraphCut);
maskingOptions.setDecompose(false);
maskingOptions.setArgs(new com.aspose.imaging.masking.options.AutoMaskingArgs());

// Фоновый цвет будет прозрачным.
maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getTransparent());
maskingOptions.setExportOptions(exportOptions);

String dir = "c:\\temp\\";
com.aspose.imaging.RasterImage image = (com.aspose.imaging.RasterImage)com.aspose.imaging.Image.load(dir + "BigImage.jpg");
try
{
    com.aspose.imaging.Size imageSize = image.getSize();

    // Уменьшение размера изображения для ускорения процесса сегментации
    image.resizeHeightProportionally(600, com.aspose.imaging.ResizeType.HighQualityResample);

    // Создайте экземпляр класса ImageMasking.
    com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);

    // Разделите исходное изображение на несколько кластеров (сегментов).
    com.aspose.imaging.masking.result.MaskingResult maskingResult = masking.decompose(maskingOptions);
    try
    {
        // Получение маски переднего плана
        com.aspose.imaging.RasterImage foregroundMask = maskingResult.get_Item(1).getMask();
        try
        {
            // Увеличьте размер маски до размера оригинального изображения
            foregroundMask.resize(imageSize.getWidth(), imageSize.getHeight(), com.aspose.imaging.ResizeType.NearestNeighbourResample);

            // Применение маски к оригинальному изображению для получения сегмента переднего плана
            com.aspose.imaging.RasterImage originImage = (com.aspose.imaging.RasterImage)com.aspose.imaging.Image.load(dir + "BigImage.jpg");
            try
            {
                com.aspose.imaging.masking.ImageMasking.applyMask(originImage, foregroundMask, maskingOptions);
                originImage.save(dir + "BigImage_foreground.png", exportOptions);
            }
            finally
            {
                originImage.close();
            }
        }
        finally
        {
            foregroundMask.close();
        }
    }
    finally
    {
        maskingResult.close();
    }
}
finally
{
    image.close();
}

Example: Saving the masking session to a file for long sessions, as well as for the possibility of resuming the session in another environment.

String dir = "c:\\temp\\";
String sessionBackupFile = dir + "session.bak";

// Параметры экспорта маскирования
com.aspose.imaging.imageoptions.PngOptions exportOptions = new com.aspose.imaging.imageoptions.PngOptions();
exportOptions.setColorType(com.aspose.imaging.fileformats.png.PngColorType.TruecolorWithAlpha);
exportOptions.setSource(new com.aspose.imaging.sources.StreamSource());

com.aspose.imaging.masking.options.MaskingOptions maskingOptions = new com.aspose.imaging.masking.options.MaskingOptions();

// Использовать кластеризацию GraphCut.
maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.GraphCut);
maskingOptions.setDecompose(false);
maskingOptions.setArgs(new com.aspose.imaging.masking.options.AutoMaskingArgs());

// Цвет фона будет оранжевым.
maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
maskingOptions.setExportOptions(exportOptions);

// Запуск сеанса в первый раз и сохранение в файл
com.aspose.imaging.RasterImage image = (com.aspose.imaging.RasterImage)com.aspose.imaging.Image.load(dir + "Gorilla.bmp");
try
{
    // Создайте экземпляр класса ImageMasking.
    com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);

    com.aspose.imaging.masking.IMaskingSession session = masking.createSession(maskingOptions);
    try
    {
        com.aspose.imaging.masking.result.MaskingResult maskingResult = session.decompose();
        try
        {
            com.aspose.imaging.RasterImage segmentImage = maskingResult.get_Item(1).getImage();
            try
            {
                segmentImage.save(dir + "step1.png");
            }
            finally
            {
                segmentImage.close();
            }
        }
        finally
        {
            maskingResult.close();
        }

        session.save(sessionBackupFile);
    }
    finally
    {
        session.dispose();
    }
}
finally
{
    image.close();
}

// Возобновление сеанса маскирования из файла
com.aspose.imaging.RasterImage image2 = (com.aspose.imaging.RasterImage)com.aspose.imaging.Image.load(dir + "Gorilla.bmp");
try
{
    // Создайте экземпляр класса ImageMasking.
    com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image2);

    com.aspose.imaging.masking.IMaskingSession session = masking.loadSession(sessionBackupFile);
    try
    {
        com.aspose.imaging.masking.options.AutoMaskingArgs args = new com.aspose.imaging.masking.options.AutoMaskingArgs();

        // Визуально проанализировать изображение и установить точки, принадлежащие отдельным объектам.
        args.setObjectsPoints(new Point[][]
                {
                        new Point[]
                                {
                                        new Point(0, 0), new Point(0, 1), new Point(1, 0),
                                        new Point(1, 1), new Point(2, 0), new Point(2, 1),
                                        new Point(3, 0), new Point(3, 1)
                                },
                });
        com.aspose.imaging.masking.result.MaskingResult maskingResult = session.improveDecomposition(args);
        try
        {
            // Явная передача параметров экспорта, поскольку они не сериализуемы
            maskingResult.MaskingOptions.setExportOptions(exportOptions);

            com.aspose.imaging.RasterImage segmentImage = maskingResult.get_Item(1).getImage();
            try
            {
                segmentImage.save(dir + "step2.png");
            }
            finally
            {
                segmentImage.close();
            }
        }
        finally
        {
            maskingResult.close();
        }
    }
    finally
    {
        session.dispose();
    }
}
finally
{
    image2.close();
}

AutoMaskingArgs()

public AutoMaskingArgs()

getNumberOfObjects()

public final int getNumberOfObjects()

Получает количество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).

Значение: количество объектов.

Returns: int — количество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).

setNumberOfObjects(int value)

public final void setNumberOfObjects(int value)

Устанавливает количество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).

Значение: количество объектов.

Parameters:

ПараметрТипОписание
valueintколичество объектов, на которое следует разделить исходное изображение (необязательно), значение по умолчанию — 2 (объект и фон).

getObjectsRectangles()

public final Rectangle[] getObjectsRectangles()

Получает прямоугольники объектов, принадлежащие разделённым объектам (необязательно). Этот параметр используется для повышения точности метода сегментации.

Значение: прямоугольники объектов.

Returns: com.aspose.imaging.Rectangle[] — прямоугольники объектов, принадлежащие разделённым объектам (необязательно).

setObjectsRectangles(Rectangle[] value)

public final void setObjectsRectangles(Rectangle[] value)

Устанавливает прямоугольники объектов, принадлежащие разделённым объектам (необязательно). Этот параметр используется для повышения точности метода сегментации.

Значение: прямоугольники объектов.

Parameters:

ПараметрТипОписание
valueRectangle[]прямоугольники объектов, принадлежащие разделённым объектам (необязательно).

getObjectsPoints()

public final Point[][] getObjectsPoints()

Получает точки, принадлежащие разделённым объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения. Этот параметр используется для повышения точности метода сегментации.

Значение: точки объектов.

Returns: com.aspose.imaging.Point[][] — точки, принадлежащие разделённым объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения.

setObjectsPoints(Point[][] value)

public final void setObjectsPoints(Point[][] value)

Устанавливает точки, принадлежащие отдельным объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения. Этот параметр используется для повышения точности метода сегментации.

Значение: точки объектов.

Parameters:

ПараметрТипОписание
valuePoint[]точки, принадлежащие отдельным объектам (необязательно) NumberOfObjects координаты, принадлежащие NumberOfObjects объектам исходного изображения.

getOrphanedPoints()

public final Point[] getOrphanedPoints()

Получает точки, которые больше не принадлежат ни одному объекту (необязательно). Этот параметр используется только в случае повторной сегментации.

Значение: Оси́роченные точки.

Returns: com.aspose.imaging.Point[] — точки, которые больше не принадлежат ни одному объекту (необязательно).

setOrphanedPoints(Point[] value)

public final void setOrphanedPoints(Point[] value)

Устанавливает точки, которые больше не принадлежат ни одному объекту (необязательно). Этот параметр используется только в случае повторной сегментации.

Значение: Оси́роченные точки.

Parameters:

ПараметрТипОписание
valuePoint[]точки, которые больше не принадлежат ни одному объекту (необязательно).

getPrecision()

public final double getPrecision()

Получает точность метода сегментации (необязательно).

Значение: Точность метода сегментации (необязательно).

Returns: double — точность метода сегментации (необязательно).

setPrecision(double value)

public final void setPrecision(double value)

Устанавливает точность метода сегментации (необязательно).

Значение: Точность метода сегментации (необязательно).

Parameters:

ПараметрТипОписание
valuedoubleточность метода сегментации (необязательно).

getMaxIterationNumber()

public final int getMaxIterationNumber()

Получает максимальное количество итераций.

Значение: Максимальное максимальное количество итераций.

Returns: int — максимальное количество итераций.

setMaxIterationNumber(int value)

public final void setMaxIterationNumber(int value)

Устанавливает максимальное количество итераций.

Значение: Максимальное максимальное количество итераций.

Parameters:

ПараметрТипОписание
valueintмаксимальное количество итераций.