2021-09-17に投稿

DICOM Toolkit(dcmtk) 使い方

はじめに

DICOM Toolkit(dcmtk)の使い方を毎回調べるのが馬鹿らしいのでまとめる。

日本語で教えてくれる優しいところがないので、とりあえず動かすを第一目標に調べた結果を残す。
基本的なオプションのみまとめる。もっと知りたければ頑張ってマニュアル読む。

DICOM的なワードもそのうちまとめる。

Storage SCP(受信)

storescp.exe -v -aet [AEタイトル] [port]

  • -v:詳細を出すだけなのでなくてもいい。
  • -aet:自身(SCP)のAEタイトル。後に続くportも自身(SCP)のもの。

例:AEタイトル=TESTSVR、ポート=4006でDICOM受信したい場合
storescp.exe -v -aet TESTSVR 4006


実行後は受付待ちに入るので、他の操作がしたいなら別窓開いて作業する。

Storage SCU(送信)

storescu.exe -v -aet [送り元AEタイトル] -aec [送り先AEタイトル] [hostname] [port] [DICOM File]

  • -v:詳細を出すだけなのでなくてもいい。
  • -aet:自身(SCU)のAEタイトル。
  • -aec:相手(SCP)のAEタイトル。後に続くhostname,portも相手(SCP)のもの。
  • [DICOM File]:転送したいDICOMファイル。相対パス可。ワイルドカード(*)可。

例:自身のAEタイトル=TESTSVR1から
  相手のAEタイトル=TESTSVR2(ホスト名=SCPSVR、ポート=4006)に
  カレント下のdataフォルダの拡張子.dcmのファイルのみDICOM送信したい場合
storescu.exe -v -aet TESTSVR1 -aec TESTSVR2 SCPSVR 4006 .\data*.dcm


Modality Worklist(MWM) SCP

あらかじめWorklistファイル(.wl)を作っておく必要がある。
毎回データ作るの大変なのでpowersehllで自動生成するスクリプトを書いたが公開するには恥ずかしいレベルなので割愛。

1. データのもとになる.dumpファイルを作る

[dcmtk置いたパス]\share\dcmtk\wlistdb\OFFISにサンプルがあるのでそれを参考に作る
※1ファイル1件

(0008,0050) SH  00000
(0040,0100) SQ
(fffe,e000) -
(0008,0060) CS  MR
(0032,1070) LO  BARIUMSULFAT
(fffe,e00d) -
(fffe,e0dd) -

注意:上記は説明用にだいぶ端折ってるので、必須タグとかは自分で書くこと。

基本は(gggg,eeee) [VR] [Value]の順に一行一タグで書いていく。
SQタグは構造示すタグが挟まるので、上記のようにVRはハイフン、値は無しで書く。

軽く触れておくと
* (fffe,e000) : SQItem開始
* (fffe,e00d) : SQItemデリミタ(SQItemがLength不明の場合)
* (fffe,e0dd) : SQデリミタ(SQ全体がLength不明の場合)
詳細はPS3.5あたりに書いてあるのでそちらを参照のこと。

2.dumpファイルからWorklistファイルを作る

dump2dcm [1で作ったdumpファイルのパス] [出力先のパス]


例:カレント下のdataフォルダのwklist1.dumpを同じフォルダのwklist1.wlにDICOM変換したい場合
dump2dcm.exe .\data\wklist1.dump .\data\wklist1.wl


複数作るだろうからスクリプト書いてぐるぐる回すといい
確か勝手に同名ファイルは作ってくれなかったはず。

3.WorklistファイルをC-FINDを受けるAEタイトル名と同名フォルダに入れる(フォルダ名注意)

SCUからC-FINDかけてくるAEタイトルのフォルダを作って、その中に入れておく必要あり。
次の手順と合わせてよく忘れるので注意。
また、"lockfile"もAEタイトルフォルダの中に作っておく(wlmcspfs流すときに必要)


例:問い合わせを受けるAEタイトル=MWMTEST、カレント下のdataフォルダにWorklistファイル(wklist1.wl)を置く場合
.\data\MWMTEST\wklist1.wl
.\data\MWMTEST\lockfile


4.MWM受付待ち状態にする(パス指定注意)

wlmscpfs.exe -v -csk -dfp [3のAETITLEフォルダの親のパス] [port]

  • -v ; 詳細表示
  • -csk : キャラクタセット(文字セット)を維持。指定もできるけど基本的には維持で取っておけばあんまり困らない。
  • -dfp : データファイルパス。AEタイトルフォルダの一個上を指定。このパスの下にあるAEタイトルを探すことになるらしい。一番はまったところ。注意。

