2015-07-10 43 views
1

Файл DICOM содержит серию изображений сканирования CAT. Есть ли реализация библиотеки DICOM на Java, которая может читать файлы и извлекать изображения, хранящиеся в них? Я хотел бы сохранить эти изображения в тип данных BufferedImage.Как читать содержимое файла DICOM в Java?

+0

HTTP: // WWW .dcm4che.org/может помочь вам переслать. Также доступен список различных наборов инструментов [здесь] (http://www.schoech.de/diploma/toolkits.html). –

ответ

-2

В Java:

Один из лучших статей для DICOM чтения в JAVA этой ссылки

http://www.saravanansubramanian.com/Saravanan/Articles_On_Software/Entries/2014/10/6_DICOM_Basics_-_Extracting_Image_Pixel_Data.html

Еще одна вещи, вам нужно дополнительное программное обеспечение, чтобы извлечь изображение без этой программы вы можете» t читать изображение и содержимое.

Jai-1_1_2_01-Lib-окон-i586-jdk.exe

jai_imageio-1_0_01-Lib-окна-i586-jre.exe

Поскольку DICOM изображения так высоко от разрешения.

Вам также нужен бит JDK32.

В веб-проекте: настроен путь Jre Path, установленный в пути JDK.

+0

Вы, ребята, практически, как читать файл dicom, я работал с файлом diocm, а затем пишу этот ответ. –

1

Вы можете использовать dcm4che-3.3.X. Эта новая переработка сказочной структуры поставляется с полностью интегрированной библиотекой jai-imageio, и вам больше не нужно ее загружать и настраивать.

Чтение метаинформации файла Dicom является создателем файла org.dcm4che3.io.DicomInputStream из файла dicom и синтаксического анализа потока с классом, реализующим интерфейс org.dcm4che3.io.DicomInputHandler. Вы должны реализующий эти методы:

void readValue(DicomInputStream dis, Attributes attrs) throws IOException; 
void readValue(DicomInputStream dis, Sequence seq) throws IOException; 
void readValue(DicomInputStream dis, Fragments frags) throws IOException; 
void startDataset(DicomInputStream dis) throws IOException; 
void endDataset(DicomInputStream dis) throws IOException; 

startDataset и endDataset методы запускаются, когда поток открыт/закрыт. Методы чтения вызываются при обнаружении атрибутов, последовательности или фрагментов. Вы можете увидеть полную реализацию выборки в dcm4che/dcm4che-tool/dcm4che-tool-dcmdump.

Для чтения DICOM изображения в java.awt.image.BufferedImage вы должны получить javax.imageio.stream.ImageInputStream из файла DICOM таким образом javax.imageio.ImageIO.createImageInputStream(dicomFile) где dicomFile является java.io.File.

Если вам интересно, как работает этот простой код, это из-за плагина dcm4che-imageio.

Снова вы можете увидеть полный пример реализации в dcm4che/dcm4che-tool/dcm4che-tool-dcm2jpg.

Очевидно, что вам необходим правильно настроить Maven pom.xml со всеми зависимостями вам нужно, по крайней мере:

<dependencies> 
    <dependency> 
    <groupId>org.dcm4che</groupId> 
    <artifactId>dcm4che-imageio</artifactId> 
    <version>3.3.7</version> 
    </dependency> 
    <dependency> 
    <groupId>org.dcm4che</groupId> 
    <artifactId>dcm4che-imageio-rle</artifactId> 
    <version>3.3.7</version> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>com.sun.media</groupId> 
    <artifactId>jai_imageio</artifactId> 
    <version>1.2-pre-dr-b04</version> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.dcm4che.tool</groupId> 
    <artifactId>dcm4che-tool-common</artifactId> 
    <version>3.3.7</version> 
    <scope>compile</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    </dependency> 
</dependencies> 

, а также dcm4che Maven репо

<repositories> 
    <repository> 
    <id>www.dcm4che.org</id> 
    <name>dcm4che Repository</name> 
    <url>http://www.dcm4che.org/maven2</url> 
</repository> 

Надеется, что это помогает.

0

Я написал некоторое время назад некоторый код, который разрешил мне читать файлы «.dcm» и экспортировать их в массив типа данных BufferedImage.

Я использовал библиотеку dcm4che, что вы можете найти здесь: http://www.dcm4che.org/

В коде я написал я использовал эти классы:

import org.dcm4che3.imageio.plugins.dcm.*; 
import org.dcm4che3.data.Tag; 
import org.dcm4che3.io.DicomOutputStream; 

Во-первых, я использовал метод, чтобы прочитать файл DICOM и получить его данные пикселя в растре:

static BufferedImage createBufferedImgdFromDICOMfile(File dicomFile) { 
    Raster raster = null ; 
    System.out.println("Input: " + dicomFile.getName()); 

    //Open the DICOM file and get its pixel data 
    try { 
     Iterator iter = ImageIO.getImageReadersByFormatName("DICOM"); 
     ImageReader reader = (ImageReader) iter.next(); 
     DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam(); 
     ImageInputStream iis = ImageIO.createImageInputStream(dicomFile); 
     reader.setInput(iis, false); 
     //Returns a new Raster (rectangular array of pixels) containing the raw pixel data from the image stream 
     raster = reader.readRaster(0, param); 
     if (raster == null) 
       System.out.println("Error: couldn't read Dicom image!"); 
     iis.close(); 
    } 
    catch(Exception e) { 
     System.out.println("Error: couldn't read dicom image! "+ e.getMessage()); 
     e.printStackTrace(); 
    } 
    return get16bitBuffImage(raster); 
} 

Затем я использовал этот метод, чтобы получить пиксели из растра previusly, созданный из D ИКОМ файл и поместить их в BufferImage с черным в белую ColorModel:

public static BufferedImage get16bitBuffImage(Raster raster) { 
    short[] pixels = ((DataBufferUShort) raster.getDataBuffer()).getData(); 
    ColorModel colorModel = new ComponentColorModel(
     ColorSpace.getInstance(ColorSpace.CS_GRAY), 
     new int[]{16}, 
     false, 
     false, 
     Transparency.OPAQUE, 
     DataBuffer.TYPE_USHORT); 
    DataBufferUShort db = new DataBufferUShort(pixels, pixels.length); 
    WritableRaster outRaster = Raster.createInterleavedRaster(
     db, 
     raster.getWidth(), 
     raster.getHeight(), 
     raster.getWidth(), 
     1, 
     new int[1], 
     null); 
    return new BufferedImage(colorModel, outRaster, false, null); 
} 

Если вы хотите экспортировать BufferImage в файл JPEG Вы можете использовать этот метод:

private static void outputJpegImage(BufferedImage outputImage, String outputPath) { 
    try { 
    File outputJpegFile = new File(outputPath); 
    OutputStream output = new BufferedOutputStream(new FileOutputStream(outputJpegFile)); 
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output); 
    encoder.encode(outputImage); 
    output.close(); 
    } catch (IOException e) { 
     System.out.println("Error: couldn't write jpeg image! "+ e.getMessage()); 
     e.printStackTrace(); 
    } 
    System.out.println("Output: " + outputPath); 
} 
Смежные вопросы