FrontPage  ページ一覧  検索  更新履歴  RSS  ログイン

ガンマ補正

ディスプレイやプリンタなど、コンピュータから利用できる画像表示機器では、明るさが指定した値通りに表示されず、歪みが生じます。多くの場合はこの歪みは指数関数に従います。その指数をガンマ値と呼び、表示装置の特性を記述するパラメタになります。CRTの場合、ガンマ値は赤、緑、青の蛍光体の間で独立です。

DisplayGamma.png

PsychlopsのColor型はガンマ補正機能を備えています。ガンマ補正にはガンマ値による指定のほかに、テーブル(補正表)による指定方法があります。CRT以外の表示装置の特性は必ずしもガンマ値型指数関数に従うとは限りませんので、液晶やプラズマ、DLPプロジェクタなどではテーブルによる指定を試みる必要があります(番、山本、江島、2006)*1

// 表示装置のガンマ値を指定する
Color::setGammaValue(double r, double g, double b);

// 補正テーブルを指定する
Color::setGammaValue(double r[], double g[], double b[], int num_rows);
Color::setGammaValue(std::vector<double> r, std::vector<double> g, std::vector<double> b);

表示装置固有の輝度特性測定時の注意

Psychlopsを用いて表示装置の特性を測定する場合には、OSが標準で行っている補正(ほとんどの場合非線形です)を外すために、以下の関数を実行してください。

Color::setGammaValue(1,1,1);

サンプルプログラムのディザー法目視ガンマ測定および全画面RGB輝度測定にはその機能が含まれています。独自プログラムを組む場合には参考にしてください。

厳密なガンマ補正

実験時に、ガンマ補正や色指定で値が0以上1以下にならないケースで警告する、ソフトウェアエミュレーション(後述)を禁止するなど、厳密に行わせるよう強制させることができます。以下のコードをpsychlops_main()の冒頭に記述してください。

Color::strict_match = true;

ハードウェア補正とソフトウェア補正

Psychlopsのガンマ補正は、標準でハードウェアの調整機能を起動し、それに失敗した場合ソフトウェアによるエミュレーションを試みます。

ColorCalibrationModel.png

ハードウェア補正

最近のビデオ表示機器は、理論値と電気出力値の変換テーブルを内部に保持しており、このテーブルに補正値を書き込むことで補正機能を有効にすることができます。書き込みはDVI接続時でも成功しますが、有効に機能するかはハードウェアに依存します(参考:DVI接続でのガンマ補正が有効な表示装置)。確認するためには実測が必要です。

ハードウェア補正では、以下のOSのAPI関数を呼び出します。

* Windows
SetDeviceGammaRamp
* Mac OS X
CGSetDisplayTransferByFormula
CGSetDisplayTransferByTable

ソフトウェア補正

ソフトウェア補正では、Color型とImage型の入出力時に変換関数を適用することで、ハードウェア補正と同様の機能を実現します。Color型とImage型の入出力関数で補正を行い、補正後の値を保存することで実現しています。

ソフトウェア補正はハードウェア補正に比べいくつかの点で劣ります。

  • 理論値の変化に対して鋭敏に輝度が変化する部分とそうでない部分が生じます。鋭敏でない部分では輝度変化がつぶれてしまいます(下図)
  • ガンマ値をプログラム中で変更した場合、それ以前までにsetされたColor情報は古いガンマ値のエミュレーション結果に従った値が保存されており、新しいガンマ値に従わない誤った色が表示されます。いっさいの警告が出ませんのでご注意ください。
  • 変換をCPUで計算するため、速度が低下します。
  • ソフトウェア補正で補正テーブルを使用した場合、さらに問題が生じます
    • 色指定は通常0〜1の実数ですが、補正テーブル適用時は入力値がテーブルの行数にあわせて離散化されます。このため、Color.set()で入力した値とget()で取得した値が異なることがあります。
    • 複数の理論値に対して同一の補正値が割り当てられている場合、get()で復元する場合に入力理論値と異なることがあります。
更新日時:2010/04/13 18:50:40
キーワード:
参照:[Color] [(逆引き) なんでも]

*1 番浩志、山本洋紀、江島義道 (2006) "Mcalibrator: MATLAB言語を用いたディスプレイ較正のための統合型GUIソフトウェアの開発" 基礎心理学研究、第24巻、149-161頁