ガボールパッチのような刺激を呈示する知覚実験などにおいては、ガンマ補正が必要になります。
PsychoPyではガンマ補正を簡単に行うことができますが、私も以下の手順で問題がないのかやや自信がありません。参考程度にお願いします。お気づきのことは、どしどしコメントください。
#ガンマ補正てなに?
PsychoPyでは、色の情報を-1から+1の値で表します。またRed, Green, Blueの順番で指定します。
色 | RGB |
---|---|
真っ白 | [1, 1, 1] |
真っ黒 | [-1, -1, -1] |
グレー(灰色) | [0, 0, 0] |
ここで輝度計を使って、真っ白、真っ黒、グレーのそれぞれの輝度を実際に測定してみると、
グレー = (真っ白 + 真っ黒) / 2
とは残念ながらなりません。ゆるやかなカーブを描くことが知られています。

これを知らずに実験をしていると、想定していた輝度と違う輝度で実際には表示されていたということになりかねません。
そこでガンマ補正を行います。ガンマ補正とは、プログラムで記述した輝度情報と、実測した輝度値が線形の関係になるように調整することです。
モニターセンター
PsychoPyではモニターセンターでガンマ補正を行うことができます。モニターセンターについての基本的な使い方はPsychoPyのモニターセンターを参照してください。
対応したフォトメーター(PR650など)をお持ちでしたら、ケーブルでパソコンと接続し、自動的にガンマ補正を行うことができるようです(未確認)
私は Minolta CS-100Aを持っていますが、パソコンとケーブルで接続せずに手動で測定しました。ここではその方法をご説明します。
「ガンマ補正」をクリックします。フォトメーターを選択できるようになっていますが、手動で行う限り、無関係だと思われます。

「semi」を選択します。他の数値は必要に応じて変更してください。初期値のままでも大きな問題はないでしょう。

その後、次のような画面になります。中央部分の輝度を測定します。グレースケールを8回測定したあと、赤を7回、緑を7回、青を7回測定します。測定した値は紙と鉛筆で記録しておきましょう。結構時間がかかりますが、がんばって〜。

最後に、測定した値を入力します。
うまくいくと線形化のところに値が入力されているはずです。ガンマプロットも見てみてください。

ガンマプロットはこんな感じ。

実測
ガンマ補正が適切に行われているか、必ず実測しましょう。
ガンマ補正がうまくいっているかを確認するためのコードを公開しておきます。
キーを押すたびに、真っ黒(-1)から真っ白(+1)まで、0.2刻みで画面の色が変わります。
フルスクリーンではなくウィンドウで表示するときは、fullscr = False
に。monitor = 'testMonitor'
は自分の設定に書き換えてください。現在の輝度情報をmessage
で表示しています。不要ならコメントアウトしてください。
まずはガンマ補正前の状態を測定して、ガンマ補正をしたあとにもう一度測定をしてみてください。
import numpy as np
from psychopy import visual, core, event
win = visual.Window([400,400], fullscr=True, monitor='testMonitor')
message = visual.TextStim(win, units="norm", pos=(-0.8,0.8),alignHoriz='left')
background = visual.ShapeStim(win, units="norm", vertices=((-1, -1), (1, -1), (1, 1), (-1, 1)))
for i in np.linspace(-1,1,11):
background.setColor([i, i, i], 'rgb')
background.draw()
message.text = str(i)
message.draw()
win.flip()
event.waitKeys()
ちなみに私のパソコンでの結果をグラフにしてみました。ご参考までに。
公式のガンマ補正に関するページもぜひご覧ください。