2

PythonとPydicomライブラリでDICOMを使用していますが、.dcmファイルを使用しても問題はありませんでした。しかし、私は現在DICOMDIRデータセットを使用しています。

私のコードは次のとおりです。

ds = dicom.read_file("dicomdir")

pixel_array私は次のように要素にアクセスしようとしました:

data = ds.pixel_array

そして、次のエラーが発生します。TypeError: No pixel data found in this dataset.

の出力print dsは多かれ少なかれ次のとおりです。

(0004、1130)ファイルセットID CS:'GEMS_11_10_111'(0004、1200)最初のディレクトリレコードのオフセットUL:412(0004、1202)最後のディレクトリレコードのオフセットUL:412(0004、1212)ファイルセット整合性フラグUS:0(0004、1220)ディレクトリレコードシーケンス7項目----(0004、1400)次のディレクトリレコードのオフセットUL:0(0004、1410)レコード使用中フラグUS:65535( 0004、1420)参照される下位レベルのDi ULのオフセット:558(0004、1430)ディレクトリレコードタイプCS:'PATIENT'(0008、0005)特定の文字セットCS:'ISO_IR 100'(0010、0010)患者の名前PN: '------------------'(0010、0020)患者ID LO: '246992'(0010、0030)患者の生年月日DA:'19630523'(0010、0040)患者の性別CS:'F'


(0004、1400)次のディレクトリレコードのオフセットUL:0(0004、1410)レコード使用中フラグUS:65535(0004、1420)参照される下位レベルDiのオフセットUL:800(0004、1430)ディレクトリレコードタイプCS:'STUDY'(0008、0005)特定の文字セットCS:'ISO_IR 100'(0008、0020)調査日DA: '20111011'(0008、0030)調査時間TM: '151535.000000'(0008、0050)アクセッション番号SH: '1009819901'(0008、1030)スタディの説明LO:'MG CONVENCIONAL'(0020、000d)スタディインスタンスUID UI:1.2.840.113564.9.1.2005121220021252.20110608105548.21009819901(0020、0010)スタディID SH: '1009819901'


(0004、1400)次のディレクトリレコードのオフセットUL:0(0004、1410)レコード使用中フラグUS:65535(0004、1420)参照される下位レベルDiのオフセットUL:968(0004、1430)ディレクトリレコードタイプCS:'SERIES'(0008、0005)特定の文字セットCS:'ISO_IR 100'(0008、0060)モダリティCS:'MG'(0008、103e)シリーズの説明LO:'画面保存'(0020、000e)シリーズインスタンスUID UI:1.2.840.113619.2.144.2347322947.2192645372.5(0020、0011)シリーズ番号IS: '354'


(0004、1400)次のディレクトリレコードのオフセットUL:1298(0004、1410)レコード使用中フラグUS:65535(0004、1420)参照される下位レベルのDi ULのオフセット:0(0004、1430)ディレクトリレコードタイプCS:'IMAGE'(0004、1500)参照ファイルID CS:['DICOM'、'PA1'、'ST1'、'SE1'、'IM1'](0004、1510)ファイルUIの参照SOPクラスUID:セカンダリキャプチャイメージストレージ(0004、1511)ファイルUIの参照SOPインスタンスUID:1.2.840.113619.2.144.44653394.14990.1318380911.86(0004、1512)F UIの参照転送構文UID:明示的VRリトルエンディアン(0008、0005)特定の文字セットCS:'ISO_IR 100'(0008、0008)画像タイプCS:'派生'(0008、0023)コンテンツ日付DA: '20111011'(0008、0033)コンテンツ時間TM: '151909.000000'(0020、0013)インスタンス番号IS: '8844'(0028、0010)行US:2298(0028、0011)列US: 1980(0028、1052)Rescale Intercept DS: '0'(0028、1053)Rescale Slope DS: '1'1053)スロープDSの再スケール:「1」1053)スロープDSの再スケール:「1」


最後の部分は4回繰り返されます。DICOMDIRデータセットに4つの画像があります。

各画像のNumpyArrayを使用してフィールドにアクセスする方法を知っていますか?

4

1 に答える 1

5

私はSueverによってPydicomユーザーフォーラムで回答を受け取りました:

DICOMDIRファイルには、ピクセル情報は含まれていませんが、データセット内の各ファイルへのパスとともに基本的なヘッダー情報が含まれています。各画像からピクセルデータを取得するには、dicomdirデータセットをトラバースして、(現在のディレクトリに対して)個々のdicomファイルへのファイルパスを取得してから、個々のdicomのそれぞれからピクセルデータをロードする必要があります。ファイル。

これを行う簡単な方法は次のとおりです(より良い方法があるかもしれません)

    ds = dicom.read_file("dicomdir")
    pixel_data = list()
    for record in ds.DirectoryRecordSequence:
        if record.DirectoryRecordType == "IMAGE":
        # Extract the relative path to the DICOM file
            path = os.path.join(*record.ReferencedFileID)
            dcm = dicom.read_file(path)

            # Now get your image data
            pixel_data.append(dcm.pixel_array)

できます ;)

于 2012-06-13T16:46:27.003 に答える