PPTX DOCX XLSX PDF ODP
Aspose.Imaging  dla Java
DICOM

Zmień tło w DICOMs przez Java

Twórz własne aplikacje Java, aby zmieniać tło w plikach DICOM za pomocą interfejsów API po stronie serwera.

Jak zmienić tło w plikach DICOM za pomocą Java

Często osiągnięcie idealnego obrazu wymaga zmiany tła. Aby uzyskać pożądany efekt obrazu w formacie DICOM, obiekty na pierwszym planie muszą być odizolowane od reszty obrazu. Automatyczne wykrywanie obiektów jest możliwe, jeśli tło jest jednolite. Jeśli tło zdjęcia jest nierówne lub separacja obiektów jest trudna, zaleca się wstępne zaznaczenie obrazu. Obejmuje to identyfikację prostokątnych obszarów na zdjęciu, w których znajdują się zamierzone obiekty, i określenie ich typów. Można to zrobić ręcznie lub automatycznie za pomocą funkcji rozpoznawania obiektów w Cloud API. Po wybraniu obiektu i usunięciu oryginalnego tła można zastosować nowe tło lub zastosować przezroczystość. Aby zmienić tło w plikach DICOM użyjemy Aspose.Imaging dla Javy API, który jest bogatym w funkcje, wydajnym i łatwym w użyciu interfejsem API do obróbki i konwersji obrazów dla platformy Java. Możesz pobrać jego najnowszą wersję bezpośrednio z Maven i zainstaluj go w swoim projekcie opartym na Maven, dodając następujące konfiguracje do pom.xml.

Repozytorium

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

Zależność

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

Kroki, aby zmienić tło w DICOMs przez Java

Potrzebujesz aspose-imaging-version-jdk16.jar aby wypróbować następujący przepływ pracy we własnym środowisku.

  • Załaduj pliki DICOM za pomocą metody Image.load
  • Zmień tło;
  • Zapisz obraz na dysku w formacie obsługiwanym przez Aspose.Imaging

wymagania systemowe

Aspose.Imaging dla Java jest obsługiwane we wszystkich głównych systemach operacyjnych. Tylko upewnij się, że masz następujące wymagania wstępne.

  • JDK 1.6 lub nowszy jest zainstalowany.
 

Zmień tło w obrazach DICOM – 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]);
}
}
 
  • Informacje o Aspose.Imaging dla Java API

    Aspose.Imaging API to rozwiązanie do przetwarzania obrazów do tworzenia, modyfikowania, rysowania lub konwertowania obrazów (zdjęć) w aplikacjach. Oferuje: wieloplatformowe przetwarzanie obrazu, w tym między innymi konwersje między różnymi formatami obrazu (w tym jednolite przetwarzanie obrazu wielostronicowego lub wieloklatkowego), modyfikacje takie jak rysowanie, praca z prymitywami graficznymi, przekształcenia (zmiana rozmiaru, przycinanie, odwracanie i obracanie , binaryzacja, skala szarości, dostosowanie), zaawansowane funkcje manipulacji obrazem (filtrowanie, dithering, maskowanie, prostowanie) oraz strategie optymalizacji pamięci. Jest to samodzielna biblioteka i nie zależy od żadnego oprogramowania do obsługi obrazów. W projektach można łatwo dodać wysokowydajne funkcje konwersji obrazów za pomocą natywnych interfejsów API. Są to w 100% prywatne lokalne interfejsy API, a obrazy są przetwarzane na Twoich serwerach.

    Zmień tło w DICOMs za pomocą aplikacji online

    Zmień tło w dokumentach DICOM, odwiedzając naszą witrynę demonstracyjną na żywo . Demo na żywo ma następujące zalety

      Nie musisz niczego pobierać ani konfigurować
      Nie musisz pisać żadnego kodu
      Po prostu prześlij swoje pliki DICOM i naciśnij przycisk „Zmień teraz tło”
      Natychmiast uzyskaj link do pobrania pliku wynikowego

    DICOM Co jest DICOM Format pliku

    DICOM to skrót od Digital Imaging and Communications in Medicine i odnosi się do dziedziny informatyki medycznej. DICOM to połączenie definicji formatu pliku i protokołu komunikacji sieciowej. DICOM używa rozszerzenia .DCM. .DCM istnieje w dwóch różnych formatach, tj. formacie 1.xi 2.x. DCM Format 1.x jest ponadto dostępny w dwóch wersjach: normalnej i rozszerzonej. DICOM służy do integracji urządzeń do obrazowania medycznego, takich jak drukarki, serwery, skanery itp. od różnych dostawców, a także zawiera dane identyfikacyjne każdego pacjenta w celu uzyskania niepowtarzalności. Pliki DICOM mogą być udostępniane między dwiema stronami, jeśli są one w stanie odbierać dane obrazu w formacie DICOM. Część komunikacyjna DICOM jest protokołem warstwy aplikacji i wykorzystuje TCP/IP do komunikacji między podmiotami. Protokoły HTTP i HTTPS są używane w usługach internetowych DICOM. Wersje obsługiwane przez usługi sieciowe to 1.0, 1.1, 2 lub nowsze.

    Czytaj więcej

    Inne obsługiwane formaty zmiany tła

    Za pomocą Java można łatwo zmienić tło w różnych formatach, w tym.

    APNG (Animowana przenośna grafika sieciowa)
    BMP (Obraz bitmapowy)
    ICO (Ikona Windows)
    JPG (Wspólna Grupa Ekspertów Fotograficznych)
    DIB (Mapa bitowa niezależna od urządzenia)
    DJVU (Format graficzny)
    DNG (Obraz z aparatu cyfrowego)
    EMF (Ulepszony format metapliku)
    EMZ (Rozszerzony metaplik skompresowany w systemie Windows)
    GIF (Graficzny format wymiany)
    JP2 (JPEG 2000)
    J2K (Skompresowany obraz falkowy)
    PNG (Przenośna Grafika Sieciowa)
    TIFF (Oznaczony format obrazu)
    WEBP (Obraz rastrowy w sieci Web)
    WMF (Metaplik Microsoft Windows)
    WMZ (Skompresowana skórka Windows Media Player)
    TGA (Targa grafika)
    SVG (Skalowalna Grafika wektorowa)
    EPS (Enkapsulowany język PostScript)
    CDR (Obraz rysunku wektorowego)
    CMX (Obraz wymiany firmy Corel)
    OTG (Standard OpenDocument)
    ODG (Apache OpenOffice Draw format)