java使用dcm4che3 api解析dicom文件

package com.pretreatment.utils;

import com.pretreatment.domin.DicomObj;
import com.pretreatment.domin.Image;
import com.pretreatment.domin.Series;
import com.pretreatment.domin.Study;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.Tag;
import org.dcm4che3.data.VR;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.LinkedList;
import java.util.List;

/**
 * @Author: Created by Eric
 * @Date: 2017/10/26
 * @Description: 解析Dicom文件工具类
 */
public class PrecessDcmUtils {

    private Logger logger = LoggerFactory.getLogger(Study.class);

    public List precessDicom(String path) {
        TraverseFolder traverseFolder = new TraverseFolder();
        List fileList = traverseFolder.getAllDcm(new File(path));
        File file;
        List studies = new LinkedList();
        Study study;
        Series s;
        DicomObj obj;
        Image image;
        for (int i = 0; i < fileList.size(); i++) {
            List series = new LinkedList();
            List objs = new LinkedList();
            List images = new LinkedList();
            study = new Study();
            s = new Series();
            obj = new DicomObj();
            image = new Image();
            file = new File(fileList.get(i)); //	System.out.println(fileList.get(i)); DisplayTag d = new DisplayTag(file); 
            @SuppressWarnings("static-access") Attributes attr = null;
            try {
                attr = d.loadDicomObject(file);
                attr.setString(Tag.SpecificCharacterSet, VR.CS, "GB18030");
                study.setPatientName(attr.getString(Tag.PatientName));
                study.setPatientID(attr.getString(Tag.PatientID));
                study.setPatientSex(attr.getString(Tag.PatientSex));
                study.setPatientAge(attr.getString(Tag.PatientAge));
                study.setStudyInstanceUID(attr.getString(Tag.StudyInstanceUID));
                study.setStudyDate(attr.getString(Tag.StudyDate));
                study.setStudyID(attr.getString(Tag.StudyID));
                s.setSeriesInstanceUID(attr.getString(Tag.SeriesInstanceUID));
                s.setSeriesDate(attr.getString(Tag.SeriesDate));
                s.setSeriesNumber(attr.getString(Tag.SeriesNumber));
                s.setModality(attr.getString(Tag.Modality));
                s.setInstitutionName(attr.getString(Tag.InstitutionName));
                obj.setSopInstanceUID(attr.getString(Tag.SOPInstanceUID));
                obj.setImageType(attr.getString(Tag.ImageType));
                obj.setTransferSyntaxUID(attr.getString(Tag.TransferSyntaxUID));
                obj.setInstanceNumber(attr.getString(Tag.InstanceNumber));
                obj.setPhotometricInterpretation(attr.getString(Tag.PhotometricInterpretation));
                obj.setSamplesPerPixel(attr.getString(Tag.SamplesPerPixel));
                obj.setPixelRepresentation(attr.getString(Tag.PixelRepresentation));
                obj.setColumns(attr.getString(Tag.Columns));
                obj.setRows(attr.getString(Tag.Rows));
                obj.setBitsAllocated(attr.getString(Tag.BitsAllocated));
                obj.setBitsStored(attr.getString(Tag.BitsStored));
                image.setPixelSpacing(attr.getString(Tag.PixelSpacing));
                image.setSliceLocation(attr.getString(Tag.SliceLocation));
                image.setSliceThickness(attr.getString(Tag.SliceThickness));
                image.setImagePositionPatient(attr.getString(Tag.ImagePositionPatient));
                image.setImageOrientation(attr.getString(Tag.ImageOrientation));
                series.add(s);
                objs.add(obj);
                images.add(image);
                study.setSeries(series);
                study.setDicomObjs(objs);
                study.setImages(images);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                boolean b = studies.add(study);
                if (b) {
                    logger.info("解析成功!" + studies);
                } else {
                    logger.error("请稍后再试!");
                }
            }
        }
        System.out.println("kkk" + studies);
        return studies;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值