スキップしてメイン コンテンツに移動

DCMTKを学ぶ - [dcmodify] dcmdata: a data encoding/decoding library and utility apps -


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

コメント

このブログの人気の投稿

DCMTKをインストールする

DCMTKをインストールする DCMTKをインストールするために、まずDICOM@OFFISのWebサイト( http://dicom.offis.de/dcmtk.php.en )から自分のPCのOSに合ったDCMTK3.6.2をダウンロードします。 ダウンロードするDCMTKのリスト(OS別) 本書ではWindows10(64bit)に合わせ、 DCMTK 3.6.2 - executable binariesのリストの dcmtk-3.6.2-win64-dynamic.zip をダウンロードします。 ダウンロード後は、zipファイルを解凍します。解凍には特別なツールは不要で、zipファイルを右クリックして、「すべて展開」を選択するだけです。 ダウンロード後(ダウンロードフォルダ)  右クリックで「すべて展開」  展開先を指定(同じダウンロードフォルダ)  展開後 展開できたら、わかりやすいところにフォルダを移動しましょう。私の場合は ユーザフォルダ「tatsu」の中に移動しました。読者の方も、自分の好きなフォルダに移動しましょう。例えば、デスクトップでも構いません。  ユーザフォルダ内にDCMTKフォルダを移動した例 次はDCMTKの場所をPCに知らせるために、環境変数パスを設定します。 設定が必要な環境変数は2つです。 ~DCMTKフォルダ/bin (DCMTKの実体となるバイナリまでのパス) ~DCMTKフォルダ/share/dcmtk/dicom.dic (DCMTKの特定の機能で必要なDICOMタグ辞書) 設定は次のように行います。 まず、フォルダを開き、左側のツリー表示内の「PC」を右クリックし、最下段のプロパティを選択します。 プロパティを選択  次に、画面左側のシステムの詳細設定を選択します。  立ち上がったシステム画面からシステムの詳細設定を選択 システムのプロパティウィンドウが立ち上がりますので、その下段の環境変数を選択します。 環境変数を選択 環境変数ウィンドウが起動します。 環境変数ウィンドウ 次に、環境変数を追加します。追加は、下段の新規ボタンから行います。 新規

はじめに-DCMTK-

はじめに  このブログでは、DCMTK(v.3.6.2)のパッケージに含まれるコマンドラインツールの使い方を紹介していきます。  今回、DCMTKを理解して、より身近なツールにしたいという個人的なモチベーションでこのブログを書き始めました。  DCMTK(DICOM Toolkit)は、その名の通り、医用画像の国際標準規格であるDICOMとして作成された画像を取り扱うためのコマンドラインインターフェースで操作するツールで、ANSI C/C++で書かれたオープンソースソフトウェアです。 DICOMイメージファイルの検証、構築、変換、オフラインメディアの処理、ネットワーク接続を介したイメージの送受信、およびテスト用のイメージストレージとワークリストサーバーのソフトウェアが含まれています。  私がDCMTKに出会ったのは、もうDCMTKが成熟していたバージョン3.6.0の時でした。(この記事を執筆時点の最新バージョンは3.6.2)。  初めて使ったのは、仕事でDICOM接続テストに同行させていただいた時でした。 私はすっかりGUI(グラフィカルユーザーインターフェース)に慣れ親しんでいたので、DCMTKのようにCLI(コマンドラインインターフェース)で動作させるツールは使い方がわからないので、四苦八苦しました。  DCMTKを使いはじめ、徐々にそのすごさがわかってきました。例えば、OsiriXなどのソースなどを見ていると、直接DCMTKが利用されているではありませんか。このようなことから、きっとこのツールを使えることで得られるメリットは多いのではないかと感じるようになりました。  そして、よし、もっと使おう!と、ここも非常に単純に決めたのはいいものの、リファレンスは全て英語で、うまく動かなかったりという技術的につまづくことが多く、この点はとてもペインフルでした。  このような経験から、私のような痛みなく、このツールを使える人が増えて欲しいという単純な発想で、この技術ブログを書き始めました。  このブログを読んでいただく中で私の間違いに気づいてくださる読者の方もいらっしゃるだろうと思いつつも、自分の最初の直感"きっとこのツールを使えることで得られるメリットは多いのではないか"という気持ちを大切にしたいと考え、このキー

DCMTKを学ぶ - [dcmdump] dcmdata: a data encoding/decoding library and utility apps -

DCMTKを学ぶ - [dcmdump] dcmdata: a data encoding/decoding library and utility apps -  dcmdumpユーティリティは、DICOMファイル(ファイル形式または生データセット)の内容をテキスト形式でstdoutにダンプします。つまり、コマンドプロンプトの場合は、コマンドプロンプト画面上に、DICOMファイルの内容がテキストで羅列されます。   説明を飛ばしてやり方だけ知りたい方は、ページ最後を参照ください。 説明   dcmdumpユーティリティは、DICOMファイル(ファイル形式または生データセット)の内容をテキスト形式でstdoutにダンプします。 非常に大きな値フィールド(例えば、ピクセルデータ)を有する属性は、「(not loaded)」とされます。文字列値のフィールドは角括弧([])で区切られます。このマッピングが明示的にオフにされない限り、既知のUIDは、等号(例えば、「= MRImageStorage」)を前に付けた名前によって表示されます。空の値フィールドは、 "no value available(使用可能な値はありません)"と記述されます。  dcmdumpが生データセット(ファイル形式メタヘッダーなしのDICOMデータ)を読み取る場合、ファイルの最初の数バイトを調べて転送構文を推測しようとします。 転送構文を正しく推測することは必ずしも可能ではないため、可能な限りデータ・セットをファイル・フォーマットに変換する方がよいです(dcmconvユーティリティを使用して下さい)。また、-fおよび-t [ieb]オプションを使用して、dcmdumpに特定の転送構文を持つデータセットを強制的に読み取らせることもできます。 コマンドラインインターフェースからの基本的な使い方 >dcmdump [options] dcmfile-in... dcmdump :コマンド [options] :オプションを指定するデフォルト位置 dcmfile-in:入力されるdcmファイルのURI/URL (複数のDICOMファイルを保持するディレクトリでも可) 一般的なオプション (左:省略記載、右:略なし記載)   -h    --h