MATLABでウィンドウ条件を変更する

MATLABでCTやMRIのウィンドウ条件を変更する話。

Image processing toolbox

画像関連の関数がパッケージになったツールボックスが用意されている。

jp.mathworks.com

DICOM画像を読み込んで表示する場合はこんな感じ。

img = dicomread('CT-MONO2-16-ankle.dcm');
f = imtool(img);
incontrast(f);

画像と輝度ヒストグラムが表示される。

輝度ヒストグラムウィンドウにウィンドウレベル(WL)/ウィンドウ幅(WW)を入力することで表示条件を調整できる。さらに「データの調整」ボタンを押せば0-1に画像をキャストできる。

対話的に作業するならこれで事足りるが、大量の画像を処理したいときには困る。

imadjust(I, [high low], [high low])

画像コントラストを調整するために、imadjust関数が用意されている。ただ、この関数は基本的に低コントラスト画像を強調するために使うことを前提としているらしく、扱える数値が0〜1の間だけという制限があってint16が使われることが多いDICOM画像とは相性が悪い。

dcmadjust(i, wl, ww)

ということで関数を書いた。

グレースケール画像とWL, WWを与えると0-1にスケーリングして返してくれる。0-1なのでそのままimwrite()で書き出せる。

function result = dcmadjust(img, wl, ww)

img = double(img);

min = double(wl - ww / 2);
max = double(wl + ww / 2);

img(img>max) = max;
img(img<min) = min;

result = (img - min * ones(size(img))) / ww;

使用例

img = dicomread('CT-MONO2-16-ankle.dcm');
imtool(img);

img_adjusted = dcmadjust(img, 1000, 2000);
imtool(img_adjusted);