У меня есть 3D объем как itkImage<unsigned char, 3>
и хочу сохранить его как серию DICOM. Сохранение серии пока работает, но метаданные тегов «Положение изображения пациента» и «Изображение пациента ориентации» не сохраняются в файле dicom. Все остальные теги сохранены правильно.
Если я печатаю словарь метаданных на консоль, эти теги печатаются правильно. Когда я открываю файлы в ITK-SNAP, эти два тега пропускаются.
0010 | 0010 Пациент
0010 | 0020 12345
0020 | 0032 0 \ 0 \ 0
0020 | 0037 1 \ 0 \ 0 \ 0 \ 1 \ 0
Это часть кода, где эти теги хранятся в метаданных. Я создал суть с рабочим примером.
UC3ImageType::PointType position;
UC3ImageType::IndexType index;
index[0] = 0;
index[1] = 0;
index[2] = f;
image->TransformIndexToPhysicalPoint(index, position);
value.str("");
value << position[0] << "\\" << position[1] << "\\" << position[2];
itk::EncapsulateMetaData<std::string>(*dictionary, "0020|0032", value.str());
value.str("");
value << position[2];
itk::EncapsulateMetaData<std::string>(*dictionary, "0020|1041", value.str());
itk::EncapsulateMetaData<std::string>(*dictionary, "0020|0037", "1\\0\\0\\0\\1\\0");
Что не так с этим кодом? Существуют ли другие теги, которые необходимы, чтобы эти теги также сохранялись?
Я мог бы решить эту проблему, указав другой UID класса SOP. По умолчанию он использует Вторичный захват IOD и я изменил это на Ультразвуковой мульти кадр, что также больше подходит для моего имиджа. Теперь Ориентация / Положение изображения сохранены правильно.
const std::string SOP_CLASS_UID = "0008|0016";
const std::string US_MULTIFRAME_UID = "1.2.840.10008.5.1.4.1.1.3.1";
itk::EncapsulateMetaData<std::string>(*dictionary, SOP_CLASS_UID, US_MULTIFRAME_UID);
Тем не менее, для меня все еще странно, что нет никаких предупреждений или исключений, когда тег метаданных не сохраняется по какой-либо причине.
Других решений пока нет …