Psychtoolbox入門 草野 勉 (東京海洋大学) 日本視覚学会2013年夏季大会 このチュートリアルについて • 対象とする方 – 授業等でプログラム言語を学習する機会がなく、 いままでPowerPointなどで実験をしていた方々 – よくご存知の方には、適宜、情報の補足・修正を していただけると幸いです。。 • ねらい – とにかく実験のためのプログラミングの敷居が低 く感じられること 日本視覚学会2013年夏季大会 細かい話は。。 • Webで公開する予定なので、記録のためのメ モをとって頂く必要はありません。 • ウェブサイトが検索に引っかからないことがあ るので、Facebookで探してください。登録せず ともURLが見られるようにしますので。。 日本視覚学会2013年夏季大会 今日の話題 • 実験のためのプログラム:選択肢 • Psychtoolboxによる実験プログラム – 簡単なプログラムと、関連するサンプルコード • 刺激提示、反応取得・記録 – さまざまな機能の紹介 – インストールなど 日本視覚学会2013年夏季大会 実験のためのプログラム:選択肢 (はじめに) • 実験用のソフトウェア – SuperLab, E-Prime, Experiment Builderなど • プログラミング言語のライブラリとして – ライブラリ:プログラミングの際に再利用可能な プログラムの集まり これから、複数のOSで同様に使える(クロス・ プラットフォームの)視覚実験用のライブラリ の例を紹介します。 日本視覚学会2013年夏季大会 実験のためのプログラム:選択肢 (ライブラリの一例です) • PsychoPy – プログラミング言語Pythonがベース – 使いやすいビルダー – YouTube上でのチュートリアル • http://www.youtube.com/watch?v=VV6qhuQgsiI – 日本語解説 • 小川洋和先生(関西学院大学) • 十河宏行先生(愛媛大学) 日本視覚学会2013年夏季大会 実験のためのプログラム:選択肢 (ライブラリの一例です) • Psychlopes – C++のライブラリ – 日本発(東大心理佐藤研の細川研知さん) • 分からないことは聞きやすいかも。 – 教育的なサンプルコードを多数用意 日本視覚学会2013年夏季大会 実験のためのプログラム:選択肢 (その他にも) • Vision Scienceのサイト(ここやここ) • 木村英司先生(千葉大)のサイト 日本視覚学会2013年夏季大会 実験のためのプログラム:選択肢 (今回紹介するもの) • Psychophysics Toolbox (Psychtoolbox) – MATLABとGNU Octaveのライブラリ • 習得が容易(と言われている) – 教育的なサンプルコードが充実 – 利用者数が多い(と思う)。フォーラムの充実 – 無料で導入可能 日本視覚学会2013年夏季大会 Psychtoolboxの情報源 • 検索すると日本語の解説もちらほら • 日本語で得られる貴重な情報源 日本視覚学会2013年夏季大会 簡単なプログラム 日本視覚学会2013年夏季大会 ねらい • 簡単なプログラムを例に、基本的な Psychtoolboxの機能を紹介。 • 付属のサンプルコードの中から、関連するも のを紹介。それらを活用できるようにする。 日本視覚学会2013年夏季大会 「簡単なプログラム」の例 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); Screen('Flip',window); GetClicks; Screen('CloseAll'); 日本視覚学会2013年夏季大会 サンプルについて • PsychDemosフォルダ(Psychtoolbox直下) • それ以外の場所にもサンプルは存在 – Bits++関連はPsychtoolbox > PsychHardware > BitsPlusToolbox > BitsPlusDemos • Web上にも – Psychtoolboxユーザーのフォーラムなど 日本視覚学会2013年夏季大会 Psychtoolboxのフォーラム 日本視覚学会2013年夏季大会 「簡単です」の例 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); Screen('Flip',window); GetClicks; Screen('CloseAll'); 日本視覚学会2013年夏季大会 例1 「簡単です」という例 例1 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了全画面ウィンドウを作成 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); Screen('Flip',window); GetClicks; Screen('CloseAll'); 日本視覚学会2013年夏季大会 「簡単です」という例 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); Screen('Flip',window); GetClicks; 円を描画 Screen('CloseAll'); 日本視覚学会2013年夏季大会 例1 「簡単です」という例 例1 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); Screen('Flip',window); GetClicks; Screen('CloseAll'); 描いた内容を表示 日本視覚学会2013年夏季大会 「簡単です」という例 例1 • 画面左上に200 x 200 px の円を表示 • クリックで表示終了 window = Screen('OpenWindow',0,0); Screen('FillOval',window,255,[0,0,200,200]); クリックを待つ Screen('Flip',window); GetClicks; Screen('CloseAll'); ウィンドウを閉じる 日本視覚学会2013年夏季大会 例1 ちなみに、コメントは“%”で (コメントアウトにもよく使われる) % 全画面ウィンドウ作成 window = Screen('OpenWindow',0,0); % 画面は黒 % 円を描画 Screen('FillOval',window,255,[0,0,200,200]); % 描画内容を表示 Screen('Flip',window); GetClicks; % クリックを待つ Screen('CloseAll'); % 全画面表示終了 日本視覚学会2013年夏季大会 文章の区切りと改行 例1 • 文末のセミコロン(;)は、戻り値をコマンドウィ ンドウに表示させないようにするためのもの。 • 改行、セミコロン、カンマで1文の区切り – tic, pause(1),toc 日本視覚学会2013年夏季大会 Screen関数のサブコマンド(1) 例1 • 画像の表示に関する様々な機能を、1つ目の 引数である「サブコマンド」によって指定する。 • 例:window = Screen('OpenWindow',0,0); サブコマンド:ウィンドウ作成 色は黒 モニタを指定 日本視覚学会2013年夏季大会 Screen関数のサブコマンド(2) 例1 ウィンドウを指定 (前のOpenWindowの戻り値) • 例:Screen('FillOval',window,255,[0,0,200,200]); サブコマンド: 長方形描画 色は白 ウィンドウ左上 からの 位置とサイズ 日本視覚学会2013年夏季大会 Screen関数 例1 レクト:よく使う表示形式 ウィンドウを指定 計算を容易にする関数が用意: (前のOpenWindowの戻り値) “help PsychRects” • 例:Screen('FillOval',window,255,[0,0,200,200]); サブコマンド: 長方形描画 色は白 ウィンドウ左上 からの 位置とサイズ 日本視覚学会2013年夏季大会 for文について • MATLABのfor文 for i = 1:10 % iが1から10になるまで a = i % 変数aにiを代入 end 日本視覚学会2013年夏季大会 例1 for文で円の位置を変化 例1 window = Screen('OpenWindow',0,0); for i = 1:100 Screen('FillOval',window,255,[i,i,i+20,i+20]); Screen('Flip',window); end Screen('CloseAll'); 日本視覚学会2013年夏季大会 関連するサンプルコード: MovieDemo.m • 153行目-159行目(上はほぼ解説) for i=[1:n/2, n/2:-1:1] r=[0 0 2 2]*(i); Screen(window,'FillRect', white); Screen(window,'FillOval',black,r); t=t+1; s(t)=Screen(window, 'Flip'); end 日本視覚学会2013年夏季大会 例1 例1 関連サンプルコード:MovieDemo.m • 153行目-159行目(上はほぼ解説) for i=[1:n/2, n/2:-1:1] 知らないサブコマンド r=[0 0 2 2]*(i); Screen(window,'FillRect', white); Screen(window,'FillOval',black,r); t=t+1; s(t)=Screen(window, 'Flip'); end 日本視覚学会2013年夏季大会 知らない関数・サブコマンドの調べ方 • 関数のヘルプ:help {関数名} – help Screen – (Screen関数の特殊事情)Screen と入力するだけで、 サブコマンドの一覧が表示 • サブコマンドのヘルプ: {関数名} {サブコマン ド}? – Screen OpenWindow? • ググる 日本視覚学会2013年夏季大会 画像ファイルの提示 • 画像ファイルの読み込み • 全画面ウィンドウを作成 • ウィンドウに描画 • ウィンドウを提示 日本視覚学会2013年夏季大会 例2 画像の読み込み 例2 • imread関数を使う例 – ルートディレクトリ直下の画像test.tiff m = imread('/test.tiff','tiff'); %赤文字はファイルのパス • 戻り値mは行列(または多次元配列) size(m) 3つめの次元はRGBをあらわす。 日本視覚学会2013年夏季大会 行列(3次元配列)の画像データを例2 表示 m = imread('/test.tiff','tiff'); % 画像読み込み window = Screen('OpenWindow',0,0); % ウィンドウ開く tex=Screen('MakeTexture',window,m); % テクスチャ作成 Screen('DrawTexture', window,tex); % 描画 Screen('Flip',window); % 描画した結果を表示 GetClicks; % クリックを待つ Screen('CloseAll'); % ウィンドウを閉じる 日本視覚学会2013年夏季大会 行列の画像データを作る (meshgrid関数) 例3 • 正弦波格子などを表示する際には、meshgrid 関数を使うことが多い。 • [x,y] = meshgrid(-3:3,-3:3)の出力 -3 -2 -1 0 + 1 + 2 + 3 -3 -2 -1 0 + 1 + 2 + 3 -3 -2 -1 0 + 1 + 2 + 3 -3 -2 -1 0 + 1 + 2 + 3 -3 -2 -1 0 + 1 + 2 + 3 + + + x座標が要素の値 -3 -2 -1 0 -3 -3 -3 -3 -3 -3 -3 戻り値X -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 戻り値y 日本視覚学会2013年夏季大会 0 0 0 0 0 0 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + y座標が要素の値 3 3 3 3 3 3 3 例3 正弦波格子縞(垂直)を作成 -4 -4 -4 -4 -4 -4 -4 -3 -3 -3 -3 -3 -3 -3 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 2 + 2 + 2 + 2 + 2 + 3 + 3 + 3 + 3 + 3 + 4 + 4 4 引数y + + + 4 4 m = sin(2*pi*(1/4)*y) -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + 2 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 3 + 3 0 0 0 0 0 0 0 + 4 + 4 Sine関数 -1 -1 -1 -1 -1 -1 -1 0 日本視覚学会2013年夏季大会 0 0 0 0 0 戻り値y 0 関連するサンプルコード: GratingDemo.m 例3 [x y] = meshgrid(widthArray, widthArray); a=cos(tiltInRadians)*radiansPerPixel; % 112行目 b=sin(tiltInRadians)*radiansPerPixel; % 113行目 gratingMatrix = sin(a*x+b*y); 前の例の”2*pi*(1/4)”と同じ要領 日本視覚学会2013年夏季大会 反応の取得・記録 例4 • キーボードのFとJ、どちらかが押されるまで待機 left_key = KbName('f'); right_key = KbName('j'); [keydown, time, keyCode] = KbCheck; while ~(keyCode(left_key)|keyCode(right_key)) [keydown, time, keyCode] = KbCheck; end 日本視覚学会2013年夏季大会 関連するサンプルコード: OldNewRecogExp.m 例4 % 289行目 while ( KeyCode(oldresp)==0 && KeyCode(newresp)==0 ) [KeyIsDown, endrt, KeyCode]=KbCheck; WaitSecs(0.001); end 日本視覚学会2013年夏季大会 サンプルコードを使った学習 • Psychtoolboxの関数がどのように使われるか、 自分で改変しながら確かめられる。 • 実験のテンプレートとしても使える – PsychExampleExperimentsフォルダ • 書き換えるときは「別名で保存」してからに! 日本視覚学会2013年夏季大会 さまざまな機能 日本視覚学会2013年夏季大会 提供される機能の一例 • PsychHardware: ハードウェアのサポート – Bits++, Eyelink, DataPixx, Daq, 各種輝度計… – もちろんMATLABでサポートしている機能が使える • 刺激の書き出し – 画像、動画(Screen関数) • 心理物理学的測定法・データのフィティング – Palamedes toolboxが便利な気も 日本視覚学会2013年夏季大会 モニタのキャリブレーション • キャリブレーション(測光・フィッティング) – CalibrateMonitorPhotometer .m – CalibrateMonSpd.m – ColorCalなど複数の輝度計をサポート – 要Curve fitting toolbox • CLUTの操作 – Screen関数の‘LoadNormalizedGammaTable’ 日本視覚学会2013年夏季大会 動画の書き出し • 4つのコマンドで書き出しができる – Screen CreateMovie – Screen AddFrameToMovie – Screen FinalizeMovie • ImagingStereoDemo.mを参考に 日本視覚学会2013年夏季大会 導入(インストール) 日本視覚学会2013年夏季大会 必要な環境 • OS: Windows, Mac, Linux – Window:時間精度などに制約 – Mac: 複数ディスプレイの場合などに、提示のタイミ ングに問題 – Linux: 開発のベース • 動作環境:MATLAB, Octave – OSとの相性(WindowsではMATLABのみサポート) 日本視覚学会2013年夏季大会 インストールについて • 公式サイトや、上述の日本語サイトに親切な インストラクション – 日本語サイトには、非推奨環境へのインストール の例もあり、大変参考になる。 • 動画関係(再生・録画など)の機能について は、GStreamerなどが必要になることも。 日本視覚学会2013年夏季大会 ご清聴有り難うございました。 日本視覚学会2013年夏季大会
© Copyright 2024 ExpyDoc