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
DICOM画像を匿名化するソフトを作ってみる | 診療放射線技師がPythonをはじめました。

DICOM画像を匿名化するソフトを作ってみる

はじめに

前回、「DICOMタグをいじってみる」という記事を書きました。

DICOMタグをいじれるのなら、それをソフトとして作ってしまおうというのが今回の記事になります。

完成系としては、exeファイルまで作っていきたいと思います。

注意:pythonのバージョン3.7はexe化に対応していませんのでバージョン3.6にダウングレードしてください。


広告
デル株式会社

変更するタグを確認

まずは、匿名化していくタグの確認をしていきましょう。

患者情報のタグは予約タグなので検査画像のDICOMタグを開けば確認できます。

以下は、MRI画像のタグです。匿名化処理をして画像出力したもののタグです。

患者情報は ’0010’ のブロックに登録されています。

この画像出力の装置では患者IDと患者名が匿名化されています。

誕生日や、年齢は匿名化されていませんでした。(念のためモザイク処理をしています。)

なので、今回は患者名(0010,0010)と患者ID(0010,0020)の値を匿名化していきたいと思います。


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

プログラムの流れを組む

それでは、簡単に流れを組んでみたいと思います。

  1. ファイルを選択する
  2. 匿名化する値を考える
  3. DICOM画像を読み込む
  4. DICOMタグを書き換える
  5. DICOMを保存する

といった流れになると思います。

変数は必要なさそうですね。

DICOMタグの値表現方式は患者名に関してはPNで文字列、患者IDに関してはLOでLongStringで文字列との認識ですが、数値にて埋めることとします。

匿名化する値ですが、患者名に関しては単純に’Patient^name’、患者IDに関しては元が数値なので0で10桁を埋めることとします。。

DICOMタグを書き換えるにはまず画像を読み込みます。

DICOM画像を読み込むのはpydicom.dcmread(filepath)でできます。

その次はタグの変更です。

[タグの番地].value=値

で出来ます。

DICOMを保存するのは前回の記事「DICOMタグをいじってみる」で記載しましたが

save_as(file_path, write_like_original=False)

で出来ます。


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

プログラムを組む

  1. ファイルを選択する
  2. 匿名化する値を考える
  3. DICOMタグを書き換える
  4. DICOMを保存する

まずは、ファイルを選択するのですがDICOMタグを変更する画像はフォルダごと一気に変えてしまう事が多いと思いますのでフォルダで選択できるようにしましょう。以前の記事で「ダイアログで使って、フォルダでファイルを一括選択する。」で作成したモジュールを使います。

ファイルを選択するコードを書きます。

ファイルはfilenamesという変数名で受けるとします。

選択した画像にタグを変更するので、先ほど選択したフォルダ内の画像に対して一つ一つ行っていきますので、for文で処理をしていきます。繰り返す回数はfilenamesに格納されているファイル数だけ繰り返します。(下コード7行目)

その後は一つ一つDICOM画像を読み込み、DICOMタグを変更し、保存していく作業となります。DICOM画像を読み込むのはpydicomモジュールを使いますのでpydicomをimportしておきましょう。(下コードの4行目)

DICOM画像を読み込みます。DICOM画像のパスはfilenamesのリストに格納されています。リストから読みだすのはfilenames[番号]ですので、for文の中ではfilenames[i]で読みだせます。

読み込みが終わったらタグの編集に入ります。変更するタグは

患者名(0010,0010)と患者ID(0010,0020)です。それぞれ、’Patient name’と’0000000000’で書き換えをしたいと思います。

書き換えが終了しましたので画像として保存していきます。

先ほども記載しましたが保存は

save_as(file_path, write_like_original=False)

file_pathはDICOM画像を読み込んだfilenamesですので、filenames[i]でいけます。

これで、先ほど考えた流れは全て完了でプログラムは完成です。

それではプログラムを動かしてみましょう。

実行後の確認ですimage-Jで確認です。

左側が実行前、右側が実行後です。きちんと指定した値に変更されています。

プログラムは計画通りに動いてくれました。

この後は、このプログラムをexe化(アプリとして保存)していきたいとおもいます。


exe化(アプリ化)

プロフラムをexe化するためには’pyinstaller’というモジュールを使います。インストールしていない場合は、コマンドプロンプトを開いてインストールしましょう。(分からない方は「OpenCV,pydicomのインストール」をお手本にしてください。)

コマンドプロンプトを開いたのち以下のコードを実行します。

この後はコマンドプロンプト上での作業となります。

まずは、ファイルが保存しているフォルダまで移動します。コマンドは’cd’です。

pycharmをインストール先を変更していなければ以下のディレクトリとなります。

C:\Users\ユーザー名\PycharmProjects

基本的に、コマンドプロンプトを立ち上げると

C:\Users\ユーザー名\ (\は¥で表示されていると思います)

で表示されていますので、その後に

cd p

と打ち込み、キーボードの’Tab’を押す度にPから始まるフォルダが表示されていきます。’PycharmProjects’が表示されたらEnterキーを押します。

その後、同様に ’cd フォルダ名’ でプログラムを保存したフォルダに移動します。

もし面倒であったら、プログラムがあるフォルダを開いてアドレスバーを右クリック、アドレスをコピーしてコマンドプロンプトに「cd 」の後にペーストで一気に移動できます。

移動した後に以下のコマンドを実行します。

いかがでしょうか?フォルダ内にbuildとdistというフォルダが作成されdistフォルダの中に、exe化されたファイルがありませんか? これをダブルクリックすることでプログラムが実行されます。

このファイルは、pythonがインストールされていないパソコンでも利用出ることができるので大変便利です。


いかがでしたか?きちんとできましたか?

お疲れ様でした。


さいごに

今回は、DICOMの匿名化処理のプログラムを作成し、exe化(アプリ化)してみました。

ただ、pythonのバージョンが3.7を使っている方は多分エラーが出てしまっていると思いますので次回その対処法をやっていきたいと思います。


環境

  • windows10
  • python3.6.1
  • Anaconda custom(64-bit)
  • PyCharm2020.2(Communication Edition)

広告
上新電機 パソコン買取サービス

Categories:

,