2016-11-07 4 views
1

3DボリュームがitkImage<unsigned char, 3>で、DICOMシリーズとして保存したい。シリーズを保存することはこれまでのところは機能しますが、メタデータタグ "画像位置患者"と "画像方向患者"はdicomファイルに保存されません。その他のタグはすべて正しく保存されます。itkImageをDICOMとして保存すると画像の位置と向きが書き込まれない

メタデータ辞書をコンソールに印刷すると、これらのタグが正しく印刷されます。 ITK-SNAPでファイルを開くと、これらの2つのタグはミスインです。

0010 | 0010患者

0010 | 0020 12345

0020 | 0032 0 \ 0 \ 0

0020 | 0037 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

関連する問題