PPTX DOCX XLSX PDF ODP
Aspose.Imaging  voor Java
DICOM

Achtergrond verwijderen uit DICOMs via Java

Bouw uw eigen Java-apps om achtergrond uit DICOM-bestanden te verwijderen met behulp van server-side API’s.

Achtergrond verwijderen in DICOM-bestanden met Java

Het verwijderen van de achtergrond uit een afbeelding houdt in dat voorgrondobjecten worden geïsoleerd, een taak waarvoor objectherkenning vereist is. Er bestaan ​​meerdere benaderingen om objecten in een foto in het DICOM-formaat te identificeren. Voor eenvoudige afbeeldingen met een egaal gekleurde achtergrond volstaat een automatische methode. Voor foto’s met meerdere of gedeeltelijk samengevoegde figuren is het echter noodzakelijk om objecten vooraf te markeren. Dit omvat het specificeren van rechthoekige gebieden en objecttypen voor verwijdering. In ingewikkelde gevallen maakt de Cloud API automatische objectdetectie mogelijk. De Cloud API biedt een cloudapplicatie die objecten in foto’s kan herkennen en de resulterende contouren kan gebruiken voor het verwijderen van de achtergrond. Na verwijdering kunnen randen die door figuren zijn achtergelaten, worden gladgemaakt om de beeldkwaliteit te verbeteren. Om de achtergrond in DICOM-bestanden te verwijderen, gebruiken we Aspose.Imaging voor Java API, een veelzijdige, krachtige en gebruiksvriendelijke API voor beeldmanipulatie en conversie voor het Java-platform. U kunt de nieuwste versie rechtstreeks downloaden van Maven en installeer het binnen uw op Maven gebaseerde project door de volgende configuraties toe te voegen aan pom.xml.

Repository

<repository>
<id>AsposeJavaAPI</id>
<name>Java API toewijzen</name>
<url>https://repository.aspose.com/repo/</url>
</repository>

Dependency

<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-imaging</artifactId>
<version>version of aspose-imaging API</version>
<classifier>jdk16</classifier>
</dependency>

Stappen om achtergrond uit DICOM's te verwijderen via Java

Je hebt de nodig aspose-imaging-version-jdk16.jar om de volgende workflow in uw eigen omgeving te proberen.

  • Laad DICOM-bestanden met de Image.load-methode
  • Achtergrond verwijderen;
  • Bewaar afbeelding op schijf in het formaat dat wordt ondersteund door Aspose.Imaging

systeem vereisten

Aspose.Imaging voor Java wordt ondersteund op alle belangrijke besturingssystemen. Zorg ervoor dat u aan de volgende vereisten voldoet.

  • JDK 1.6 of hoger is geïnstalleerd.
 

Achtergrond verwijderen in DICOM afbeeldingen - Java

