DCMTKを学ぶ - [dcmodify] dcmdata: a data encoding/decoding library and utility apps -
DICOMファイルを修正します。
説明を飛ばしてやり方だけ知りたい方は、ページ最後を参照ください。
説明
dcmodifyは、DICOMファイルのタグや項目の変更、挿入、削除を可能にするツールです。値の多重度> 1のシーケンスおよびタグもサポートされています。 Metaheaderの情報とタグのVRは、dcmodifyで直接変更することはできません。タグの変更に加えて、dcmodifyには、ユーザが指定したときに入力ファイルを処理するためのdcmodifyの強制入力オプションと、結果ファイルの出力フォーマットを制御する出力オプションが用意されています。複数の変更を実行する必要がある場合、dcmodifyはコマンドラインに表示される順序と同じ順序で変更を行います。 dcmodifyは、指定された値がその値表現(VR)と一致するかどうかをチェックしません。通常、エラーメッセージが表示されますが、一般的にユーザーは適切なVRを使ってください。
dcmodifyが挿入すべきタグを知らない場合、タグのVRはUNに設定され、コマンドラインで指定された値は16進数のシリーズとして解釈されます。この動作を回避するには、これらのタグを辞書に挿入してください。また、-iunオプションを指定すると、dcmodifyにUN値を変更せずに残すことができます。オプション-uを使用すると、dcmodifyはすべてのVR = UN属性をOBとして保存します。
dcmodifyは、いわゆるタグパスを使ってシーケンスでタグにアクセスすることができます。構文は次のとおりです。
{sequence[item-no].}*element
ここで 'sequence'は(0008,1111)のようなシーケンスタグまたはタグの辞書名です。 'item-no'は、アクセスするアイテム番号を示します(ゼロから数えます)。 'element'は作業するターゲットタグを定義します。タグは、(0010,0010)として直接指定することも、対応する辞書名 "PatientName"で指定することもできます。 '*'は、DICOMファイルのより深いレベルにアクセスするためにシーケンス文を繰り返すことができることを示します(「使用例」を参照)。 'item-no'では、ワイルドカード文字 '*'を使用して、周囲のシーケンス内のすべての項目を選択することもできます(以下のセクションのWILDCARDSを参照)。
-iオプションを使用して複数のノード(単一要素ではない)からなるタグ・パスを挿入すると、行方不明のパス要素(アイテム、シーケンス、リーフ要素)は自動的に挿入されます。アイテムのワイルドカードでは機能しません:周囲のシーケンスに単一のアイテムが存在しない場合、dcmodifyはアイテムを決定できません。ただし、'5'のようなアイテム番号を指定すると、6つのアイテムすべて(ゼロから数えます)は挿入モードで自動的に生成できます。このとき、既に2つのアイテムが存在する場合、残りのアイテム(4)が挿入されます。
コマンドラインインターフェースからの基本的な使い方
>dcmodify [options] dcmfile-in...- dcmodify :コマンド
- [options] :オプションを指定するデフォルト位置
- dcmfile-in:入力されるdcmファイルのURI/URL (複数可)
一般的なオプション
(左:省略記載、右:略なし記載)
-h --help
この機能のヘルプを表示します
--version
この機能に必要なライブラリを含めてバージョンを表示します
--arguments
コマンドライン引数を拡張します
-q --quiet
クワイエットモード。エラーやワーニングを表示しません
-v --verbose
詳細モード。詳細ログを表示します
-d --debug
デバッグモード。デバッグ情報を表示します
-ll --log-level [l]evel: string constant (fatal, error, warn, info, debug, trace)
ロガーレベルを指定します
-lc --log-config [f]ilename: string
ロガーにコンフィグファイルを指定します。
インプットオプション
input file format:+f --read-file
ファイルフォーマットまたはデータセットを読み取る(default)
+fo --read-file-only
ファイルフォーマットのみ読み取る
-f --read-dataset
ファイルメタ情報を除くデータセットを読み取る
+fc --create-file
ファイルが存在しな場合ファイルフォーマットを作成
input transfer syntax:
-t= --read-xfer-auto
転送構文を認識する (default)
-td --read-xfer-detect
指定された転送構文を持つファイルメタヘッダーを無視する
-te --read-xfer-little
explicit VR little endianで読み込む
-tb --read-xfer-big
explicit VR big endianで読み込む
-ti --read-xfer-implicit
implicit VR little endianで読み込む
parsing of odd-length attributes:
+ao --accept-odd-length
奇数長の属性を許可する (default)
+ae --assume-even-length
奇数長の属性に1byte加算して真の値を仮定する
automatic data correction:
+dc --enable-correction
自動データ補正を許可する (default)
-dc --disable-correction
自動データ補正を許可しない
bitstream format of deflated input:
+bd --bitstream-deflated
deflated bitstreamを使用 (default)
+bz --bitstream-zlib
deflated zlib bitstreamを使用
処理オプション
backup input files:
--backup
変更する前にファイルをバックアップする(デフォルト)
-nb --no-backup
ファイルをバックアップしない(危険)
insert mode:
-i --insert "[t]ag-path=[v]alue"
位置tにパスを値vで挿入(または上書き)する
-if --insert-from-file "[t]ag-path=[f]ilename"
位置tのパスをファイルfの値で挿入(または上書き)する
-nrc --no-reserv-check
プライベート保有タグをチェックしない
modify mode:
-m --modify "[t]ag-path=[v]alue"
位置tのタグを値vに変更する
-mf --modify-from-file "[t]ag-path=[f]ilename"
位置tのタグをファイルfの値に変更する
-ma --modify-all "[t]ag=[v]alue"
ファイル内のすべての一致するタグtを値vに変更する
erase mode:
-e --erase "[t]ag-path"
タグ/項目を位置tで消去する
-ea --erase-all "[t]ag"
ファイル内のすべての一致タグを消去する
-ep --erase-private
ファイルからすべてのプライベートデータを消去する
unique identifier:
-gst --gen-stud-uid
新しいスタディインスタンスUIDを生成する
-gse --gen-ser-uid
新しいシリーズインスタンスUIDを生成する
-gin --gen-inst-uid
新しいSOPインスタンスUIDを生成する
-nmu --no-meta-uid
修正されたデータセット内のUIDに関連する場合はmetaheader UIDsを変更しない
error handling:
-ie --ignore-errors
エラーが起こったとき、ファイル処理を継続する
-imt --ignore-missing-tags
修正時、消去時にタグが見つかりませんというエラーは、処理の成功として取り扱う
-iun --ignore-un-values
VR UNのエレメント(タグ)は書き込みをしない
アウトプットオプション
output file format:
+F --write-file
ファイル形式を書き込む (default)
-F --write-dataset
ファイルメタ情報なしでデータセットを書き込む
output transfer syntax:
+t= --write-xfer-same
入力と同じ転送構文で書き込み(デフォルト)
+te --write-xfer-little
explicit VR little endianで書き込み
+tb --write-xfer-big
explicit VR big endianで書き込み
+ti --write-xfer-implicit
implicit VR little endianで書き込み
post-1993 value representations:
+u --enable-new-vr
新しいVR(UN/UT)のサポートを有効にする (default)
-u --disable-new-vr
新しいVRのサポートを無効にし、VRをOBに変換する
group length encoding:
+g= --group-length-recalc
もしあればグループ長を再計算する (default)
+g --group-length-create
常にグループ長の要素を書き込む
-g --group-length-remove
グループ長要素なしで常に書き込み
シーケンスとアイテムの長さエンコード:
+le --length-explicit
明示的な長さの書き込み(デフォルト)
-le --length-undefined
定義されていない長さの書き込み
データセット末尾のパディング(--write-datasetではなく):
-p= --padding-retain
パディングを変更しない(デフォルト以外の場合は--write-dataset)
-p --padding-off
パディングなし(--write-datasetの場合は暗黙的)
+p --padding-create [f]ile-pad [i]tem-pad: integer
ファイルを複数のfバイトに整列させ、項目を複数のiバイトに整列させる
プライベートタグ
プライベートタグを扱う際に考慮する必要があるいくつかの問題があります。 ただし、予約タグ(gggg、00xx)の挿入や変更は常に有効です。
使用例
サンプルDICOMデータ:http://www.jira-net.or.jp/dicom/dicom_data_01_03.html
NM_LEE_IR6.dcm
サンプルデータをデスクトップに移動しておきます。
患者名を変えてみます。
コマンドプロンプトで、次のように入力しました。
>dcmodify -i (0010,0010)="DCMTK^TARO" C:\Users\tatsu\Desktop\NM_LEE_IR6.dcm
(コマンドの意味)
dcmodify :コマンド
-i (0010,0010)="DCMTK^TARO" :オプション(括弧やダブルクオーテーションは省略できます。ただし、文字列の間に半角スペースやハットなどを書くときはダブルクオーテーションが必要です。)
dcmfile-in:C:\Users\tatsu\Desktop\NM_LEE_IR6.dcm
※コマンドとオプションの間、オプションとdcmfile-inの間には半角スペースを入れてください。
入力後、Enterで実行します。入力に指定したNM_LEE_IR6.dcmのバックアップが作成され(NM_LEE_IR6.dcm.bak)、NM_LEE_IR6.dcmファイルが同じ階層に新たに作成されます。
CMD画面
変更前の指名(偽名)
変更後の氏名「DCMTK^TARO」
このように、標準のタグであれば修正が可能です。
次に、UIDsを変更してみます。
一般的なDICOMサーバやワークステーションはデータを重複させることを避けるように設定されています。この設定に利用されるのがUIDです。一枚一枚のDICOMファイルを世界に1つしかないデータとして一意性を持たせるためにこれらのUIDが付加されます。
もしバックアップを作成し、修正後の画像と両方を残したい場合は、修正後の画像のUIDを変更することでサーバーにも保管できるようになります。
次のようにコマンドを入力します。
>dcmodify -gst -gse -gin C:\Users\tatsu\Desktop\NM_LEE_IR6.dcm
(コマンドの意味)
dcmodify :コマンド
-gst -gse -gin :オプション(UIDを変更します)
dcmfile-in:C:\Users\tatsu\Desktop\NM_LEE_IR6.dcm
※コマンドとオプションの間、オプションとdcmfile-inの間には半角スペースを入れてください。
入力後、Enterで実行します。入力に指定したNM_LEE_IR6.dcmのバックアップが作成され(NM_LEE_IR6.dcm.bak)、NM_LEE_IR6.dcmファイルが同じ階層に新たに作成されます。
CMD画面
変更前
(0008,0018)、(0020,000D)、(0020,000E)に着目してください
変更後
以上
Visionary Imaging Services, Inc.
Tatsuaki Kobayashi
コメント
コメントを投稿