all-in-one-seo-pack
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114easy-fancybox
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114urvanov-syntax-highlighter
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114breadcrumb-navxt
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114advanced-ads
domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init
action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114lancr
ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init
アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114画像処理を行っていく際に、タグ情報を使うことは多々あります。
そこで、今回はpythonでDICOMタグを扱っていく方法をやってみたいと思います。
DICOMを読み込む方法や、表示方法は以下の記事に記載していますのでそちらを参照ください。
まずは、タグ情報を扱うにはDICOMタグの構成を知らなければなりません。タグの一つ一つの中には以下のようないろいろな情報がまとまって一つの情報となっています。(記載事項以外にもあるかも。。。)
Tag | タグの番号 |
Attribute Name | 項目名 |
Attribute Name J | 日本語の項目名 (上図に記載されていません) |
Attribute Type | データの必須事項、条件付き必須事項等 (上図に記載されていません) |
VR | データの型 |
Length | データの長さ (上図に記載されていません) |
Value | 値 |
なので、プログラミングで使っていく際にはDICOMデータのどの項目を扱っていくのか指定しなければならないということになります。
タグには必須事項となるタグがあり、それが予約タグとなります。
また、必須項目のタグはモダリティーにより異なってきます。
また、患者情報であったり、検査情報であったり、必須項目は偶数番のブロック(タグ番号の前側の番号)で指定されています。一方、プライベートタグに関しては奇数番で指定できます。
各モダリティーごとの必須項目タグはLIBERWORKS社のサイトに記載されていますので興味があるかたはご覧ください。
既存のタグ情報を変更するする場合は以下のコードでできます。
dcm[0x0008,0x0070].value = ‘変更する値’
なお、このままではタグ情報を変更しただけで保存できていませんので次に保存していきましょう。
タグ情報を変更したら今度は、画像に保存しなければなりません。
save_as(file_path, write_like_original=False)
で保存することができます。
write_like_original=False
の部分は、DICOMに準拠した形式ではなく個人で指定した形式で保存しますか?という事です。なので、Trueにしてしまうと形式に反してしまうかもしれませんのでここの部分はFalseのままがいいでしょう。
プライベートタグに関しては、企業がそれぞれ作成しています。
例えば、SiemensのMRI装置でDiffusionを撮像した場合、b値等がプライベートタグとして登録されていますが、10年前のcanon製のMRI 装置では記載されていません。
プライベートタグを画像に載せたい場合はまず、ブロックを作成しなくてはなりません。患者に関する情報を載せているグループや、検査情報を載せているグループといったものです。
block = dcm.private_block(0x0019, “diffusion parameter”, create=True)
block.add_new(0x0c, ‘SH’, b_val)
で画像に登録をしたら保存をします。
dcm.save_as(file_path, write_like_original=False)
これで、プライべートタグの登録が完了です。
DICOM規格に関してはJIRAのホームページに詳細な記載がありますので興味がある方は以下のリンクからご覧ください。
JIRA 勉強会資料 DICOMに慣れる -現場で DICOM 接続に慌てないための知識 (3) 画像系の通信 -
まだ、よくわからないという方のために詳しく説明していきたいと思います。
ある程度分かっている方は下準備は飛ばしてください
まずDICOM画像が手元にない場合は、Image-JのHPからサンプル画像がダウンロードできます。
拡張子(ファイル名の最後の文字)がdcmの画像がDICOM画像です。
ダウンロードした画像は、 デスクトップに「pydicom」というフォルダを作って入れておいてください。
(フォルダ名は何でも構いませんが、日本語のフォルダ名はプログラム実行時にエラーになってしまいますので必ず半角英数にて付けてください。)
続いて、コマンドプロンプトを立ち上げます。
そこに
jupyter notebook
と打ち込みます。少し無反応な時間が経ったのち、webブラウザが立ち上がり下図のページが立ち上がります。
デスクトップをクリックし、pydicomのフォルダに移動します。
先ほど、ダウンロードした画像が入っていることが確認できます。
次に、このフォルダにコードを書いていくファイルを作成したいと思います。
画面右側上方に『New』というボタンがありますので
そちらをクリックし、『Python3』を選択します。
pythonコードのファイル名を決めます。
jupyterと書いてあるわきのUntitleをクリックします。
新しくい開いたダイアログに名前を付けて『Rename』をクリックします。
そうするとデスクトップにある『pydicom』のフォルダに
『先ほど付けた名前.ipynb』
のファイルが作成されていると思います。
ここまでできましたら、とりあえず下準備は完了です。
まず、簡単なところからDICOMタグを表示させてみましょう。
import pydicom ds = pydicom.dcmread('CT2.dcm') print(ds)
コードが書けたら
shift + enterキーを押します。
いかがでしょうか?
下図のようにDICOMタグが表示できたと思います。
例えば、他のファイルのタグを見たい場合は上記コードの
ds = pydicom.dcmread(‘CT2.dcm‘)
下線部分に、ファイル名を指定すればOKです。
また、他のフォルダにあるファイルを指定したい場合はフルパスを指定することで表示することができます。
また、DICOMタグは項目ごとに表示することもできます。
例えば、モダリティーを見たい場合は
import pydicom ds = pydicom.dcmread('CT2.dcm') md = ds.Modality print(md)
で『CT』と表示させることもできます。
また、タグコードで指定することもできます。
コードは16進数に変換してあげる必要があるので、
16進数に変換する『0x』とコードの下2桁4桁を合わせて指定、それらコードを [ ] で囲み ます。
なので
モダリティーの場合は [0x0008,0x0060]
患者名の場合は [0x0010,0x0010]
を指定します。また、値だけど取得したい場合は
『.value』
を追加してあげます。指定しない場合はタグコードとタグ名、タグの値が返されます。
import pydicom ds = pydicom.dcmread('CT2.dcm') md = ds[0x08,0x60].value print('ds[0x08,0x60].value ⇒ '+ str(md)) nm=ds[0x10,0x10].value print('ds[0x10,0x10].value ⇒ '+ str(nm)) md = ds[0x08,0x60] print('ds[0x08,0x60] ⇒ '+ str(md)) nm=ds[0x10,0x10] print('ds[0x10,0x10] ⇒ '+ str(nm))
タグコードで指定する場合は、4桁で指定することができます!!
(画像が消えちゃっていたので追加したため背景色が変わっちゃっています・・・)
DICOMタグの取得は、 解像度を調べたり、撮影条件を調べたりといろいろと便利です。
検査の画像をシリーズで取得した場合、ファイル名がUIDでの表記になっていることがあり、その場合にファイル名を画像番号で名前変更したりと思った以上に使えますよ。