Decompose
ImageMasking.Decompose method
Utför nedbrytningsoperationen med angivna maskeringsalternativ
public MaskingResult Decompose(MaskingOptions options)
Parameter | Typ | Beskrivning |
---|---|---|
options | MaskingOptions | Maskeringsalternativen. |
Returvärde
Resultat av maskeringsoperation som array av segmentbildsleverantörer.
Exempel
Det här exemplet visar hur man bryter ner en rasterbild till flera bilder med hjälp av bildmaskering och K-means segmenteringsalgoritmen. Bildmaskering är en bildbehandlingsteknik som används för att dela upp bakgrunden från förgrundsbildobjekten.
[C#]
string dir = "c:\\temp\\";
using (Aspose.Imaging.RasterImage image = (Aspose.Imaging.RasterImage)Aspose.Imaging.Image.Load(dir + "Blue hills.png"))
{
Aspose.Imaging.Masking.Options.AutoMaskingArgs args = new Aspose.Imaging.Masking.Options.AutoMaskingArgs();
// Ställ in antalet kluster (separerade objekt). Standardvärdet är 2, förgrundsobjektet och bakgrunden.
args.NumberOfObjects = 3;
// Ställ in det maximala antalet iterationer.
args.MaxIterationNumber = 50;
// Ställ in precisionen för segmenteringsmetoden (valfritt)
args.Precision = 1;
// Varje kluster (segment) kommer att lagras i en separat PNG-fil.
Aspose.Imaging.ImageOptions.PngOptions exportOptions = new Aspose.Imaging.ImageOptions.PngOptions();
exportOptions.ColorType = Aspose.Imaging.FileFormats.Png.PngColorType.TruecolorWithAlpha;
exportOptions.Source = new Aspose.Imaging.Sources.StreamSource(new System.IO.MemoryStream());
Aspose.Imaging.Masking.Options.MaskingOptions maskingOptions = new Aspose.Imaging.Masking.Options.MaskingOptions();
// Använd K-betyder klustring.
// K-means klustring gör det möjligt att dela upp bilden i flera oberoende kluster (segment).
maskingOptions.Method = Masking.Options.SegmentationMethod.KMeans;
maskingOptions.Decompose = true;
maskingOptions.Args = args;
// Bakgrundsfärgen kommer att vara orange.
maskingOptions.BackgroundReplacementColor = Aspose.Imaging.Color.Orange;
maskingOptions.ExportOptions = exportOptions;
// Skapa en instans av klassen ImageMasking.
Aspose.Imaging.Masking.ImageMasking masking = new Aspose.Imaging.Masking.ImageMasking(image);
// Dela upp källbilden i flera kluster (segment).
using (Aspose.Imaging.Masking.Result.MaskingResult maskingResult = masking.Decompose(maskingOptions))
{
// Skaffa bilder från maskeringsresultat och spara dem i PNG.
for (int i = 0; i < maskingResult.Length; i++)
{
string outputFileName = string.Format("Blue hills.Segment{0}.png", maskingResult[i].ObjectNumber);
using (Aspose.Imaging.Image resultImage = maskingResult[i].GetImage())
{
resultImage.Save(dir + outputFileName);
}
}
}
}
Använda en segmentmask för att påskynda segmenteringsprocessen
[C#]
// Maskering av exportalternativ
Aspose.Imaging.ImageOptions.PngOptions exportOptions = new Aspose.Imaging.ImageOptions.PngOptions();
exportOptions.ColorType = Aspose.Imaging.FileFormats.Png.PngColorType.TruecolorWithAlpha;
exportOptions.Source = new Aspose.Imaging.Sources.StreamSource(new System.IO.MemoryStream());
Aspose.Imaging.Masking.Options.MaskingOptions maskingOptions = new Aspose.Imaging.Masking.Options.MaskingOptions();
// Använd GraphCut-klustring.
maskingOptions.Method = Masking.Options.SegmentationMethod.GraphCut;
maskingOptions.Decompose = false;
maskingOptions.Args = new Aspose.Imaging.Masking.Options.AutoMaskingArgs();
// Bakgrundsfärgen kommer att vara transparent.
maskingOptions.BackgroundReplacementColor = Aspose.Imaging.Color.Transparent;
maskingOptions.ExportOptions = exportOptions;
string dir = "c:\\temp\\";
using (Aspose.Imaging.RasterImage image = (Aspose.Imaging.RasterImage)Aspose.Imaging.Image.Load(dir + "BigImage.jpg"))
{
Aspose.Imaging.Size imageSize = image.Size;
// Minska bildstorleken för att påskynda segmenteringsprocessen
image.ResizeHeightProportionally(600, Aspose.Imaging.ResizeType.HighQualityResample);
// Skapa en instans av klassen ImageMasking.
Aspose.Imaging.Masking.ImageMasking masking = new Aspose.Imaging.Masking.ImageMasking(image);
// Dela upp källbilden i flera kluster (segment).
using (Aspose.Imaging.Masking.Result.MaskingResult maskingResult = masking.Decompose(maskingOptions))
{
// Får förgrundsmasken
using (Aspose.Imaging.RasterImage foregroundMask = maskingResult[1].GetMask())
{
// Öka storleken på masken till storleken på originalbilden
foregroundMask.Resize(imageSize.Width, imageSize.Height, Aspose.Imaging.ResizeType.NearestNeighbourResample);
// Applicera masken på originalbilden för att få ett förgrundssegment
using (Aspose.Imaging.RasterImage originImage = (Aspose.Imaging.RasterImage)Aspose.Imaging.Image.Load(dir + "BigImage.jpg"))
{
Aspose.Imaging.Masking.ImageMasking.ApplyMask(originImage, foregroundMask, maskingOptions);
originImage.Save(dir + "BigImage_foreground.png", exportOptions);
}
}
}
}
Det här exemplet visar hur man delar upp en rasterbild till flera bilder med hjälp av bildmaskering och en manuell mask. Bildmaskering är en bildbehandlingsteknik som används för att dela upp bakgrunden från förgrundsbildobjekten.
[C#]
string dir = "c:\\temp\\";
// Definiera en manuell mask.
Aspose.Imaging.GraphicsPath manualMask = new Aspose.Imaging.GraphicsPath();
Aspose.Imaging.Figure figure = new Aspose.Imaging.Figure();
figure.AddShape(new Aspose.Imaging.Shapes.EllipseShape(new RectangleF(50, 50, 40, 40)));
figure.AddShape(new Aspose.Imaging.Shapes.RectangleShape(new RectangleF(10, 20, 50, 30)));
manualMask.AddFigure(figure);
// Varje kluster (segment) kommer att lagras i en separat PNG-fil.
Aspose.Imaging.ImageOptions.PngOptions exportOptions = new Aspose.Imaging.ImageOptions.PngOptions();
exportOptions.ColorType = Aspose.Imaging.FileFormats.Png.PngColorType.TruecolorWithAlpha;
exportOptions.Source = new Aspose.Imaging.Sources.StreamSource(new System.IO.MemoryStream());
// Ställ in den manuella masken.
Aspose.Imaging.Masking.Options.ManualMaskingArgs args = new Aspose.Imaging.Masking.Options.ManualMaskingArgs();
args.Mask = manualMask;
using (RasterImage image = (RasterImage)Image.Load(dir + "Blue hills.png"))
{
Aspose.Imaging.Masking.Options.MaskingOptions maskingOptions = new Aspose.Imaging.Masking.Options.MaskingOptions();
// Använd manuell klustringsalgoritm.
maskingOptions.Method = Masking.Options.SegmentationMethod.Manual;
// Alla former som utgör en mask kommer att kombineras till en.
maskingOptions.Decompose = false;
maskingOptions.Args = args;
// Bakgrundsfärgen kommer att vara orange.
maskingOptions.BackgroundReplacementColor = Aspose.Imaging.Color.Orange;
maskingOptions.ExportOptions = exportOptions;
// Området av källbilden som maskeringen kommer att tillämpas på.
maskingOptions.MaskingArea = new Rectangle(50, 50, 120, 120);
// Skapa en instans av klassen ImageMasking.
Aspose.Imaging.Masking.ImageMasking masking = new Aspose.Imaging.Masking.ImageMasking(image);
// Dela upp källbilden i flera kluster (segment).
using (Aspose.Imaging.Masking.Result.MaskingResult maskingResult = masking.Decompose(maskingOptions))
{
// Skaffa bilder från maskeringsresultat och spara dem i PNG.
for (int i = 0; i < maskingResult.Length; i++)
{
string outputFileName = string.Format("Blue hills.Segment{0}.png", maskingResult[i].ObjectNumber);
using (Aspose.Imaging.Image resultImage = maskingResult[i].GetImage())
{
resultImage.Save(dir + outputFileName);
}
}
}
}
Det här exemplet visar hur man anger förslag på bildmaskeringsalgoritmer för att förbättra precisionen i segmenteringsmetoden (klustring). Bildmaskering är en bildbehandlingsteknik som används för att dela upp bakgrunden från förgrundsbildobjekten.
[C#]
string dir = "c:\\temp\\";
using (Aspose.Imaging.RasterImage image = (Aspose.Imaging.RasterImage)Aspose.Imaging.Image.Load(dir + "Gorilla.bmp"))
{
Aspose.Imaging.Masking.Options.AutoMaskingArgs args = new Aspose.Imaging.Masking.Options.AutoMaskingArgs();
// Förslag #1.
// Analysera bilden visuellt och ställ in intresseområdet. Resultatet av segmenteringen kommer endast att omfatta objekt som kommer att vara helt placerade inom detta område.
args.ObjectsRectangles = new Rectangle[]
{
new Rectangle(86, 6, 270, 364),
};
// Förslag #2.
// Analysera bilden visuellt och ställ in punkterna som hör till separerade objekt.
args.ObjectsPoints = new Point[][]
{
new Point[] { new Point(103, 326) },
new Point[] { new Point(280, 43) },
new Point[] { new Point(319, 86) },
};
// Varje kluster (segment) kommer att lagras i en separat PNG-fil.
Aspose.Imaging.ImageOptions.PngOptions exportOptions = new Aspose.Imaging.ImageOptions.PngOptions();
exportOptions.ColorType = Aspose.Imaging.FileFormats.Png.PngColorType.TruecolorWithAlpha;
exportOptions.Source = new Aspose.Imaging.Sources.StreamSource(new System.IO.MemoryStream());
Aspose.Imaging.Masking.Options.MaskingOptions maskingOptions = new Aspose.Imaging.Masking.Options.MaskingOptions();
// Använd GraphCut-klustring.
maskingOptions.Method = Masking.Options.SegmentationMethod.GraphCut;
maskingOptions.Decompose = false;
maskingOptions.Args = args;
// Bakgrundsfärgen kommer att vara orange.
maskingOptions.BackgroundReplacementColor = Aspose.Imaging.Color.Orange;
maskingOptions.ExportOptions = exportOptions;
// Skapa en instans av klassen ImageMasking.
Aspose.Imaging.Masking.ImageMasking masking = new Aspose.Imaging.Masking.ImageMasking(image);
// Dela upp källbilden i flera kluster (segment).
using (Aspose.Imaging.Masking.Result.MaskingResult maskingResult = masking.Decompose(maskingOptions))
{
// Skaffa bilder från maskeringsresultat och spara dem i PNG.
for (int i = 0; i < maskingResult.Length; i++)
{
string outputFileName = string.Format("Gorilla.Segment{0}.png", maskingResult[i].ObjectNumber);
using (Aspose.Imaging.Image resultImage = maskingResult[i].GetImage())
{
resultImage.Save(dir + outputFileName);
}
}
}
}
Se även
- class MaskingResult
- class MaskingOptions
- class ImageMasking
- namnutrymme Aspose.Imaging.Masking
- hopsättning Aspose.Imaging