2016-06-15 5 views
2

グラフの背景をdicom画像に設定しようとしています。私はthis exampleに従ったが、dicom.pixel_arrayから与えられた画像データはRGBAではない。私はそれを変換する方法もわかりません。私はまた、ボケが何を期待しているのかよく分かりません。私はドキュメンテーションで詳細を見つけることを試みましたが、そのような運はありません。Bokehでのdicom画像の表示

from bokeh.plotting import figure, show, output_file 
import dicom 
import numpy as np 


path = "/pathToDicomImage.dcm" 
data = dicom.read_file(path) 
img = data.pixel_array 

p = figure(x_range=(0,10), y_range=(0,10)) 

# must give a vector of images 
p.image_rgba(image=[img], x=0, y=0, dw=10, dh=10) 

output_file("image_rgba.html", title="image_rgba.py example") 

show(p) 

このコードではエラーは発生しませんが、何も表示されません。たぶんピクセル配列にアルファデータがないので、alphaはデフォルトで0になりますか?よく分かりません。また、私はそれをどのようにテストするのか分かりません。

を解決しようとしては、私はちょうどRGBA空間にピクセルデータをマッピングするために必要な、指摘されました。この場合、各チャンネルにデータを複製し、アルファをすべて設定することを意味します。

def dicom_image_to_RGBA(image_data): 
    rows = len(image_data) 
    cols = rows 
    img = np.empty((rows,cols), dtype=np.uint32) 
    view = img.view(dtype=np.uint8).reshape((rows, cols, 4)) 
    for i in range(0,rows): 
     for j in range(0,cols): 
      view[i][j][0] = image_data[i][j] 
      view[i][j][1] = image_data[i][j] 
      view[i][j][2] = image_data[i][j] 
      view[i][j][3] = 255 
    return img 

答えて

0

私はPythonの専門家ではなく、ピクセルデータを処理するpydicomの機能を一見しています。私は、pixel_arrayがDICOMデータセットのピクセルデータ属性の値であると考えています。であり、pydicomは統一的に扱える標準フォーマットに変換する機能を提供していません。これは、ほとんどの場合、RGBに変換する必要があることを意味します。これは、かなりコンパイルされ、エラーを起こしやすいタスクです。この際に考慮すべき

もの:

  • エンコーディング(ビッグ/リトルエンディアンは、JPEG、JPEG-LS、RLE、ZIPなどの様々な圧縮方法) - DICOM属性(0002,0010)はTransferSyntaxUID
  • ピクセルデータの種類(グレースケール、RGBなど) - DICOM属性(0028,0004)PhotometricInterpretation、(0028,0103)PixelRepresentation
  • カラーイメージの場合:プレーン単位でコーディングされた値は、RRRRR、.. ... GGGGG、..... BBBBB)、またはピクセル単位で色を(RGB RGB ...)
  • 実際のピクセルデータ値(0028,0100)に使用されるビット深度とビットBitsAllocated、(0028,0101)BitsStored、(0028,0102)Highbit。
  • は、実際に表示される値、またはカラー/グレースケールルックアップテーブル(0028,3000)のインデックスであるピクセルデータ値です。ModalityLUTSequence、(0028,3002)LUTDescriptor、(0028,3003)LUTExplanation、(0028,3003) )ModalityLUTType、(0028,3006)LUTData。

恐ろしいですね。 Enhanced MRのようないくつかの現代のイメージクラスでは、それ以上のものがあります。

ただし、特定の種類の画像(例:計算された放射線写真)に拘束されている場合。あなたの人生を少し楽にしてくれる上記の適用への制限。

イメージヘッダーのDICOMダンプを投稿すると、その特定のイメージを表示する方法がわかります。あなたがする必要がどのような

HTH

kritzel

0

は、RGB空間にpixel_arrayから返されたピクセルデータをマップです。通常、ルックアップテーブル(LUT)を使用して行われます。dicompyler-coreライブラリのdicomparserモジュールの関数GetImageとGetLUTValueを見てみましょう。

GetLUTValueでは、データを8ビットのグレースケール画像にマッピングします。異なるLUTを使用する場合は、それに応じて色空間をマッピングする必要があります。