pythonから色度図を表示する方法

私の所属している研究室では、機械学習を使った画像処理の研究を行っています。 画像処理では、RGB表現からXYZ表現に変換後、処理をする必要が有ります。

XYZの画素を表に表現する方法は色々あるのですが、最も一般的な色度図をpythonを使って、 表示する方法を説明します。

色度図とは

ディスプレイの場合、RGBの三色を使って加法混色によって色を表現します。 なので、RGBの3つの光があれば全ての色を表現出来ると、教えられている人がほとんどなのではないでしょうか?

ですが実際は、物理的には全ての色を表現することは不可能であることが知られています。 それは、440nm~545nm(青紫~黄緑系)帯の色は、赤をマイナス値にしなければ表現出来ません。 このため、論理的には可能でも現実的に不可能なのです。

赤がマイナス値となってしまうと、画像処理などで不都合が生じてしまう場合が有ります。 このため、赤がマイナス値とならないようにしなければなりません。

この問題を解決するために、XYZ表色系というのが作られました。

RGB表色系は色知覚のよい近似であるが、知覚できる色を完全に合成できるわけではない。たとえばレーザー光などにみられる単一波長の色はRGB色空間の外側であって、加色によって再現することができない。この問題は、RGBの係数に負の値を許可することによって色空間を拡張すれば表現することができるが、取り扱いに不便である。したがってRGB表色系を単純な一次変換で負の値が現れないように定めたXYZ表色系を、CIEは1931年にRGB表色系と同時に定めた。

XYZ表色系グラフ化する方法の1つとして、色度図があります。

色度図の種類

色度図には色々種類があるのはご存知でしょうか? おそらく、最も一般的に使われているのが、CIE 1931と呼ばれる図だと思います。 今回もpythonではCIE 1931を表示するプログラムを書いていきます。

種類一覧

  • CIE 1931
  • CIE 1960 UCS
  • CIE 1976 UCS

pythonで色度図を表示する

pythonで色度図を表示するには、colourというパッケージを使用します。 colourは、包括的な色理論変換とそれに関連するアルゴリズムを実装している、研究者用のライブラリです。 “CIE 1931”などのグラフも簡単に作成できます。

試しに、”CIE 1931”を表示してみましょう。

まずは、colourをインストールします。pip install colour-scienceでインストール出来ます。 自分の環境ではこのコマンド1つでpython2系3系の両方をインストール出来ました。

$ pip install colour-science
Collecting colour-science
  Using cached colour_science-0.3.8-py2.py3-none-any.whl
Requirement already satisfied: scipy>=0.16.0 in /usr/local/lib/python3.5/site-packages (from colour-science)
Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python3.5/site-packages (from scipy>=0.16.0->colour-science)
Installing collected packages: colour-science
Successfully installed colour-science-0.3.8

$ pip3 install colour-science
Requirement already satisfied: colour-science in /usr/local/lib/python3.5/site-packages
Requirement already satisfied: scipy>=0.16.0 in /usr/local/lib/python3.5/site-packages (from colour-science)
Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python3.5/site-packages (from scipy>=0.16.0->colour-science)

次に、main.pyでファイルを作成して、下記のスクリプトを書き込んで実行しましょう

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from colour.plotting.diagrams import CIE_1931_chromaticity_diagram_plot
CIE_1931_chromaticity_diagram_plot()
$ python3 main.py

表示される図は、ベクター図なのでウインドウの大きさによって、縦横比やサイズが動的に変化します。 正確な図表を得られるため、これだけでも使えると思います。

参考サイト