第 18 回ＣＡＤセミナー

主催：日本放射線技術学会 画像分科会
共催：学術委員会，中部部会
日時：2005 年 9 月 10 日 1pm-5pm, 11 日 9am-5pm
場所：岐阜大学工学部応用情報学科／会議室および演習室
今回の演習は，岐阜大学で開催したＣＡＤセミナー（第３回，第６回，第９回，第１２回，１５回）の続きとして，さらに内容を拡張して企画しました．残念ながら，プログラミング初心者の方は対象にしておりません．for 文，if 文などの C 言語の基礎と，配列の取り扱いを理解された初級以上の知識が必要です．初心者の方は，過去のＣＡＤセミナーの内容の復習をお願いします．
セミナーのページ：http://www.fjt.info.gifu-u.ac.jp/cad-sem
エディタ（xemacs, emacs, mule）の使い方：
http://toba.yanagi.gifu-u.ac.jp/freshers/2001/D/index.html＜９月１０日（１日目）＞＜９月１１日（２日目）＞

12:20 〜 13:00

9:10 〜 9:40

受付
（３階会議室工学部Ｆ棟・Ｆ３０９）

13:00 〜 13:05

開始のご挨拶

担当：原（岐阜大学）

13:10 〜 13:40

特別講演１
講師：岐阜大学・藤田広志

特別講演２
講師：九州大学・杜下淳次

9:40 〜 10:00

演習Ｒ解説：空間フィルタリング

10:00 〜 12:00

演習Ｒ

12:00 〜 13:00

昼食（受付時に有料で承ります）

13:00 〜 13:20

演習Ｓ解説：

先生

13:40 〜 13:50

概要説明・ガイダンス

13:50 〜 14:10

演習Ｎ解説：ＤＩＣＯＭ画像の取り扱い

14:10 〜 15:10

演習Ｎ

15:10 〜 15:30

演習Ｐ解説：ＣＴ画像表示の基礎

15:30 〜 17:00

演習Ｐ

13:20 〜 14:20

演習Ｓ

17:00 〜 17:30

自由討論，質問会．

14:20 〜 14:40

演習Ｔ解説：骨部抽出

半日の復習・明日の予定について

14:40 〜 16:40

演習Ｔ

担当：原（岐阜大学）

16:40 〜 16:55

成果報告

懇親会（17:45 ころバス出発）

16:55 〜 17:00

終了のご挨拶

18:30 〜 21:00

先生

しきい値処理とモルフォロジ＜セミナースタッフ＞
画像分科会 ： 原スタッフ

武史（岐阜大学）

学術委員会：冨吉司（鹿児島大学）

中部部会：市川勝弘（名古屋大学）： 藤田広志（岐阜大学），松原友子（名古屋文理大学），福岡大輔（岐阜大学）
畑中裕司（岐阜工業高等専門学校），中川俊明（岐阜大学），篠原範充（岐大・産官学）【注意】この演習で使用するデータは，日本放射線技術学会が刊行予定のＣＴ画像を利用します．DICOM デー
タは，GE MEDICAL が公開するテスト用ＣＴデータです．ＣＴ画像の利用にあたって，利用許諾書に署名いただきます．第５回画像処理コンテストで配布するデータと同じです．

演習Ｎ：DICOM 画像の取り扱い【注意】DICOM は，不用意に扱うべきでない個人情報を含んでいます．ファ
イルの取り扱いは注意が必要です．
目的：DICOM 画像の取り扱いについて，理解を深めましょう．
必要な知識：・データのリスト構造，８進，１０進，１６進の表記方法／変換方法
演習を行うディレクトリ
programs/n?/ で行います．n1, n2, n3 ディレクトリがあります．
【演習】
演習Ｎ１：Linux のコマンドで DICOM の中身を見てみましょう(i)n1 ディレクトリへ移動(ii)

od -c CT000001.dcm ¦ lessを実行してください．

ファイルの中身が文字列で表示されます．DICM の文字列，GE MEDICAL の文字列は表示されましたか？
演習Ｎ２：DICOM の中身をみてみましょう：n2 ディレクトリで作業
プログラムで DICOM のタグ，ＶＲ，内容を見てみましょう．
(i)n2 ディレクトリへ移動(ii)

コンパイル：gcc main.c dicom.c -o dicom(iii)

実行：dicom CT00001.dcm
タグなどの内容が表示されます．巻６：データ辞書（dict ディレクトリに PDF）
を参考に解読してください．

演習Ｎ３：画像部分の抽出(i)n3 ディレクトリへ移動．main.c をコンパイル．

(ii)

実行：

a.out CT00001.dcm 512 512 100001.raw

これで 1.raw という画素値のファイルのみを抽出します．512 512 は N2 で調べた値です．
複数画像を処理する場合には，この操作を繰り返し，cat コマンドで１つのファイルにします．（例：cat 100001.raw 100002.raw 100003.raw > case1.raw）

演習Ｐ：ＣＴ画像の表示の基礎
目的：ＣＴ画像の表示について，MIP 表示を実現しましょう．
必要な知識：
・１次元配列における３次元データの取り扱い方，画素値へのアクセス方法
・ＣＴ画像のウィンドウ処理，最大値の見つけ方
さらに拡張するために必要な知識：・（画像を回転させるためには）画素値の補間方法・（MIP 以外の表示方法のためには）

表示方法の原理の理解演習を行うディレクトリ
programs/p?/ で行います．p1, p2, p3 ディレクトリがあります．
それぞれ３つの演習 P1, P2, P3 に対応します．P2 の作成例は pa ディレクトリにアリ．
【演習】
演習Ｐ１：MIP 表示プログラムの動作確認：p1 ディレクトリで作業(i)p1 ディレクトリでコンパイル（make -f Makeﬁle.linux）(ii)

実行：proc ../../data/case1.raw 512 512 -300 1700 0 0 noswap
512, 512 は画像の幅，高さを指示します．
-300, 1700 はウィンドウレベル，ウィンドウ幅を指示します．
0 は H.U. に整数値が加えられていた場合，減算します．次の 0 はヘッダーバイト数．
noswap は読込むデータのエンディアンを変更しません．

(iii)

proc をいったん終了し，proc のみ入力してヘルプを読み，Key assign を理解してください．そして，もう一度実行してみてください．

演習Ｐ２：コロナル方向からの MIP 表示プログラム作成：p2 ディレクトリで作業
p1 のプログラムを，コロナル方向から MIP するように変更しましょう．
ヒント：表示する画像の幅，高さが変わります．Scale 変数を調整して体軸方向の補正を行いましょう．再構成間隔は 2mm，画素間隔は 0.625mm です．引数で与えましょう．
（例：p2a．proc../../data/case1.raw 512 512 -300 1700 0 0 noswap 0.625 2,0 ）演習Ｐ３：サジタル方向からの MIP 表示プログラム作成：p2 ディレクトリで作業
p2 を参考にがんばりましょう．p2 の結果を利用しましょう．

演習Ｒ：ＣＴ画像の空間フィルタリング
目的：ＣＴ画像に畳み込み演算を行いましょう．
必要な知識：
・畳み込みの演算方法
・アンシャープマスクの実現方法（演習Ｒ４）
さらに拡張するために必要な知識：・（高速に処理するには）キャッシュの抑制：カーネルをキャッシュへ・（さらに高速に処理するには）データ保存方法の多次元化演習を行うディレクトリ
programs/r?/ で行います．r1, r2, r3, r4 ディレクトリがあります．
それぞれ４つの演習に対応します．
【演習】
演習Ｒ１：平滑化を実現しましょう：r1 ディレクトリで作業 （結果例：r1a）(i)

r1 ディレクトリの function.c を確認・編集します．

(ii)

実行：proc ../../data/case1.raw 512 512 -300 1700 0 0 noswap
キー「ｇ」を押します．function.c の関数が実行されます．

(iii)

処理が終了したら，ウィンドウ処理を行い，結果を確認しましょう．

演習Ｒ２：微分を実現しましょう：r2 ディレクトリで作業(i)r2 ディレクトリの function.c を確認・編集します．

(ii)

実行方法は演習Ｒ１と同じです．値を正の値にするように注意しましょう．

(iii)

function.c を変更しながら，３方向の微分を実現しましょう．

演習Ｒ３：２階微分を実現しましょう：r3 ディレクトリで作業(i)演習Ｒ２を参考に実習しましょう．function.c を改造します．

(ii)

実行方法は演習Ｒ１と同じです．

演習Ｒ４：アンシャープマスク処理を考えましょう：r4 ディレクトリで作業演習Ｒ１〜３を参考に実習しましょう．function.c を改造します．

演習Ｓ：ＣＴ画像のしきい値・閾値処理，モルフォロジ
目的：ＣＴ画像のしきい値・閾値・モルフォロジ処理を実現しましょう
必要な知識：
・基本的な画像処理の考え方（しきい値の意味，閾値の意味）
・モルフォロジ処理の実現方法（演習Ｓ３）と濃淡画像での実現方法／計算定義演習を行うディレクトリ
programs/s?/ で行います．s1, s2, s3, sa ディレクトリがあります．
それぞれ s1 から s3 は演習Ｓ１からＳ３に対応し，sa は s3 の作成例です．
【演習】
演習Ｓ１：しきい値処理を実現しましょう：s1 ディレクトリで作業(i)s1 ディレクトリの function.c を確認・編集します．

(ii)

引数でしきい値を与えるように，image.c の get̲args 関数を変更します．

(iii)

実行：proc ../../data/case1.raw 512 512 -300 1700 0 0 noswap しきい値
キー「ｇ」を押します．function.c の関数が実行されます．

(iv)

処理が終了したら，ウィンドウ処理を行い，結果を確認しましょう．

演習Ｓ２：閾値処理を実現しましょう：s2 ディレクトリで作業 （結果例：s2a）(i)

s2 ディレクトリの function.c を確認・編集します．

(ii)

実行方法は演習Ｓ１と同じです．引数が２つになるのでさらに変更が必要です．

演習Ｓ３：モルフォロジ処理を実現しましょう：s3 ディレクトリで作業 （結果例：s3a）(i)Ｓ２を参考に実習しましょう．function.c を改造します．

(ii)

モルフォロジ処理を繰り返す回数も引数で指定するように工夫しましょう．

実行例：proc ../../data/case1.raw 512 512 -300 1700 0 0 noswap 繰返し回数
演習Ｓ４：（自由演習）
2 値画像のモルフォロジを実現しましょう：s4 ディレクトリで作業演習Ｓ１〜３を参考に実習しましょう．function.c を改造します．

演習Ｔ：ＣＴ画像における骨部の抽出
目的：自ら処理方針／評価方法を計画し，胸部ＣＴ画像における骨部抽出に挑む
必要な知識：
・基本的な画像処理の考え方（しきい値の意味，閾値の意味）
・フィルタ処理（演習Ｒ），閾値，しきい値，モルフォロジ処理の実現方法（演習Ｓ）
・処理の計画と評価方法の決定演習を行うディレクトリ
programs/t/ で行います．ここには，何もしない function.c があります．function.c の中の関数は，キー「g」を押すと実行されます．function.c の中の関数を編集・コンパイル
して演習を行ってください．