例:カレント下のdataフォルダにAEタイトルフォルダ作ってWorklistファイル(wklist1.wl)を置いた場合
wlmscpfs.exe -v -csk -dfp .\data 4006


実行後は受付待ちに入るので、他の操作がしたいなら別窓開いて作業する。

番外:日本語の取り扱い

Specific Character Set(0008,0005)に"\ISO 2022 IR87"セットして、
バイナリエディタ使って、日本語の前後にエスケープ(iB 24 42 日本語 1B 28 42)入れて、
Lengthも合わせてみたけどうまくいかなかった。
一時調査中断中。

一方でUTF-8でならうまくいったので、こだわりがなければこっちで。
1.Specific Character Set(0008,0005)に"ISO IR192"セット
2.dumpに日本語を入力してUTF-8で保存
3.メモ帳編集の場合BOMが入ったので先頭3バイト削除
4.dump2dcmでwlファイル作る

Query/Retreive(Q/R) SCP

1.DICOMファイルのIndex作成

Q/RさせるDICOMファイル群のIndexファイルを作る(これを使ってQueryを返すらしい。)

dcmqridx.exe -v [index出力先フォルダ] [対象のDICOMファイル]


例:カレント下のdataフォルダにDICOMファイルがあり、同じフォルダにIndexファイルを吐き出す場合
dcmqridx.exe -v .\data .\data*.dcm


2.設定ファイルを作る

[dcmtk置いたパス]\etc\dcmtk\dcmqrscp.cfgにサンプルがあるのでコピーして使う

2-1.Q/R SCU(問い合わせ元)の情報を設定する

Host TableのBEGINからENDの間に
[設定名] = ([AEタイトル], [HostName], [Port])
の形で書く。


例:AEタイトル=TESTSVR1、HostName=SCUTEST、Port=4006をqrtestの名前で設定する場合
HostTable BEGIN
qrtest = (TESTSVR1, SCUTEST, 4006)
HostTable END


なお、複数の設定を一個の設定にまとめたりもできるとのこと
[設定名1] = ([AEタイトル], [HostName], [Port])
[設定名2] = ([AEタイトル], [HostName], [Port])
[設定名ALL] = [設定名1], [設定名2]


例:AEタイトル=TESTSVR1、HostName=SCUTEST1、Port=4006をqrtest1、
  AEタイトル=TESTSVR2、HostName=SCUTEST2、Port=4006をqrtest2、
  上記二つをqrtestallまとめる場合
HostTable BEGIN
qrtest1 = (TESTSVR1, SCUTEST1, 4006)
qrtest2 = (TESTSVR2, SCUTEST2, 4006)
qrtestall = qrtest1, qrtest2
HostTable END


2-2.Q/R SCP(問い合わせ先)の情報を設定する

AE TableのBEGINからENDの間に
[AEタイトル] [Q/RさせるDICOMファイル置き場] [Read/Write] [(最大検査数, 最大検査Byte)] [対応するHostTable設定名]
の形で書く。

DICOMファイル置き場はここで相対書くとどこからになるか不明。試したことはない。
やってみたくなったら試して結果を追記する。

Read/WriteはQRで書いてどうするんだろうと思うけどわからないときはRW
最大検査数、バイトに関してはある程度で絞っておかないと用意した検査数によっては泣きたくなるので適宜。


例:AEタイトル=QRSCPAE、ファイル置き場=H:DICOM¥QRSCP¥QRTEST、最大検査を200件、1024MBとし、qrtest1に設定した相手のみ有効とする場合
AETable BEGIN
QRSCPAE H:DICOM¥QRSCP¥QRTEST RW (200,1024mb) qrtest1
AETable END


3.Query待ち状態にする

dcmqrscp -v -c [設定ファイルのパス] [Port]
* -v : 詳細表示
* -c : 設定ファイルのパス指定


例:カレント下のetcに2の設定ファイルがあり、Port=4006で受け付ける場合
dcmqrscp -v -c .\etc\dcmqrscp.cfg 4006


実行後は受付待ちに入るので、他の操作がしたいなら別窓開いて作業する。

Modality Performed Procedure Step(MPPS)

ppsscpfsなるものがあるらしいが、見当たらない。
誰か教えてほしい。

ツイッターでシェア
みんなに共有、忘れないようにメモ

RedCol

医療モダリティの開発に携わる底辺PG。主にDICOM周りをやるも毎度英語の壁にぶち当たり、泣きそうになりながら調べ続けて10年、いい加減アウトプットしときたいなと思ってようやく書き始める。飽き性なのでいつまで続くか心配。 スクリプト言語が好き、同じことを5回以上やるならスクリプト書こうとする。但し、書いたスクリプト保存しようとすると似たようなスクリプトが既に保存先にあることが多々あって困る。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント