我有一个继承自 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?
先生,我的名字是 Muneeb khan,我是 ehunar.org 的学生,我正在学习数据科学课程,我是初学者,请帮助我并指导请帮助我成为一名成功的数据科学家,先生/女士: