public interface IMaskingLayer
Masking layer
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(); }
Modifier and Type | Method and Description |
---|---|
RasterImage |
getImage()
Provides result image.
|
RasterImage |
getMask()
Gets the image mask.
|
int |
getObjectNumber()
Gets the object number.
|
int getObjectNumber()
Gets the object number.
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(); }
RasterImage getImage()
Provides result image.
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(); }
RasterImage getMask()
Gets the image mask.
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(); }