import com.aspose.imaging.*;
import com.aspose.imaging.fileformats.png.PngColorType;
import com.aspose.imaging.imageoptions.PngOptions;
import com.aspose.imaging.masking.IMaskingSession;
import com.aspose.imaging.masking.ImageMasking;
import com.aspose.imaging.masking.options.*;
import com.aspose.imaging.masking.result.MaskingResult;
import com.aspose.imaging.sources.FileCreateSource;
import java.io.File;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
//Most common example to demonstrate background change/remove tool
removeBackgroundGenericExample();
// Folder that contains images to process
static final String templatesFolder = "c:\\Data\\";
public static void removeBackgroundProcessingWithManualRectangles()
{
List<String> rasterFormats = Arrays.asList("jpg", "png", "bmp", "apng",
"dicom", "jp2", "j2k", "tga", "webp", "tif", "gif");
List<String> vectorFormats = Arrays.asList("svg", "otg", "odg", "eps",
"wmf", "emf", "wmz", "emz", "cmx", "cdr");
List<String> allFormats = new LinkedList<>(rasterFormats);
allFormats.addAll(vectorFormats);
allFormats.forEach(new Consumer<String>()
{
@Override
public void accept(String formatExt)
{
String inputFile = templatesFolder + "couple." + formatExt;
boolean isVectorFormat = vectorFormats.contains(formatExt);
//Need to rasterize vector formats before background remove
if (isVectorFormat)
{
inputFile = rasterizeVectorImage(formatExt, inputFile);
}
String outputFile = templatesFolder + "remove_background_manual_rectangles." + formatExt;
System.out.println("Processing " + formatExt);
try (RasterImage image = (RasterImage) Image.load(inputFile))
{
//Additional code examples can be found at
//https://docs.aspose.com/imaging/java/remove-background-from-images/#graph-cut-auto-masking-using-imagingcloud-api
AutoMaskingGraphCutOptions maskingOptions = new AutoMaskingGraphCutOptions();
maskingOptions.setFeatheringRadius(2);
maskingOptions.setMethod(SegmentationMethod.GraphCut);
AutoMaskingArgs maskingArgs = new AutoMaskingArgs();
maskingArgs.setObjectsRectangles(new Rectangle[]
{
// girl's bound box
new Rectangle(87, 47, 123, 308),
// boy's bound box
new Rectangle(180, 24, 126, 224)
});
maskingOptions.setArgs(maskingArgs);
PngOptions pngOptions = new PngOptions();
pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
pngOptions.setSource(new FileCreateSource(outputFile, false));
maskingOptions.setExportOptions(pngOptions);
IMaskingSession maskingSession = new ImageMasking(image)
.createSession(maskingOptions);
try
{
// first run of segmentation
maskingSession.decompose().dispose();
AutoMaskingArgs argsWithUserMarkers = new AutoMaskingArgs();
argsWithUserMarkers.setObjectsPoints(new Point[][]
{
// background markers
null,
// foreground markers
new UserMarker()
// boy's head
.addPoint(218, 48, 10)
// girl's head
.addPoint(399, 66, 10)
// girs's body
.addPoint(158, 141, 10)
.addPoint(158, 209, 20)
.addPoint(115, 225, 5)
.getPoints()
});
try (MaskingResult maskingResult = maskingSession
.improveDecomposition(argsWithUserMarkers))
{
try (Image resultImage = maskingResult.get_Item(1).getImage())
{
resultImage.save();
}
}
}
finally
{
maskingSession.dispose();
}
}
//Remove rasterized vector image
if (isVectorFormat)
{
new File(inputFile).delete();
}
}
});
}
public static void removeBackgroundAutoProcessingWithAssumedObjects()
{
List<String> rasterFormats = Arrays.asList("jpg", "png", "bmp", "apng",
"dicom", "jp2", "j2k", "tga", "webp", "tif", "gif");
List<String> vectorFormats = Arrays.asList("svg", "otg", "odg", "eps",
"wmf", "emf", "wmz", "emz", "cmx", "cdr");
List<String> allFormats = new LinkedList<>(rasterFormats);
allFormats.addAll(vectorFormats);
allFormats.forEach(new Consumer<String>() {
@Override
public void accept(String formatExt)
{
String inputFile = templatesFolder + "couple." + formatExt;
boolean isVectorFormat = vectorFormats.contains(formatExt);
//Need to rasterize vector formats before background remove
if (isVectorFormat)
{
inputFile = rasterizeVectorImage(formatExt, inputFile);
}
String outputFile = templatesFolder
+ "remove_background_auto_assumed_objects." + formatExt;
System.out.println("Processing " + formatExt);
try (RasterImage image = (RasterImage) Image.load(inputFile))
{
//Additional code examples can be found at
//https://docs.aspose.com/imaging/java/remove-background-from-images/#graph-cut-auto-masking-using-imagingcloud-api
AutoMaskingGraphCutOptions maskingOptions = new AutoMaskingGraphCutOptions();
final LinkedList<AssumedObjectData> assumedObjects = new LinkedList<>();
// girl's bound box
assumedObjects.add(
new AssumedObjectData(DetectedObjectType.Human,
new Rectangle(87, 47, 123, 308)));
// boy's bound box
assumedObjects.add(
new AssumedObjectData(DetectedObjectType.Human,
new Rectangle(180, 24, 126, 224)));
maskingOptions.setAssumedObjects(assumedObjects);
maskingOptions.setCalculateDefaultStrokes(true);
maskingOptions.setFeatheringRadius(1);
maskingOptions.setMethod(SegmentationMethod.GraphCut);
PngOptions pngOptions = new PngOptions();
pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
pngOptions.setSource(new FileCreateSource(outputFile, false));
maskingOptions.setExportOptions(pngOptions);
maskingOptions.setBackgroundReplacementColor(Color.getGreen());
try (MaskingResult maskingResult = new ImageMasking(image)
.decompose(maskingOptions))
{
try (Image resultImage = maskingResult.get_Item(1).getImage())
{
resultImage.save();
}
}
}
//Remove rasterized vector image
if (isVectorFormat)
{
new File(inputFile).delete();
}
}
});
}
public static void removeBackgroundAutoProcessing()
{
List<String> rasterFormats = Arrays.asList("jpg", "png", "bmp", "apng",
"dicom", "jp2", "j2k", "tga", "webp", "tif", "gif");
List<String> vectorFormats = Arrays.asList("svg", "otg", "odg", "eps",
"wmf", "emf", "wmz", "emz", "cmx", "cdr");
List<String> allFormats = new LinkedList<>(rasterFormats);
allFormats.addAll(vectorFormats);
allFormats.forEach(new Consumer<String>() {
@Override
public void accept(String formatExt)
{
String inputFile = templatesFolder + "couple." + formatExt;
boolean isVectorFormat = vectorFormats.contains(formatExt);
//Need to rasterize vector formats before background remove
if (isVectorFormat)
{
inputFile = rasterizeVectorImage(formatExt, inputFile);
}
String outputFile = templatesFolder + "remove_background_auto." + formatExt;
System.out.println("Processing " + formatExt);
try (RasterImage image = (RasterImage) Image.load(inputFile))
{
//Additional code examples can be found at
//https://docs.aspose.com/imaging/java/remove-background-from-images/#graph-cut-auto-masking-using-imagingcloud-api
AutoMaskingGraphCutOptions maskingOptions = new AutoMaskingGraphCutOptions();
maskingOptions.setFeatheringRadius(1);
maskingOptions.setMethod(SegmentationMethod.GraphCut);
PngOptions pngOptions = new PngOptions();
pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
pngOptions.setSource(new FileCreateSource(outputFile, false));
maskingOptions.setExportOptions(pngOptions);
maskingOptions.setBackgroundReplacementColor(Color.getGreen());
try (MaskingResult maskingResult = new ImageMasking(image)
.decompose(maskingOptions))
{
try (Image resultImage = maskingResult.get_Item(1).getImage())
{
resultImage.save();
}
}
}
//Remove rasterized vector image
if (isVectorFormat)
{
new File(inputFile).delete();
}
}
});
}
public static void removeBackgroundGenericExample()
{
List<String> rasterFormats = Arrays.asList("jpg", "png", "bmp", "apng",
"dicom", "jp2", "j2k", "tga", "webp", "tif", "gif");
List<String> vectorFormats = Arrays.asList("svg", "otg", "odg", "eps",
"wmf", "emf", "wmz", "emz", "cmx", "cdr");
List<String> allFormats = new LinkedList<>(rasterFormats);
allFormats.addAll(vectorFormats);
allFormats.forEach(new Consumer<String>() {
@Override
public void accept(String formatExt)
{
String inputFile = templatesFolder + "couple." + formatExt;
boolean isVectorFormat = vectorFormats.contains(formatExt);
//Need to rasterize vector formats before background remove
if (isVectorFormat)
{
inputFile = rasterizeVectorImage(formatExt, inputFile);
}
String outputFile = templatesFolder + "remove_background." + formatExt;
System.out.println("Processing " + formatExt);
try (RasterImage image = (RasterImage) Image.load(inputFile))
{
//Additional code examples can be found at
//https://docs.aspose.com/imaging/java/remove-background-from-images/#graph-cut-auto-masking-using-imagingcloud-api
AutoMaskingGraphCutOptions maskingOptions = new AutoMaskingGraphCutOptions();
maskingOptions.setCalculateDefaultStrokes(true);
maskingOptions.setFeatheringRadius(1);
maskingOptions.setMethod(SegmentationMethod.GraphCut);
PngOptions pngOptions = new PngOptions();
pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
pngOptions.setSource(new FileCreateSource(outputFile, false));
maskingOptions.setExportOptions(pngOptions);
maskingOptions.setBackgroundReplacementColor(Color.getGreen());
try (MaskingResult maskingResult = new ImageMasking(image)
.decompose(maskingOptions))
{
try (Image resultImage = maskingResult.get_Item(1).getImage())
{
resultImage.save();
}
}
}
//Remove rasterized vector image
if (isVectorFormat)
{
new File(inputFile).delete();
}
}
});
}
private static String rasterizeVectorImage(String formatExt, String inputFile)
{
String outputFile = templatesFolder + "rasterized."+ formatExt + ".png";
try (Image image = Image.load(inputFile))
{
image.save(outputFile, new PngOptions());
}
return outputFile;
}
class UserMarker
{
private final List<Point> list = new LinkedList<>();
public UserMarker addPoint(int left, int top, int radius)
{
for (int y = top - radius; y <= top + radius; y++)
{
for (int x = left - radius; x <= left + radius; x++)
{
this.list.add(new Point(x, y));
}
}
return this;
}
public Point[] getPoints()
{
return this.list.toArray(new Point[0]);
}
}
 
  • Over Aspose.Imaging voor Java API

    Aspose.Imaging API is een beeldverwerkingsoplossing voor het maken, wijzigen, tekenen of converteren van afbeeldingen (foto’s) binnen applicaties. Het biedt: platformonafhankelijke beeldverwerking, inclusief maar niet beperkt tot conversies tussen verschillende beeldformaten (inclusief uniforme beeldverwerking van meerdere pagina’s of meerdere frames), aanpassingen zoals tekenen, werken met grafische primitieven, transformaties (formaat wijzigen, bijsnijden, spiegelen en roteren , binarisatie, grijswaarden, aanpassen), geavanceerde functies voor beeldmanipulatie (filteren, dithering, maskeren, rechtzetten) en strategieën voor geheugenoptimalisatie. Het is een op zichzelf staande bibliotheek en is niet afhankelijk van software voor beeldbewerkingen. Men kan eenvoudig hoogwaardige functies voor beeldconversie toevoegen met native API’s binnen projecten. Dit zijn 100% private on-premise API’s en afbeeldingen worden verwerkt op uw servers.

    Achtergrond verwijderen in DICOMs via Online App

    Verwijder achtergrond in DICOM-documenten door naar onze Live Demo-website te gaan. De live demo heeft de volgende voordelen:

      U hoeft niets te downloaden of in te stellen
      U hoeft geen code te schrijven
      Upload gewoon uw DICOM-bestanden en druk op de knop "Achtergrond nu verwijderen"
      Krijg direct de downloadlink voor het resulterende bestand

    DICOM Wat is DICOM Bestandsformaat

    DICOM is de afkorting voor Digital Imaging and Communications in Medicine en heeft betrekking op het vakgebied Medische Informatica. DICOM is de combinatie van bestandsformaatdefinitie en een netwerkcommunicatieprotocol. DICOM gebruikt de .DCM-extensie. .DCM bestaat in twee verschillende formaten, namelijk formaat 1.x en formaat 2.x. DCM Format 1.x is verder beschikbaar in twee versies normaal en uitgebreid. DICOM wordt gebruikt voor de integratie van medische beeldvormingsapparatuur zoals printers, servers, scanners enz. van verschillende leveranciers en bevat ook identificatiegegevens van elke patiënt voor uniekheid. DICOM-bestanden kunnen tussen twee partijen worden gedeeld als ze beeldgegevens in DICOM-indeling kunnen ontvangen. Het communicatiegedeelte van DICOM is een applicatielaagprotocol en gebruikt TCP/IP om te communiceren tussen entiteiten. Voor de webservices van DICOM worden HTTP- en HTTPS-protocollen gebruikt. Door webservices ondersteunde versies zijn 1.0, 1.1, 2 of hoger.

    Lees verder

    Andere ondersteunde formaten voor het verwijderen van achtergronden

    Met behulp van Java kan men gemakkelijk achtergrond verwijderen uit verschillende formaten, waaronder.

    APNG (Geanimeerde draagbare netwerkgraphics)
    BMP (Bitmapafbeelding)
    ICO (Windows-pictogram)
    JPG (Joint Photographic Experts Group)
    DIB (Apparaatonafhankelijke bitmap)
    DJVU (Grafisch formaat)
    DNG (Digitale Camera Afbeelding)
    EMF (Verbeterde metabestandsindeling)
    EMZ (Windows gecomprimeerd verbeterd metabestand)
    GIF (Grafisch uitwisselingsformaat)
    JP2 (JPEG 2000)
    J2K (Wavelet gecomprimeerde afbeelding)
    PNG (Draagbare netwerkgrafieken)
    TIFF (Gelabelde afbeeldingsindeling)
    WEBP (Rasterwebafbeelding)
    WMF (Microsoft Windows-metabestand)
    WMZ (Gecomprimeerde Windows Media Player-skin)
    TGA (Targa-afbeelding)
    SVG (Schaalbare vectorafbeeldingen)
    EPS (Encapsulated PostScript-taal)
    CDR (Vector tekening afbeelding)
    CMX (Corel Exchange-afbeelding)
    OTG (OpenDocument-standaard)
    ODG (Apache OpenOffice Draw-indeling)