Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the 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 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the easy-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 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the urvanov-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 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the breadcrumb-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 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the advanced-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 6114

Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。lancr ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php on line 6114

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-content/plugins/all-in-one-seo-pack/app/Common/Meta/Robots.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/functions.php:6114) in /virtual/mcu03iphuk/public_html/radiology-technologist.info/wp-includes/feed-rss2.php on line 8
DICOMタグ | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 診療放射線技師のPython日記。解析等で使えるコードを作成、アップしていきたいと思っています。その他いろいろ Thu, 20 May 2021 21:21:31 +0000 ja hourly 1 https://wordpress.org/?v=6.7 https://i0.wp.com/radiology-technologist.info/wp-content/uploads/2018/09/cropped-logo5.png?fit=32%2C32 DICOMタグ | 診療放射線技師がPythonをはじめました。 http://radiology-technologist.info 32 32 164362728 ドラッグアンドドロップでDICOMタグが見れるプログラムを作ってみた。 http://radiology-technologist.info/post-712 Sun, 14 Jun 2020 00:18:31 +0000 http://radiology-technologist.info/?p=712 はじめに 私のブログの中でとても閲覧数が多いのがD […]

The post ドラッグアンドドロップでDICOMタグが見れるプログラムを作ってみた。 first appeared on 診療放射線技師がPythonをはじめました。.]]>
はじめに

私のブログの中でとても閲覧数が多いのがDICOMタグ関係の記事となっています。皆さん、DICOMタグを確認したり、いじったりする必要があるんだなとつくづく感じます。

ただ、DICOMタグを確認するのにPythonのプログラムを立ち上げてとか、Image-J、OSIRIX等のDICOMビューアを立ち上げるのは面倒ですよね。

だったら、ドラッグドロップでDICOMタグを見れるプログラムを作ってしまおうという思いから今回この記事を書いています。


広告
デル株式会社

手順を考える

まずは、始める前に手順を考えてみたいと思います。

とりあえず、DICOMタグを表示するプログラムを書いてから、それを改造していく事にしましょう。

その際、ファイル1枚なのか、フォルダなのかの判定をしてDICOMタグの表示方法を考えます。

その後、ドラッグドロップされた時の処理を追加します。


広告
HP Directplus -HP公式オンラインストア-

DICOMタグを表示するプログラム

これに関しては、以前記事にしていますのでこちらを見てください。

import pydicom

dcm = pydicom.dcmread('ファイル名')

print(dcm)

たった3行のコードで出来上がりですが、これでは、指定したファイルしか見れないので’ファイル名’の所を変数に変えておきましょう。

とりあえず’filename’としておきます。

import pydicom

dcm = pydicom.dcmread(filename)

print(dcm)


広告
BTOパソコン・パソコン関連商品がお買い得!パソコン工房のセール

ファイルか、フォルダかの判定

上記プログラムはファイル単体のDICOMタグを表示するプログラムで、フォルダの際にはエラーとなってしまいます。

私個人的には、DICOMタグを見るのならフォルダで一気に入れてしまいたい気分です。

なので、ドラッグドロップされたものがDICOM画像1枚なのか、フォルダでドラッグドロップされたものなのかを判定する必要があります。

その判定をするのは”os”というライブラリーの”isfile”を使います。

返り値はboolean値で”True”か,”False”の2値で返ってきます。

まずは、ライブラリーをインポートします。

import pydicom
import os

dcm = pydicom.dcmread(filename)

print(dcm)

その後filenameという変数がファイルかフォルダなのかの判定を、DICOMファイル読み込み前に入れます。下記コードでは5行目に入れてあります。

if文で判定します。もし、ファイルである場合は”True”が返ってきますので、そのままスルーします。

import pydicom
import os

if os.path.isfile(filename): 
    pass

dcm = pydicom.dcmread(filename)

print(dcm)

さて、”False”の場合はフォルダ内のファイルを見に行かなければなりません。この作業は以前、フォルダでファイルを一括選択でやっているのでそのコードを持ってきます。

ライブラリー”glob”をインポートします。その後、フォルダ内のファイルを変数内に入れていきましょう。以下コードの9行目です。

本来であれば、ここでこれもファイルかどうかの判定をするべきなのですが今回は省略します。

import pydicom
import os
import glob

if os.path.isfile(filename): 
    pass

else:
    filename = glob.glob(filename + "/*")

dcm = pydicom.dcmread(filename)
print(dcm)

