画像ファイルの呈示

事前に次のことを理解しておいてください。

サンプルプログラムを動かすために、呈示画像(JPEG形式)を準備してrabbit.jpgという名前でプログラムと同じ場所に保存してください。適当な画像がなければ、下の画像をダウンロードしてください。ちなみにこの画像は、PsychDemosにある

「konijntjes1024x768.jpg」を縮小したものです。

サンプルプログラムは次の通りです。

function Image1
% 画像を呈示するだけ。何かのキーを押したら終了
try
  AssertOpenGL;
  ListenChar(2); %Matlabに対するキー入力を無効
  %myKeyCheck;
 
  screenNumber = max(Screen('Screens'));
  [win, rect] = Screen('OpenWindow', screenNumber, 0);
 
  %実験プログラムを保存しているフォルダ内にrabbit.jpgを準備してください。
  myimgfile = 'rabbit.jpg';
 
  %画像の読み込み
  imdata = imread(myimgfile, 'jpg');
 
  %画像サイズの幅(ix)が列の数に相当し、画像サイズの高さ(iy)が
  %行の数の相当するため、返り値は、iy, ixの順番になっている。
  [iy, ix, id] = size(imdata);
 
  imagetex = Screen('MakeTexture', win, imdata);
  %上と同じ
  %imagetex = Screen('MakeTexture', win, imdata(1:iy, 1:ix, :));
  %画像の左上だけを呈示
  %imagetex = Screen('MakeTexture', win, imdata(1:iy/2, 1:ix/2, :));
   
  Screen('DrawTexture', win, imagetex);
  Screen('Flip', win);
 
  KbWait;
 
  sca;
  ListenChar(0);
catch
  sca;
  ListenChar(0);
  psychrethrow(psychlasterror);
end

注意点

  • imreadで画像を配列に読み込みます。第1引数が画像のファイル名で、第2引数がファイル形式(または拡張子)です。imread関数はMatlabの関数で、PTBの関数ではありません。また、imformats関数で使用できるファイル形式を確認できます。
  • size(imdata)の返り値の順番が [iy, ix, id]となっていることに注意してください。size関数は、行の数(1次元の数)、列の数(2次元の数)、3次元の数、の順番で値を返します。行の数は、画像のサイズでいうと、高さになりますので、iyとしています。ちなみに id はこのプログラムでは使用されていませんが、カラーの画像の場合は3となります。
  • Screen('MakeTexture', win, imdata(1:iy/2, 1:ix/2, :)); のようにすると、画像の情報が入っているimdataのある部分だけを画像として呈示することができます。