はじめに
私のブログの中でとても閲覧数が多いのがDICOMタグ関係の記事となっています。皆さん、DICOMタグを確認したり、いじったりする必要があるんだなとつくづく感じます。
ただ、DICOMタグを確認するのにPythonのプログラムを立ち上げてとか、Image-J、OSIRIX等のDICOMビューアを立ち上げるのは面倒ですよね。
だったら、ドラッグドロップでDICOMタグを見れるプログラムを作ってしまおうという思いから今回この記事を書いています。
手順を考える
まずは、始める前に手順を考えてみたいと思います。
とりあえず、DICOMタグを表示するプログラムを書いてから、それを改造していく事にしましょう。
その際、ファイル1枚なのか、フォルダなのかの判定をしてDICOMタグの表示方法を考えます。
その後、ドラッグドロップされた時の処理を追加します。
DICOMタグを表示するプログラム
これに関しては、以前記事にしていますのでこちらを見てください。
1 2 3 4 5 6 7 |
import pydicom dcm = pydicom.dcmread(‘ファイル名’) print(dcm) |
たった3行のコードで出来上がりですが、これでは、指定したファイルしか見れないので’ファイル名’の所を変数に変えておきましょう。
とりあえず’filename’としておきます。
1 2 3 4 5 6 7 |
import pydicom dcm = pydicom.dcmread(filename) print(dcm) |
ファイルか、フォルダかの判定
上記プログラムはファイル単体のDICOMタグを表示するプログラムで、フォルダの際にはエラーとなってしまいます。
私個人的には、DICOMタグを見るのならフォルダで一気に入れてしまいたい気分です。
なので、ドラッグドロップされたものがDICOM画像1枚なのか、フォルダでドラッグドロップされたものなのかを判定する必要があります。
その判定をするのは”os”というライブラリーの”isfile”を使います。
返り値はboolean値で”True”か,”False”の2値で返ってきます。
まずは、ライブラリーをインポートします。
1 2 3 4 5 6 7 8 |
import pydicom import os dcm = pydicom.dcmread(filename) print(dcm) |
その後filenameという変数がファイルかフォルダなのかの判定を、DICOMファイル読み込み前に入れます。下記コードでは5行目に入れてあります。
if文で判定します。もし、ファイルである場合は”True”が返ってきますので、そのままスルーします。
1 2 3 4 5 6 7 8 9 10 11 |
import pydicom import os if os.path.isfile(filename): pass dcm = pydicom.dcmread(filename) print(dcm) |
さて、”False”の場合はフォルダ内のファイルを見に行かなければなりません。この作業は以前、フォルダでファイルを一括選択でやっているのでそのコードを持ってきます。
ライブラリー”glob”をインポートします。その後、フォルダ内のファイルを変数内に入れていきましょう。以下コードの9行目です。
本来であれば、ここでこれもファイルかどうかの判定をするべきなのですが今回は省略します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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]を付け加えるのを忘れないでくださいね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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行目)
ドラッグドロップされたファイルを変数に入れます。(入れなくても大丈夫ですが、いつも使っている変数名にした方が分かりやすいので・・・・)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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の起動をアイコン化でも記事にしましたバッチファイルを作成します。
まずはデスクトップにテキストファイルを作成します。
そのファイルに
1 2 3 4 5 |
cd [pythonプログラムが置いてあるフォルダのパス] python [プログラム名.py] %1 PAUSE |
とコードを書き保存します。
拡張子を”bat”と変更してください。2行目、3行目のコードはそれぞれの環境に合わせて書き換えてくださいね。
そのファイルにDICOMファイルをドラッグドロップしてみてください。
どうですか?DICOMタグの一覧が表示されましたか?
最後に
いろいろとプログラムを書いていくと、DICOMタグの重要性が分かってきている今日この頃です。なにかと確認することが多く、このプログラムは大変重宝しています。みなさんも是非とも作成して利用してみてください。
おつかれさまでした。