後は、ファイルを読み込んで表示する部分を修正します。for文で繰り返します。変数名に[i]を付け加えるのを忘れないでくださいね。

import pydicom
import os
import glob

if os.path.isfile(filename): 
    pass

else:
    filename = glob.glob(filename + "/*")

for i in range(len(filename)):
    dcm = pydicom.dcmread(filename)
    print(dcm)


ドラッグドロップされた時の処理

ここはライブラリー”sys”を使います。引数としてコマンドライン引数の”argv”を用います。詳しくはチュートリアルをご覧ください。(私は理解していませんが・・・・・)

まずは、インポート(5行目)

ドラッグドロップされたファイルを変数に入れます。(入れなくても大丈夫ですが、いつも使っている変数名にした方が分かりやすいので・・・・)

import pydicom
import os
import glob
import sys

filename = sys.argv[-1]

if os.path.isfile(filename): 
    pass

else:
    filename = glob.glob(filename + "/*")

for i in range(len(filename)):
    dcm = pydicom.dcmread(filename[i])
    print(dcm)


動作確認 バッチファイルを作成

いよいよ最後の工程です。バッチファイルを作成します。

以前jupyter notebookの起動をアイコン化でも記事にしましたバッチファイルを作成します。

まずはデスクトップにテキストファイルを作成します。

そのファイルに

cd [pythonプログラムが置いてあるフォルダのパス]
python [プログラム名.py] %1
PAUSE

とコードを書き保存します。

拡張子を”bat”と変更してください。2行目、3行目のコードはそれぞれの環境に合わせて書き換えてくださいね。

そのファイルにDICOMファイルをドラッグドロップしてみてください。

どうですか?DICOMタグの一覧が表示されましたか?


最後に

いろいろとプログラムを書いていくと、DICOMタグの重要性が分かってきている今日この頃です。なにかと確認することが多く、このプログラムは大変重宝しています。みなさんも是非とも作成して利用してみてください。

おつかれさまでした。


広告
上新電機 パソコン買取サービス
The post ドラッグアンドドロップでDICOMタグが見れるプログラムを作ってみた。 first appeared on 診療放射線技師がPythonをはじめました。.]]>
712
DICOMタグの取得 http://radiology-technologist.info/post-71 Sat, 20 Jul 2019 22:10:35 +0000 http://mcu03iphuk.m5.valueserver.jp/wordpress/?p=71 今回はPydicomを使ってDICOMタグの取得を […]

The post DICOMタグの取得 first appeared on 診療放射線技師がPythonをはじめました。.]]>
今回はPydicomを使ってDICOMタグの取得をやってみたいと思います。

下準備

まだ、よくわからないという方のために詳しく説明していきたいと思います。

ある程度分かっている方は下準備は飛ばしてください

まずDICOM画像が手元にない場合は、Image-JのHPからサンプル画像がダウンロードできます。

拡張子(ファイル名の最後の文字)がdcmの画像がDICOM画像です。

ダウンロードした画像は、 デスクトップに「pydicom」というフォルダを作って入れておいてください。

(フォルダ名は何でも構いませんが、日本語のフォルダ名はプログラム実行時にエラーになってしまいますので必ず半角英数にて付けてください。)

続いて、コマンドプロンプトを立ち上げます。

そこに

jupyter notebook

と打ち込みます。少し無反応な時間が経ったのち、webブラウザが立ち上がり下図のページが立ち上がります。

デスクトップをクリックし、pydicomのフォルダに移動します。

先ほど、ダウンロードした画像が入っていることが確認できます。

次に、このフォルダにコードを書いていくファイルを作成したいと思います。

画面右側上方に『New』というボタンがありますので

そちらをクリックし、『Python3』を選択します。

pythonコードのファイル名を決めます。

jupyterと書いてあるわきのUntitleをクリックします。

新しくい開いたダイアログに名前を付けて『Rename』をクリックします。

そうするとデスクトップにある『pydicom』のフォルダに

『先ほど付けた名前.ipynb』

のファイルが作成されていると思います。

ここまでできましたら、とりあえず下準備は完了です。


広告
デル株式会社

DICOMタグの表示

まず、簡単なところから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での表記になっていることがあり、その場合にファイル名を画像番号で名前変更したりと思った以上に使えますよ。


広告
上新電機 パソコン買取サービス
The post DICOMタグの取得 first appeared on 診療放射線技師がPythonをはじめました。.]]>
71