PythonでCIE 1931 xy色度図を描画する方法(COLOUR)

色に関する研究をしていると、色空間について考えることがよくあります。

表示デバイスに依存しない、人間の視覚可能な色域はCIE xy色度図で表現することができますが、pythonでなんとかこれを表示したい!っということでいいライブラリがあったのでメモ。

 

COLOUR

colour-science.org

 

COLOURはPythonベースの色研究をしている人のためにライブラリです。

インストールはAnacondaやPypiGithubリポジトリから落とせるので簡単楽ちん。
(Installation Guide | colour-science を参照)

データの扱いは、よくある「(H, W, 3)」の3次元でなく「(H×W), 3」で渡します。 

機能

自分が把握している機能としてはざっとこんな感じ(2017/12/20時)
間違いがあればご指摘お願いします。
Features | colour-science

  • Biochemistry(生化学)
     
    Michaelis–Menten kinetics(ミカエリス・メンテン式)

  • Colorimetry(測定色学)
     Spectral Computations(スペクトル評価)
     Spectral Bandpass Correction(スペクトルバンドバス補正)
     RGB and XYZ Colour Matching Functions Spectral Dataset
      (RGBとXYZの等色関数スペクトルデータセット)
     Cone Fundamentals Spectral Dataset(錐体分光感度スペクトルデータセット)
     Photopic & Scotopic Luminous Efficiency Functions Spectral Dataset
      (比視感度スペクトルデータセット)
     Colour Matching Functions Conversions for Educational Purpose
      (等色関数の変換(学術目的))
     Illuminant Spectral Power Distribution Computation(分光分布評価)
     Illuminant Spectral Dataset(分光データセット)
     Light Source Dataset(光源データセット)
     Lightness Computation(明るさ算出)
     Luminance Computation(輝度算出)
     Whiteness Computation(白色算出)
     Yellowness Computation(黄色算出)
  • Colour Temperature & Correlated Colour Temperature(色温度&相関色温度)
     
    Correlated Colour Temperature Computation Methods(色温度算出関数)

  • Colour Models(色モデル)
     
    Colourspaces Transformations(色空間変換)

     OETFs(光電気伝達関数)
     EOTFs(逆光電気伝達関数)
     OOTFs
     Log Encoding / Decoding Curves(Log変換、逆変換?)
     RGB Colourspaces(RGB色空間)
     Convenience Deprecated Colourspaces Transformations(廃止予定の色空間変換)

  • Chromatic Adaptation(色順応) 
     
    Chromatic Adaptation Models(色順応モデル)
     Chromatic Adaptation Transforms(色順応変換)

  • Colour Appearance Models(色外観モデル?)

  • Colour Difference(色差)
     
    Delta E Computation(ΔE 算出)
  • Colour Notation Systems(カラーシステム)
     Munsell Value Computation(マンセル値算出)
     Munsell Colour Transformations(マンセルカラー変換)
     Munsell Colours Dataset(マンセルカラーデータセット)
     Hexadecimal(16進数変換)
  • Characterisation(色再現?)
     Colour Rendition Charts (カラーチャートスペクトルデータセット)
     Colour Rendition Charts Chromaticity Coordinates(カラーチャート色度)
  • Light Quality(光品質)
  • Optical Phenomena(光学現象)
  • Reflectance Recovery(反射率)
  • Volume(ボリューム?)
  • Input & Output(入出力)

 

 CIE 1931 xy色度図のプロット

なんやかんやと紹介したところで本題のプロットへ。

 

表示するだけでなら以下だけのコードでOKです。
「bounding_box」パラメーターは見やすくするために座標軸を設定しています[https://gist.github.com/cdfbfb425c34d5a73ee0c55d54298a4c:embed#gistcdfbfb425c34d5a73ee0c55d54298a4c

出力

f:id:Collonville:20171220180210j:plain

 自分で他の物をプロットしたい

最大値を1.0に正規化したRGBをそれぞれ15分割させ、sRGBに基づいてxy空間へプロットしてみます。

プロットはmatplotlibをそのまま使えるので便利です。

 

gist.github.com

出力

f:id:Collonville:20171220181759j:plain

xy色度図にsRGB領域をプロットできていることが確認できました。