Turbo:視覚化のために改良した虹色のカラーマップ(1/2)

Turbo:視覚化のために改良した虹色のカラーマップ(1/2)

1.Turbo:視覚化のために改良した虹色のカラーマップ(1/2)まとめ

・虹色のカラーマップとしてはJetが有名だが、Jetには縦じまが見えてしまったり幾つかの弱点がある
・Jetより厳密なカラーマップにはViridisやInfernoなどが存在するが日常的な用途には使いにくい
・Jetの弱点を改良したTurboが今回新たに開発された。シンプルだがJetの弱点を補っている

2.新しいカラーマップTurboとは?

以下、ai.googleblog.comより「Turbo, An Improved Rainbow Colormap for Visualization」の意訳です。元記事の投稿は2019年8月20日、Anton Mikhailovさんによる投稿です。

偽色カラーマップ(False Color Maps)は、画像の奥行情報の視覚化から、画像間の変化などのより抽象的な使用法まで、コンピュータービジョンや機械学習の多くのアプリケーションで使用されています。

画像を色付けする事は、人間が持つ視覚システムが細部を捉え、定量的な値を推定し、より直感的な方法でデータのパターンに気付く事に役立ちます。ただし、カラーマップの選択、つまり、どのような色を用いて着色するかは、特定のタスクに大きな影響を与える可能性がある重要な問題です。

例えば、カラフルな虹色のカラーマップを使用した着色は、医療画像などのミッションクリティカルなアプリケーションで精度の低下に繋がるとされています。それでも、多くのアプリケーションは、「レインボーマップ」がより詳細が表示可能で、より迅速な視覚的評価が可能になるため、(精度を犠牲にしてでも)「レインボーマップ」が好まれます。


左:グレースケールで表示されている視差画像
右:偽色画像を作成するために良く使用されるJetレインボーマップでの着色画像

コンピュータビジョンアプリケーションで最も一般的に使用されるカラーマッピングアルゴリズムの1つはJetです。これはコントラストが高いため、画像の微妙な違いを強調するために役立ちます。

ただし、カラーマップのグラデーションを良く見ると、特にシアン(水色に近い青緑色)とイエローの箇所で、明確な縦じまが生じているのを見ることができます。これにより、マップが画像に適用されるときに急激な色彩の遷移が発生します。これは、基になるデータが実際には滑らかに変化している場合に誤解を招く可能性があります。

色が「知覚的に」変化する速度は一定ではないため、Jetは「知覚的に均一」ではないのです。これらの効果は、マップを曖昧にするという点で、色覚異常を持つユーザーに対してさらに顕著です。


前項の画像がプロタノピア(赤色の色覚異常)状態でどのように見えるかをシミュレートした画像

現在は、matplotlibで採用されているViridisやInfernoなど、均一で且つ色覚異常にも対応可能な最新の選択肢は多く存在します。しかし、これらの線形明度マップは、Jetの多くの重要な問題を解決しますが、それらが持つ制約により、必要条件がそれほど厳しくない日常的なタスクには、最適ではない可能性があります。

 


Viridis

Inferno

本日、Turboを紹介します。これは、Jetの望ましい特性を備えた新しいカラーマップであり、細部の明瞭さ、縦じまのない知覚的な均一性、色覚異常時の曖昧さなどの欠点にも対処しています。Turboは、さまざまな視覚化タスクに効果的であるように手作りされ、微調整されました。 Python用のカラーマップデータと使用手順、C/C++用も公開されており、多項式近似もご覧いただけます。


Turbo


Jet

Turboの開発
Turboカラーマップを作成するために、7つの制御点を持つスプライン曲線(7-knot cubic spline)を使用してsRGB曲線をインタラクティブに調整できるシンプルなインターフェイスを作成しました。そして、Turboカラーマップと他のよく知られているカラーマップを選択したサンプル画像に適用した結果を比較しました。


Turboの作成と調整に使用されるインターフェースのスクリーンショット

このアプローチは、曲線C2を連続的に保ちながら制御を可能にします。結果として得られるカラーマップは、定量的な意味で「知覚的に線形」ではありませんが、誤ったディテールを導入することなく、Jetよりも滑らかです。

一般的なカラーマップとの比較
Viridisは線形カラーマップであり、目にとって快適で、Jetのほとんどの問題を修正するため、一般に偽色が必要な場合に推奨されます。InfernoはViridisと同じ線形特性を持ちますが、コントラストが高いため、細部を抽出する必要がある際に適しています。しかし、一部の人は、これらのカラーマップが目に厳しいと感じることがあります。これは公に議論されている問題ではありませんが、視覚化の後に長時間調査をする必要がある場合、これらのカラーマップは人々の選択に影響します。


Turbo

Jet

Viridis

Inferno

急激な色と明るさの変化のため、JetはViridisやインフェルノではあまり目立たない背景の細部を強調できます。データによっては、肉眼では一部の詳細が完全に失われてしまう場合があります。次の画像の背景は、Inferno(Viridisよりも細部が強調可能です)ではほとんど区別できませんが、Turboでは明確です。


Inferno


Turbo

TurboはJetの明度プロファイルを模倣し、Jetの縦じまを表示させずに、低から高に、そして低に戻ります。 そのため、その明度勾配は一般にViridisの2倍であり、微妙な変化をより簡単に確認できます。これは、低域と高域を明確にするためにカラーマップの使用が可能な場合に詳細を大幅に向上させるため、貴重な特徴です。


Jet


Turbo


Viridis


Inferno

sRGB値をCIECAM02-UCSに変換し、明度値(J)をグレースケールで表示することにより生成される明度プロット。黒い線は、カラーマップの下端(左)から上端(右)までの明るさを追跡しています。

ViridisとInfernoのプロットは線形であり、Infernoはより高い勾配とより広い範囲にわたっています。Jetのプロットは不規則でピークが存在し、グレースケール画像でも縦じまがはっきりと確認できます。 TurboはJetと似た非対称プロファイルを持ち、低域は高域よりも暗くなります。これは、低値が高値の隣に表示されるケースをより明確にするため、意図的にこうしています。低い領域の反りは高い領域の反りとは異なります。これは、赤と比較して青が知覚されやすいためです。

Turboの低高低曲線は詳細度を高めますが、明度に曖昧さがでてきてしまいます。グレースケールでレンダリングされた場合、低い値の一部が高い値と同じに見えてしまうため、色付けがあいまいになります。そのため、Turboはグレースケール印刷や、稀な色覚異常を持つ人々にとっては不適切です。

3.Turbo:視覚化のために改良した虹色のカラーマップ(1/2)関連リンク

1)ai.googleblog.com
Turbo, An Improved Rainbow Colormap for Visualization

2)gist.github.com
mikhailov-work/turbo_colormap.py
mikhailov-work/turbo_colormap.c
mikhailov-work/turbo_colormap.glsl