以前「CT画像のWW、WLをスライダーを使って調整」の記事を書きましたが、こちらはmatplotlibを用いた記事でした。
今回はOpenCVを用いた記事を書いていこうと思います。
ちなみに、タイトルに「MRI画像」と記載していますが 、画像表示においては、CT画像の時と考え方は同じです。 何が違うのかというと、MRI画像の信号はCT値の様に水を0、空気を‐1000といった明確な基準は無く、生体から受信した信号値となりRFの送信時のゲインにより同一組織であっても信号値が変動するところがCTと違います。
スライダーを表示するには?
CpenCVを用いて画像表示し、そこにスライダーを表示するのは、
cv2.createTrackbar( name , window_name , initial_value , max_value , definition )
で作成します。
第1引数の’name’はスライダーの名前です。
第2引数の’window_name’スライダーを表示する画像表示のウインドウの名前です。
第3引数の’ initial_value ‘は初期値です。ちなみに、スライダーの最小値は0で変えることはできません。
第4引数の’max_value’は最大値です。
第5引数の’ definition ‘は関数を指定できます。
今回はウインドウレベルとウインドウ幅を指定したいのでww,wlという名前のスライダーを2つ用意します。
cv2.createTrackbar(“WL”, “dcm_image”, (maxvalue // 2), maxvalue, make_LUT)
cv2.createTrackbar(“WW”, “dcm_image”, (maxvalue // 4), maxvalue, make_LUT)
上記のコードでは、WLとWWという名前のスライダーを用意しました。それぞれ “dcm_image” という名前の画像表示に設置。
WLの初期値は最大値の半分の値に、 WWの初期値は最大値の4分の1の値に指定しました。( maxvalue は私自身がコード内で指定した 変数です。) 最大値はそれぞれ、 maxvalue 。スライダーを動かした時の関数は make_LUT という事になります。
スライダーの値を取得するには?
スライダーを動かした時の値の取得は以下のコードで行います。
cv2.getTrackbarPos(name, image_name)
第一引数のnameはスライダー名です。
第二引数は画像表示ウインドウの名前です。
matplotlibとopenCVの違い
以前、matplotlibを用いて「CT画像のWW、WLをスライダーを使って調整」をやった時は、最大のピクセル値と最小のピクセル値を指定しカラーマップを指定して表示するという形でしたが、openCVでは画像表示の最大値と最小値を指定して表示という事ができませんので、工夫が必要となります。
その対策として、ルックアップテーブルを作成します。このルックアップテーブルとは信号値1のピクセルデータはルックアップテーブル1に格納されている値。信号値500のピクセルデータはルックアップテーブル500に格納されている値と、信号値とルックアップテーブルの要素番号に格納されている値を対応させ、その値を画像サイズと同じ配列を作成し対応する場所にルックアップテーブルの対応する値を入れてあげ、その配列を表示する必要があります。
コードの流れを考える
それでは、コードを書いていくための流れを組み立てたいと思います。
- 画像パスの取得( 「画像選択のプログラムを使いやすく」 のモジュール使用)
- 画像表示用の配列を作成
- 作成した配列に画像のピクセルデータを入れる
- スライダーの作成
- 画像表示
といった流れになります。
次はコードを書いていきたいと思います。