3D Slicerのカラーバーに独自のルックアップテーブルを適用させる方法(LUTの作り方)
こんにちは、個人事業OguLinks代表の小倉(@jun_ogulinks)です。
3D Slicerにはプリセットとして結構多くのカラーバーが用意されています。
以前、私が書いた以下の記事(「3D Slicerの使い方 基本の基 データインポートからカラーバーの出し方まで」)でカラーバーの出し方については解説をしました。
しかし、自分が使いたいと思うカラーバーの色と完全に一致するものが必ずあるという訳ではありません。
これは3D Slicerに限らない話です。
今回は3D Slicerで使いたいカラーバーの色の種類(ルックアップテーブル)がなかった時の対処法の紹介です。
この記事では以下のことが分かるようになっています。
- 3D Slicerでカラーバーのルックアップテーブル(LUT)を作る方法
- LUT作製方法の種類
- LUTの保存形式(2種類)
- LUTファイルの読み込み
3D Slicerのカラーバーを編集するためのcolorモジュールとは
3D SlicerにはColorモジュールと呼ばれる標準実装されたモジュールがあります。
Colorモジュールは下図の手順にそって Modules: > Informatics > Colors とクリックすることで開くことができます。
このColorモジュールを使ってLUTを作製していくわけですが、編集に関していくつかルール的なものがありますので、それを理解しておく必要があります(難しくはありません)。
私もとあるときに「どうやって独自LUTを作るのだろう?」と思って調べたことがあるのですが、まず最初に以下の情報が目に留まりました。
これは3D Slicerのコミュニティに投稿されていたものです。
Andras Lassoさんの回答を以下に引用します。
Edit color table: Go to colors module, choose a color node that you would like to modify, click “Copy” button to create an editable copy (the default color nodes are read-only). If you choose a “color table” type of node (this is the most common) then you get hundreds of predefined colors and you can modify each by double-clicking the color swatch in the color column, which can be tedious if you want to make large changes. It may be more convenient to modify “Continuous” color node, such as “RedGreenBlue” because you can specify a few colors at arbitrary levels and the colors are interpolated between them.
要約すると以下のようになります。
- Colorモジュールで既存のLUTをコピーして編集する。
- 既存のLUTは読み取り専用で編集不可。
- LUTタイプには「カラーテーブル」と「Continuous」の2種類がある。
- 「カラーテーブル」はカラー列の色見本をダブルクリックすることで変更可能。ただし、大きな変更を加えたい場合は手間がかかる。
- 「Continuous」はいくつかの色を任意のレベルで指定でき、それらの間で色が補間されるため、大きな変更も比較的簡単にできる。
下2つ以外は文章だけで理解できますが、「カラーテーブル」と「Continuous」の説明については操作画面を見ないと理解が難しいかと思います。
のちほどちゃんと理解できるように解説をします。
また、3D Slicerのカラーに関しては公式マニュアルでも記載があります。
今回はこの公式マニュアルにある記載に基づいて解説していきます。
ちなみにですが、上記の「カラーテーブル」は公式マニュアルでは「Discrete table」という名称になっています。
同じものですので混乱しないようにしましょう。
「Discrete table」と「Continuous」の違い
Colorsをクリックすると上図のようにLUT一覧が表示されますが、マウスカーソルを動かさないでおくとポップアップが表示されます。
このポップアップに表示される文字列には大きく分けて以下の2種類があります。
- ColorTable → 「Discrete table」のこと
- ProceduralColor → 「Continuous」のこと
ProceduralColorは ‘PET’ や ‘FreeSurfer’ などの接頭辞が付くものがあり、バリエーションがあるようです(ただし、仕様の違いはない)。
そして、このProceduralColorが ‘Continuous’ に相当するものです。
次にDiscrete tableとContinuousの違いを解説します。
Discrete table
Discrete tableはカラーの数とスカラーレンジを決めて、それぞれのインデックスでカラーを定義していくというタイプのLUTになります。
一般的なLUTの編集方法なので比較的なじみやすい気がします(操作手順は後述)。
ただし、カラーの数を仮に255とすると、255個全てを個別に編集しなければならないので大きな変更を加えたい場合に面倒です。
3D SlicerにプリセットされているLUTでは、このタイプが非常に多いため、使いたいものもDiscrete tableタイプの方で見つかりやすいかもしれません。
少し変更を加えたいときにはこちらのタイプが便利かと思われます。
Continuous
Continuousは複数のポイントを追加し、そのポイントの部分に関して位置や色などの設定を行い、LUTを作製するタイプのものになります。
ポイント間の色については自動補間されるため、Discrete tableに比べて大きな変更を加えたい場合でも、少ない手間でLUTを作製することができます。
余程特殊なLUTでなければ通常はこちらのContinuousタイプを使って作製するのが良いかと思います。
既存LUTをコピーして新しいLUTを作製する
All built-in lookup tables are read-only to ensure consistency when using these colors.
これらの色を使用する際の一貫性を確保するため、すべての内蔵ルックアップテーブルは読み取り専用です。(DeepL翻訳まま)
公式マニュアルでも触れられていますが、プリセットされているLUTは編集ができませんので注意しましょう。
自分が作製したいLUTに最も近いLUTをまずは探して、上図にあるようにコピーしてから編集作業を行います。
コピーボタンをクリックすると名前を決めるように言われます。
ここで決めた名前がLUT一覧に表示されるので、あとから見てどのようなLUTなのかわかる名前にしておきましょう。
コピーして作製したLUTは既存のLUT一覧ではなく、「User Generated」という中に表示されます。
複数コピーした場合はこの中から編集したいLUTを選択します。
では次にDiscrete tableとContinuousタイプそれぞれの編集手順について解説します。
Discrete tableタイプのLUT作製方法
上図を見てもらえばわかるかと思いますが、手順は主に以下の3つです。
- レンジの指定
- レンジ内の分割数を指定
- 分割数分の色とラベルと透過率の設定
①のレンジの指定では例えば「0を中心に-10から10までにしたい」といったことも可能です。
もしも、自分の設定したいレンジを入力できない場合は、下限と上限の設定をする必要がありますので注意してください(上図参照)。
②のレンジ内の分割数は多ければ多いほど細かく設定できますが、その分、手間が増えます。
少ないと手間が減る分、解像度は悪くなるでしょう。
多過ぎず少な過ぎずが丁度良いですが、256程度を目安にしておくのが良いかもしれません。
Color列はダブルクリックすると色を選択するウィンドウが開きます。
Label列もダブルクリックすることで変更が可能です(ラベルに記述ルールはないので、自由にメモを書くことができます)。
opacityは色の透明度で、0~1の間の数値を指定します。
0だと完全に透明になってしまうので、基本的には1で構わないと思います。
‘Hide empty Colors’ というチェック項目がありますが、公式マニュアルには以下のように説明されています。
When checked, hide the unnamed color entries in the list below.
チェックすると、下のリストにある名前のない色の項目が非表示になります。(DeepL翻訳まま)
私自身、あまりよく理解できていませんが、どうやらラベルが空のものは非表示になってしまうということなのだと思われます。
正直あまり使わない機能かと思うので検証もしていませんが、間引きが必要な方は試してみてください。
Discrete tableタイプのLUT作製方法については以上です。
ContinuousタイプのLUT作製方法
さて、こちらのタイプは非常に簡単です。
恐らくLUTを新規で作製する場合は、こちらを使うことが多いかもしれませんね。
手順としては以下のようになります。
- (必要に応じて)ポイントの追加
- カラーバーの何もないところをクリックするとポイントを追加できます。
- ポイントの追加はどのタイミングでもOK。
- ポイントの位置を調整
- ポイントの選択は「Point:」と書かれている部分のスピンボックスで変更することができます。
- またはカラーバー上の〇をクリックしても選択可能です(ただし、間違えてポイントを追加してしまうことがあるので注意)。
- 選択したポイントは「X:」の数値を変えることで位置を変えることができます(〇をマウスで動かして位置決めすることも可能)。
- 各ポイントの色を設定
- 色を変更したいポイントを選択した状態で「Point:」の右横にあるColor boxアイコンをクリックして色選択ウィンドウを開きます。
- ポイント間の色の保管方法を「M:」と「S:」で設定する。
- 各ポイント間で個別に設定が必要。
- ポイントが多いほど手間がかかるので注意。
④については補足が必要かと思いますので解説します。
そもそも④の項目はデフォルトでは表示されていませんので、上図にある右側の赤枠内にある「 」ボタンをクリックすると「M:」と「S:」が出てきます。
項目「M:」→ Position of the midpoint
上図は項目「M:」を0.2から0.8まで変化させたときにカラーバーの見た目がどうなるか確認してみたものです。
通常はデフォルトの0.5を使っておけば問題ないと思いますが、隣のポイントと非線形な変化を表したい場合には都合が良さそうです。
M = 0.5以外を使うことは稀かもしれませんが、必要に応じて設定しましょう。
項目「S:」→ Sharpness of the midpoint
上図は項目「S:」を0.0から1.0まで変化させたときにカラーバーの見た目がどうなるか確認してみたものです。
こちらの場合は隣り合う色の境界をどのくらいはっきりさせるかという設定になります。
「M:」と同様に非線形の変化を表したいときに便利そうです。
変化の仕方はシグモイドっぽい形だと思いますので、イメージも付きやすいですね。
これも通常はデフォルトの0.00で問題ないかと思います。
必要な方は適宜変更して使いましょう。
ContinuousタイプのLUT作製方法については以上です。
LUTの保存方法とファイル形式
作製したLUTの保存は他のファイルと同様にsaveボタンから行います。
LUTのファイルフォーマットは上図にもあるように、以下の2種類になります。
- Continuousタイプ → .txt
- Discrete tableタイプ → .ctbl(.txtも可?)
LUTタイプによって保存形式が異なりますので注意しましょう。
Discrete tableタイプについては.ctblがデフォルトのようですが、.txtも選択できるようです(動作検証はしていません)。
LUTの保存形式についての詳細はこちらの公式マニュアルに記載があります。
どちらの保存形式もプレーンテキストなのでメモ帳などのアプリで開くことができます。
‘.ctbl’の中身
Discrete tableタイプの保存形式である.ctblの中身はどうなっているのでしょうか。
公式マニュアルにある例を以下に示します。
# Color table file C:/Users/andra/OneDrive/Projects/SlicerTesting2022/20220109-ColorLegend/Segmentation-label_ColorTable.ctbl
# 4 values
0 Background 0 0 0 0
1 artery 216 101 79 255
2 bone 241 214 145 255
3 connective_tissue 111 184 210 255
1行目にファイルパス、2行目に分割数、3行目以降に分割した数だけ行があります。
3行目以降の1列目はインデックス、2列目はラベル名、3列目以降は順番にRed, Green, Blue, Opacityを0~255までの256段階の整数であらわしたものになります。
各値の間は半角スペースで区切られています。
このフォーマットに沿っていれば、3D Slicerを使わなくてもメモ帳などのアプリでLUTファイルを作ることもできそうですね。
‘.txt’の中身
続いて、Continuousタイプの保存形式である.txtの中身についてです。
公式マニュアルにある例を以下に示します。
# Color procedural file /path/to/file.txt
# 5 points
# position R G B
0 0 0 0
63 0 0.501961 0.490196
128 0.501961 0 1
192 1 0.501961 0
255 1 1 1
1行目にファイルパス、2行目にポイント数、3行目に列ラベル、4行目以降に列ラベルに対応した数値が入力されています。
こちらも各値の間は半角スペースで区切られています。
.ctblとは違い、opacityがない点とRGBの指定の仕方が百分率になっている点が異なります。
.ctblと同様、このフォーマットに沿っていれば、3D Slicerを使わなくてもメモ帳などのアプリでLUTファイルを作ることができますね。
独自LUTの読み込み方法
LUTファイルはドラッグ&ドロップで読み込むことができます。
読み込むときにDescriptionがColorになっていることを確認してOKをクリックします。
読み込んだLUTは一覧の中の「File」に表示されます。
あとはいつもと同じように利用すればOKです。
以上でカラーバーに独自のLUTを設定することができるようになります。
これができれば他のPCにインストールされている3D Slicerでも同じLUTが使えるようになりますので便利ですね。
まとめ
今回は3D Slicerのカラーバーに独自のLUTを適用させる方法についてみていきました。
それほど難しい操作はないので困ることはないかと思いますが、頻繁に行う操作でもないので忘れがちになるかもしれません。
その時はこの記事を参照して思い出していただければ幸いです。
Pythonのプログラム・GUIアプリケーションを作って仕事の効率化をお手伝いします!
科研費等での支払いにも対応しており、国立・私立大学の先生から複数の受注実績があります。
対応可能かどうかも含めてお気軽に問い合わせページからご相談ください。
OguLInks公式サイトのトップページに簡単な事例紹介もありますのでご参照ください。
Twitterでお得情報をゲットしたい方はフォローいただけると幸いです。
この記事が役に立ったという方、少額の御寄附をいただけますと小倉のモチベーションアップにつながります。
よろしければ以下より寄付いただけますと幸いですm(_ _)m
すでに購入済みの方はこちら