2016-11-07 5 views
1

나는 3D 볼륨이 itkImage<unsigned char, 3>이므로 DICOM 시리즈로 저장하려고합니다. 시리즈 저장은 지금까지는 작동하지만 "Image Position Patient"및 "Image Orientation Patient"메타 데이터 태그는 dicom 파일에 저장되지 않습니다. 다른 모든 태그는 올바르게 저장됩니다.itkImage를 DICOM으로 저장할 때 이미지 위치/방향이 기록되지 않음

콘솔에 메타 데이터 사전을 인쇄하면 이러한 태그가 올바르게 인쇄됩니다. ITK-SNAP에서 파일을 열면이 두 개의 태그가 없습니다. 0020 12345

0020 | |

0010 | 환자

0010 0010

0,020 0,032 0 \ 0 \ 0

| 0,037 1 \ 0 \ 0 \ 0 \ 1 \ 0

이것은 태그가 메타 데이터에 저장되는 코드의 일부입니다. 나는 작업 예제로 gist을 만들었습니다.

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"); 

이 코드의 잘못된 점은 무엇입니까? 이러한 태그가 저장되도록 필요한 다른 태그가 있습니까?

+1

나는 이것이 'ITK'의 버그 였다고 생각한다. 정말 오래된 버전이 있습니까? 최근에 다시 나타나는지 확인하지는 않았지만 .. – drescherjm

+0

@drescherjm 감사합니다. 4.6.1 버전을 사용하고 있습니다. – ipa

+1

둘 다 ITK-4.9.1에서 작동하는 것 같습니다. – drescherjm

답변

3

다른 SOP 클래스 UID를 지정하여이 문제를 해결할 수있었습니다. 기본적으로 Secondary Capture IOD을 사용 중이며 Ultrasound Multi Frame으로 변경되었습니다. 이는 내 이미지에 더 적합합니다. 이제 이미지 방향/위치가 올바르게 저장됩니다.

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); 

그러나 내게는 메타 데이터 태그 인해 어떤 이유에 저장되지 않은 경우 경고 또는 예외가 없다는 것을 아직도 이상하다.

+0

GDCM에 버그를보고하십시오. 'Ultrasound Multi Frame'의 경우 IPP와 IOP 속성을 써서는 안됩니다. – malat

+0

@malat :이 경우 IPP와 IOP를 저장하는 것이 잘못된 이유는 무엇입니까? – ipa

+0

[초음파 초음파 멀티 프레임 IOD] (http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_A.7.4.html)에는 IOP/IPP에 대한 정의가 포함되어 있습니다. ? – malat