ひらがな 他

下図のような640x480ドットのPCXファイルを作成してみます。

string={...
'りんご','いちご','すいか','みかん','ごぼう','とまと','よもぎ','もやし','なすび','ざくろ','もずく',...
'さんま','かつお','ひらめ','さざえ','くらげ','うなぎ','あさり','しじみ','いわし','するめ','あわび','めだか','うつぼ','なまこ','かつお',...
'いるか','くじら','らっこ','あしか','ひとで','まぐろ','めだか','あなご',...
'さくら','さつき','ひのき','やなぎ','うるし','すみれ','くるみ','すすき','さかな',...
'すずめ','からす','かもめ','あひる','つばさ','とさか','つばめ','とんび',...
'みみず','けむし','まむし','とんぼ','ほたる','かえる',...
'うどん','わさび','おせち','ちくわ','からし','さしみ','むすび','つくね','きのこ','つくし','おくら',...
'きりん','ねずみ','たぬき','きつね','うさぎ','ひつじ','らくだ','いたち','もぐら',...
'たんす','つくえ','たんぼ','はたけ','くるま','でんわ','ふとん','たたみ','こたつ','たばこ','ふすま','まくら',...
'うろこ','たまご','つぼみ','さなぎ','あたま',...
'けむり','あかり','やかん','たわし','はさみ','かばん','からだ','いろり','おしめ','こども','きもの','ごはん','つまみ','すずり',...
};
[x,y]=sort(rand(size(string,2)));string=string(y);
hf=figure;map=colormap(gray(256));
set(hf,'color',[0,0,0],'position',[100,100,640,480]);
ha=gca;set(ha,'position',[0,0,1,1]);axis off;
for x=1:size(string,2);
ht1=text(0.5,0.65,string{x}(1));set(ht1,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht2=text(0.5,0.50,string{x}(2));set(ht2,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht3=text(0.5,0.35,string{x}(3));set(ht3,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
V=getframe(gcf);delete([ht1,ht2,ht3]);
V=squeeze(V.cdata(:,:,1));
imwrite(V,map,sprintf('HIRA%04.0f.pcx',x),'pcx');
end;
刺激間隔3秒、刺激定時時間2.5秒としたSTIMのSEQファイルを作成します。
N=size(string,2); % 試行回数
[filename,pathname]=uiputfile('*.seq');
if filename==0;return;end;
fid=fopen(strcat(pathname,filename,'.seq'),'w');
fprintf(fid,sprintf('Numtrials %0.0f\n',N+1));
fprintf(fid,'event mode dur win soa x/r y/l resp type file\n');
fprintf(fid,'------------------------------------------------------------------------\n');
for x=1:N;
filename=sprintf(' HIRA%04.0f\n',x);
st=sprintf('%0.0f PCX 2.5 0 3.0 0 0 -1 1 ',x);
fprintf(fid,strcat(st,filename,'\n'));
end;
fprintf(fid,sprintf('%0.0f GOTO 1 0 0 0 0 0 0 0\n',N+1));
fclose(fid);
MATLAB上で再現しようとおもったのですが、以下のプログラムでは うまくいきませんでした。
hf=figure;map=colormap(gray(256));
set(hf,'color',[0,0,0],'position',[100,100,640,480]);
ha=gca;set(ha,'position',[0,0,1,1]);axis off;
tic;n=1;
ht1=text(0.5,0.65,string{n}(1));set(ht1,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht2=text(0.5,0.50,string{n}(2));set(ht2,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht3=text(0.5,0.35,string{n}(3));set(ht3,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
while 1==1;
if (toc==1.5) & (~isempty(ht1));delete([ht1,ht2,ht3]);ht1=[];'ok'
elseif toc==2;
ht1=text(0.5,0.65,string{n}(1));set(ht1,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht2=text(0.5,0.50,string{n}(2));set(ht2,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
ht3=text(0.5,0.35,string{n}(3));set(ht3,'color',[1,1,1],'fontsize',40,'horizontalalignment','center','verticalalignment','middle');
tic;n=n+1;n
end;
if n==size(string,2);break;end;
end;


おまけ
MATLABを使って640x480ドットのBITMAP画像を作成します。作成した画像はファイル->別名で保存を選択してbitmapファイルとし、後述するWin32APIプログラムで使用します。

randomドット
z=rand(480,640);z(z<0.5)=0;z(z>0)=1;
figure;imagesc(z);colormap(gray(2));
axis off;set(gca,'position',[0,0,1,1]);
set(gcf,'position',[50,50,640,480]);


市松模様
x=(-1).^(1:480/40);y=(-1).^(1:640/40);
figure;imagesc(x'*y);axis off;colormap(gray);
set(gca,'position',[0,0,1,1]);hold on;
plot(640/2/40+0.5,480/2/40+0.5,'o','MarkerFaceColor',[1,0,0],'MarkerEdgeColor',[1,0,0],'lineWidth',5);
set(gcf,'position',[50,50,640,480]);


ダーツ模様
距離は200m、円の大きさは40cm、12x2分割、2度ごとのダーツ模様を作ってみました。
Distance=2000;Width=400;Seg=12;SegAng=2/180*pi;
WinWidth=640;WinHeight=480;
[x,y]=meshgrid(linspace(-WinWidth/WinHeight,WinWidth/WinHeight,WinWidth),linspace(-1,1,WinHeight));
z=sqrt(x.^2+y.^2);z(z>1)=0;
z=atan(z*Width/Distance);
zz=atan2(x,y);
k=sin(zz*Seg).*sin(z/SegAng*pi);
k(k>=0)=1;k(k<0)=-1;k(z==0)=0;
figure;imagesc(k);colormap(gray);set(gca,'position',[0,0,1,1]);hold on;axis off;
plot(WinWidth/2+0.5,WinHeight/2+0.5,'o','MarkerFaceColor',[1,0,0],'MarkerEdgeColor',[1,0,0],'lineWidth',5);
set(gcf,'position',[50,50,WinWidth,WinHeight]);

15〜75度、2〜10度を反転します。
kk=k.*(0.5-(zz>=15/180*pi & zz<=75/180*pi).*(z>2/180*pi & z<=10/180*pi));
figure;imagesc(kk);colormap(gray);set(gca,'position',[0,0,1,1]);hold on;axis off;
plot(WinWidth/2+0.5,WinHeight/2+0.5,'o','MarkerFaceColor',[1,0,0],'MarkerEdgeColor',[1,0,0],'lineWidth',5);
set(gcf,'position',[50,50,WinWidth,WinHeight]);

黒の境界線を入れました。
P=[WinWidth,WinHeight]/2+0.5;R=WinHeight/2;color=[0,0,0];
t=linspace(0,2*pi,2*Seg+1);t(end)=[];t=[t;t+pi];
plot(cos(t)*R+P(1),sin(t)*R+P(2),'color',color);
r=0:SegAng:atan2(Width,Distance);r(1)=[];r(end+1)=atan2(Width,Distance);
r=tan(r)*Distance/Width*R;
t=linspace(0,2*pi,360*10);
plot(cos(t')*r+P(1),sin(t')*r+P(2),'color',color);


辺縁不鮮明の○
x=(1:480)-(480+1)/2;
y=(1:480)-(480+1)/2;
x=x.*x;y=y.*y;
z=sqrt(x'*ones(1,480)+ones(480,1)*y);
k=mean(z(:))-std(z(:));
z(z>k)=k;
z=z-min(z(:));
zamp=max(z(:))/2;
z=sin((z-zamp)/zamp*3.141592/2);
zz=ones(480,640)*max(z(:));
zz(:,81:560)=z;
figure;imagesc(zz);colormap(1-gray(64));axis off;set(gca,'position',[0,0,1,1]);
set(gcf,'position',[50,50,640,480]);
別名で保存->bitmapを選択すると・・・Matlabのbugでしょうか? screen captureしました。


map=colormap(jet(256));
map(:,1)=linspace(1,1/3,256)';
map(:,2)=linspace(0,1/3,256)';
map(:,3)=linspace(0,1/3,256)';
colormap(map);
別名で保存->bitmapを選択すると・・・Matlabのbugでしょうか? screen captureしました。
厳密にはプロジェクターの赤・緑・青の輝度にあわせるべきでしょうが、とりあえずこれで輝度があっているものとします。