【Java】DICOM を Java で、読み込む [1]

はじめに

 UCLA が、ライブラリを出しているので、使ってみた。
http://www.rip.ucla.edu/~shah/dicom/
を、動かした。とりあえず、動いてるっぽい。
なお、データは、以下のDICOMデータを使った。
http://members.tripod.com/~clunis_immensus/free3d/sample_data.htm
でも、次に、DICOMをJPEGに変換しようとしているのだが、画像が真っ黒になる...原因は何だろう...

サンプル

dicomTool.java

package dicom;

import java.util.*;

import javax.imageio.*;
import javax.imageio.stream.*;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import edu.ucla.rip.imageio.*;

public class dicomTool {	
	public dicomTool() {
	}
		
    public int getDicomWidth(String inputFilePath)
    	throws Exception {
    	BufferedImage image = ImageIO.read(new File(inputFilePath));
	    return image.getWidth();
    }
    
    public int getInstance(String inputFilePath)
    	throws Exception {
    	File file = new File(inputFilePath);
    	Iterator<ImageReader> readers
    		= ImageIO.getImageReadersByFormatName("dcm" );
    	ImageReader reader = (ImageReader)readers.next();
    	reader.setInput(new FileImageInputStream(file), true);
    	
    	// get the header as a hashtable
    	
    	Hashtable<?, ?> header
    		= ((DICOMImageReader)reader).getDICOMHashtable();
    	
    	int instance = Integer.parseInt(
    			(String)DICOMElement.getValueFromHash(header, 0x00200013));
    	
		return instance;
    }
    
    public boolean convertDicomToJpeg(
    		String inputFilePath, String outputFilePath)
    	throws Exception {
    	// DICOM読み込み
    	File inputFile = new File(inputFilePath);
    	Iterator<ImageReader> readers
			= ImageIO.getImageReadersByFormatName("dcm" );
    	ImageReader reader = (ImageReader)readers.next();
    	reader.setInput(new FileImageInputStream(inputFile), true);
    	BufferedImage image = ((DICOMImageReader)reader).read(0, null);
    	reader.dispose();

    	// JPEG書き込み
    	// Open output file.
    	FileOutputStream out = new FileOutputStream(outputFilePath);

        // Create jpeg encoder.
        JPEGImageEncoder encoder =
        	JPEGCodec.createJPEGEncoder(out);

        // Set Parameter.
        JPEGEncodeParam encodeParam =
        	encoder.getDefaultJPEGEncodeParam(image);

        // Encode.
        encoder.encode(image, encodeParam);

        // Close output file.
        out.close();

        return true;
    }
}


関連記事

DICOM を Java で、読み込み、Jpeg に変換 [2] (決定版)

http://blogs.yahoo.co.jp/dk521123/6798252.html