Packages

 

com.aspose.imaging.masking.result

Interface IMaskingLayer



  • public interface IMaskingLayer

    Masking layer

    Code example:

    This example shows how to decompose a raster image into multiple images using image masking and the K-means segmentation algorithm. Image masking is an image processing technique that is used to split the background from the foreground image objects.


    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();
    
        // Set the number of clusters (separated objects). The default value is 2, the foreground object and the background.
        args.setNumberOfObjects(3);
    
        // Set the maximum number of iterations.
        args.setMaxIterationNumber(50);
    
        // Set the precision of segmentation method (optional)
        args.setPrecision(1);
    
        // Each cluster (segment) will be stored to a separate PNG file.
        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();
    
        // Use K-means clustering.
        // K-means clustering allows to split image into several independent clusters (segments).
        maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.KMeans);
        maskingOptions.setDecompose(true);
        maskingOptions.setArgs(args);
    
        // The backgroung color will be orange.
        maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
        maskingOptions.setExportOptions(exportOptions);
    
        // Create an instance of the ImageMasking class.
        com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);
    
        // Divide the source image into several clusters (segments).
        com.aspose.imaging.masking.result.MaskingResult maskingResults = masking.decompose(maskingOptions);
        try
        {
            // Obtain images from masking result and save them to 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();
    }
    

    • Method Detail

      • getObjectNumber

        int getObjectNumber()

        Gets the object number.

        Code example:

        This example shows how to decompose a raster image into multiple images using image masking and the K-means segmentation algorithm. Image masking is an image processing technique that is used to split the background from the foreground image objects.


        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();
        
            // Set the number of clusters (separated objects). The default value is 2, the foreground object and the background.
            args.setNumberOfObjects(3);
        
            // Set the maximum number of iterations.
            args.setMaxIterationNumber(50);
        
            // Set the precision of segmentation method (optional)
            args.setPrecision(1);
        
            // Each cluster (segment) will be stored to a separate PNG file.
            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();
        
            // Use K-means clustering.
            // K-means clustering allows to split image into several independent clusters (segments).
            maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.KMeans);
            maskingOptions.setDecompose(true);
            maskingOptions.setArgs(args);
        
            // The backgroung color will be orange.
            maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
            maskingOptions.setExportOptions(exportOptions);
        
            // Create an instance of the ImageMasking class.
            com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);
        
            // Divide the source image into several clusters (segments).
            com.aspose.imaging.masking.result.MaskingResult maskingResults = masking.decompose(maskingOptions);
            try
            {
                // Obtain images from masking result and save them to 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();
        }
        

      • getImage

        RasterImage getImage()

        Provides result image.

        Returns:
        Result image.
        Code example:

        This example shows how to decompose a raster image into multiple images using image masking and the K-means segmentation algorithm. Image masking is an image processing technique that is used to split the background from the foreground image objects.


        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();
        
            // Set the number of clusters (separated objects). The default value is 2, the foreground object and the background.
            args.setNumberOfObjects(3);
        
            // Set the maximum number of iterations.
            args.setMaxIterationNumber(50);
        
            // Set the precision of segmentation method (optional)
            args.setPrecision(1);
        
            // Each cluster (segment) will be stored to a separate PNG file.
            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();
        
            // Use K-means clustering.
            // K-means clustering allows to split image into several independent clusters (segments).
            maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.KMeans);
            maskingOptions.setDecompose(true);
            maskingOptions.setArgs(args);
        
            // The backgroung color will be orange.
            maskingOptions.setBackgroundReplacementColor(com.aspose.imaging.Color.getOrange());
            maskingOptions.setExportOptions(exportOptions);
        
            // Create an instance of the ImageMasking class.
            com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);
        
            // Divide the source image into several clusters (segments).
            com.aspose.imaging.masking.result.MaskingResult maskingResults = masking.decompose(maskingOptions);
            try
            {
                // Obtain images from masking result and save them to 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();
        }
        

      • getMask

        RasterImage getMask()

        Gets the image mask.

        Returns:
        Result image mask.
        Code example:

        Using a segment mask to speed up the segmentation process


        // Masking export options
        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();
        
        // Use GraphCut clustering.
        maskingOptions.setMethod(com.aspose.imaging.masking.options.SegmentationMethod.GraphCut);
        maskingOptions.setDecompose(false);
        maskingOptions.setArgs(new com.aspose.imaging.masking.options.AutoMaskingArgs());
        
        // The background color will be transparent.
        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();
        
            // Reducing image size to speed up the segmentation process
            image.resizeHeightProportionally(600, com.aspose.imaging.ResizeType.HighQualityResample);
        
            // Create an instance of the ImageMasking class.
            com.aspose.imaging.masking.ImageMasking masking = new com.aspose.imaging.masking.ImageMasking(image);
        
            // Divide the source image into several clusters (segments).
            com.aspose.imaging.masking.result.MaskingResult maskingResult = masking.decompose(maskingOptions);
            try
            {
                // Getting the foreground mask
                com.aspose.imaging.RasterImage foregroundMask = maskingResult.get_Item(1).getMask();
                try
                {
                    // Increase the size of the mask to the size of the original image
                    foregroundMask.resize(imageSize.getWidth(), imageSize.getHeight(), com.aspose.imaging.ResizeType.NearestNeighbourResample);
        
                    // Applying the mask to the original image to obtain a foreground segment
                    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();
        }