保存压缩的dicom图像,而无需暂时保存未压缩的dicom

问题描述 投票:0回答:1

我有一个继承自 DcmDataset 类的 DicomInterface 类。设置 Dicom 标签后,我想使用 JPEG Process 14 传输语法保存 DICOM 图像。如果我首先使用 Little Endian 显式传输语法保存 Dicom 文件,然后加载该文件并分配给新数据集,那么我可以使用 JPEG Process 14 传输语法将新数据集保存到 Dicom 文件中。

void DicomInterface::SaveDicom(const QString &patient_name,
                   const QString &study_number,
                   const QString &img_name){
  DcmFileFormat file_format(this);
  std::string dcm_path = GetSaveDicomPath(patient_name, study_number, img_name);
  DJEncoderRegistration::registerCodecs(); // Compress
  DJ_RPLossless representation_parameter;

  # Save temporal dicom with EXS_LittleEndianExplicit
  file_format.saveFile(dcm_path.c_str(),
                   EXS_LittleEndianExplicit);
                   
  # Load the temporal file
  OFCondition status = file_format.loadFile(dcm_path.c_str());
  DcmDataset *dataset = file_format.getDataset();

  #Save compressed Dicom
  status = dataset->chooseRepresentation(EXS_JPEGProcess14SV1,
                                        &representation_parameter);
  status = file_format.saveFile(dcm_path.c_str(),
                                        EXS_JPEGProcess14SV1);
  if (status.bad()) {
    qDebug() << "\n Error: cannot write DICOM file (" << status.text() << ")";
  }
  DJEncoderRegistration::cleanup();
}

但是,当我尝试在没有中间保存步骤的情况下保存压缩的 Dicom 时。操作不成功并显示此错误“未找到像素表示”。

void DicomInterface::SaveDicom(const QString &patient_name,
                   const QString &study_number,
                   const QString &img_name){
  DcmFileFormat file_format(this);
  std::string dcm_path = GetSaveDicomPath(patient_name, study_number, img_name);
  DJEncoderRegistration::registerCodecs(); // Compress
  DJ_RPLossless representation_parameter;
  status = chooseRepresentation(EXS_JPEGProcess14SV1,
                                        &representation_parameter);
  status = file_format.saveFile(dcm_path.c_str(),
                                        EXS_JPEGProcess14SV1);
  if (status.bad()) {
    qDebug() << "\n Error: cannot write DICOM file (" << status.text() << ")";
  }

  DJEncoderRegistration::cleanup();
}

如何保存压缩的 Dicom,而无需暂时保存未压缩的 Dicom?

c++14 dicom lossless-compression dcmtk
1个回答
0
投票

先生,我的名字是 Muneeb khan,我是 ehunar.org 的学生,我正在学习数据科学课程,我是初学者,请帮助我并指导请帮助我成为一名成功的数据科学家,先生/女士:

© www.soinside.com 2019 - 2024. All rights reserved.