2017-10-11 20 views
1

私のプロジェクトでは、fo-dicom 3.0.2とC#をVS2015(.Net 4.5.2)で使用して、DICOMファイルから放射線治療計画(RT計画)を読み込もうとしています。fo-dicomを使用してシーケンスからネスト/チャイルドDICOMタグを読み取る方法は?

DICOMエディタのおかげで、私は異なるDicomTagsに格納された値を知っていますが、すべてTagにアクセスすることはできません。たとえば、私はDicomTag.BeamDoseを読もうとしていますが、値が空でないことがわかります。

(300A、0084)、データセット内で見つかりません:コードを実行

string storedfile = file_path + file_name; 
Dicom.DicomFile file = Dicom.DicomFile.Open(@storedfile); 

MessageBox.Show(file.Dataset.Get<string>(Dicom.DicomTag.BeamDose)); 

メッセージと例外をスローします。

私が知っているように、それはそこにあることは分かっていますが、シーケンスの項目に順番に入れ子になっています。 私が試した次のことは、BeamDoseが保存されているシーケンスを分析することです。

var NewDataSet = file.Dataset.Get<Dicom.DicomItem>(Dicom.DicomTag.FractionGroupSequence); 

しかし、この変数を処理する次の機会があれば、次のレベルのシーケンスにはなりません。

fo-dicomを使用してシーケンスからネスト/チャイルドDICOMタグを読み取るにはどうすればよいですか?

答えて

3

タグを検索する方法は、DICOMタグツリーの最外階層でのみ検索します。タグを正しく検索するには、最初に正しいシーケンスにアクセスしてから適切なアイテムにアクセスし、そのアイテム内のタグを検索する必要があります。 DICOMデータセットは、さらにネストすることができるシーケンス(VR SQによって識別される)を含むことができる。

hereからコピーされ、以下:

VR同定「SQ」値は各項目はデータ要素のセットを含むゼロ個以上の項目のシーケンスから成るとデータ要素のために使用されなければなりません。 SQは、データ要素の反復集合の単純な構造、またはしばしばフォルダと呼ばれるより複雑な情報オブジェクト定義の符号化に使用される柔軟な符号化方式を提供する。 SQデータ要素は、複数レベルのネスト構造を含むために再帰的に使用することもできます。

SQデータ要素に存在する項目は、各項目がその順序位置によって参照される順序付けられた集合でなければならない。各Itemには、Sequenceの最初のItemの値1で始まる順序位置が暗黙的に割り当てられ、後続の各Itemに1つずつインクリメントされます。シーケンス内の最後のアイテムは、シーケンス中のアイテムの数に等しい順序位置を持たなければならない。 hereからコピーされた後

DICOMは、「配列」として符号化される他のネストされたデータセットを含むようにデータセットを可能にします。この構造のポイントは、データの繰り返しグループを許可することです。そのようなシーケンスには単一のデータセットのみが含まれることが多いのに対し、フォーマットは、各シーケンスが一連のデータセットで構成されるように定義されます。もちろん、この構造体は完全に再帰に適しており、Structured_ReportingやRadiotherapy_Extensionsなどの一部のDICOM IODでは、5または6のネストされたシーケンスを使用できます。ここに示されているよう

シーケンスの形式は次のとおりです。 Image


十分な理論。

var value = file.Dataset.Get<DicomSequence>(DicomTag.FractionGroupSequence).Items[0].Get<string>(DicomTag.BeamDose); 

は詳細についてはthisスレッドを参照してください。次は、配列内にネストされたタグを読み取ることができる方法です。

+0

あなたの答えをありがとう。この解決策は非常にうまくいく=) – Booma

関連する問題