MATLAB 图像刺激课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《MATLAB 图像刺激课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 图像刺激课件 图像 刺激 课件
- 资源描述:
-
1、PsychtooboxLihan Chen2015.4.28MATLAB 图像刺激 图像处理 图像基础 图像的变换与操纵 计算生成图像图像基础图像基础像素、颜色、索引图像图像基础像素 数字图像 离散的坐标:像素 离散的强度:0255(黑白)图像基础颜色 RGB颜色系统 每个像素的红、绿、蓝均由uint8表示(0255)alpha通道:透明度 24位/32位真彩色imtool(photo.jpg);用MATLAB存取并显示图片读取并显示图片 im=imread(tmp.png);size(im)imshow(im)写入图片 imwrite(im,tmp.jpg);a=ones(400,40),z
2、eros(400,40);%先生成一根白条和一根黑条a1=repmat(a,1,5);%将这个组合复制5遍a2=xor(a1,a1);%将这个黑白条纹与自己的转置做异或逻辑运算imshow(a2)%棋盘格就生成了实例:红蓝3D与双眼竞争 im1=imread(Koala.jpg);im2=imread(Penguins.jpg);%用第二幅图替代第一幅图的红色通道 im1(:,:,1)=im2(:,:,1);%把绿色通道清零 im1(:,:,2)=0;imshow(im1)image与colormap image函数是MATLAB最基本的图像显示函数,可以绘制索引图像,即每个像素的值对应颜色查
3、找表中的索引 colormap:定义图像显示用的颜色查找表 imagesc将数据scale后绘制成图(例如绘制相关矩阵)image与imshow Imshow仅用于显示由RGB或灰度值定义的图像(image也可以)无论是哪个函数,若图像是以uint8表示的,则取值范围为0255,若以double表示,则取值范围是01 将将face.jpg face.jpg 与与 house.jpg house.jpg 融合成一张图融合成一张图片,片,faceface占用红色通道,占用红色通道,househouse占用绿色通占用绿色通道,蓝色通道取值道,蓝色通道取值0.0.由于两张图片不一样由于两张图片不一样大
4、,最后结果保留两张图片重叠部分即可,大,最后结果保留两张图片重叠部分即可,如示例如示例mix.jpg mix.jpg(imread(imread 读出的数据是读出的数据是uint8,uint8,取值范围是取值范围是0-2550-255,imshow imshow 图片的图片的取值范围是取值范围是0-10-1,中间需要除以,中间需要除以255255这个系这个系数数)clear allface=imread(face.jpg);house=imread(house.jpg);mix(:,:,1)=face(1:680,1:550,1);mix(:,:,2)=house(1:680,221:770,
5、2);mix(:,:,3)=0;imshow(mix);image 绘制数据 246810123456789100.50.550.60.650.70.750.80.850.90.951imagesc&colormap 绘制相关矩阵a=rand(10);for i=2:10a(:,i)=a(:,i-1)+rand(10,1)*0.5;endimagesc(corr(a)colorbarcolormap autumnPsychtoolbox-1-listing-lst4.mdata.mat data.mat 中保存了一组虚拟的中保存了一组虚拟的fMRIfMRI数据,数据里数据,数据里记录了记录了V
6、1,V2,V3,V4,V5,ips 6V1,V2,V3,V4,V5,ips 6个脑区个脑区 100 100个时间个时间点的值,请画出其点的值,请画出其6x6 6x6 的相关矩阵。的相关矩阵。load data.matfdata=V1,V2,V3,V4,V5,ips;imagesc(corr(fdata)马赫带效应马赫带效应clear all%清除变量,MEX等,如果有需要的变量还不想清除,需要小心close all%关闭各种figure窗口img=1:10;%图片的值,即是选择colormap第1-10的值figure(1)%打开figure编号为1的窗口paintpots=ones(10,3
7、);%自己创建的一个颜色查找表colormap(paintpots)%将定义好的对应关系输入系统image(img);%呈现图片axis off;%取消在这个任务中没有意义的轴for i=1:10 paintpots(i,:)=(i/10);%令查找表的第i位的值为i/10,即是最大亮度的i/10倍 colormap(paintpots);%将更新的查找表输入系统 pause%等待按键,注意看figure中图片的变化endPsychtoolbox-1-listing-lst3.mclear allclose allcolormap(gray(256)%将颜色查找表设置为灰度图img=resha
8、pe(1:256,16,16);image(img);axis square%将长宽设置为等长axis offpausefor i=1:200 paintpots=rand(256,3);%将颜色查找表设为随机,图片的像素颜色也变成随机 colormap(paintpots);drawnow%立刻呈现end图像的变换与处理图像的变换与处理调整曲线、窗口化像素亮度的变换操作(PS中的“曲线”)实例:去除扫描时背面透过来的影 im=imread(book-000123.png);g=rgb2gray(im);d=double(g);y=uint8(d*1.7-85);imshow(y);imwri
9、te(y,out.png);Psychtoolbox-1-listing-lst5.m图像的“窗口”操纵每个像素的亮度:乘以一个系数生成高斯窗口窗口化图像 imagesc(GaWindow)tmp=double(im).*GaWindow;Windowed =uint8(tmp);imshow(Windowed)Psychtoolbox-1-listing-lst6.m先生成一个先生成一个200 x200200 x200的高斯滤波器,的高斯滤波器,sigma=50sigma=50,读取读取Simpson.jpg,Simpson.jpg,使得二维高斯覆盖在图像上,使得二维高斯覆盖在图像上,高斯覆
10、盖范围外值为高斯覆盖范围外值为0 0,(如,(如3.jpg3.jpg)。并且将这)。并且将这个过程做成动态。通过鼠标控制高斯覆盖的位置,个过程做成动态。通过鼠标控制高斯覆盖的位置,刷新的频率定为刷新的频率定为25Hz 25Hz(既每次呈现一帧图像(既每次呈现一帧图像 要要pause 0.04spause 0.04s),点击鼠标右键退出循环。),点击鼠标右键退出循环。clear allcdata=imread(Simpson.jpg);y,x=size(cdata);X,Y=meshgrid(1:x,1:y);while 1 x0,y0,button=GetMouse;if button(3)=
11、0close allbreakendga=exp(-1/2/502)*(X-x0).2+(Y-y0).2);%ga=ga./max(max(ga);tmp=double(cdata).*ga;imshow(tmp/255)pause(0.04)end邻居处理邻居处理高斯模糊、边缘检测空间滤波 定义一个矩阵(称为滤波器filter)将该矩阵覆盖在每个像素点上 对所有被覆盖的点 将原图像矩阵和该矩阵的对应点相乘 求和变成新图像的点 由邻居决定新的像素点的强度我们对下幅图片用3x3的平均滤波,即滤波的算子是一个3x3的平均矩阵。设原矩阵名为x(图),x(3,3)的值为74,则经过平均滤波之后,这个点
12、的值变为(20+65+1+102+74+54+58+98+50)/9=58。滤波的过程就是对所有点都做这个计算,得到一个新的值。Psychtoolbox-1-listing-lst7.m高斯模糊 改变窗口大小,令x=y=10,stdev=5,生成一个“高斯窗口”让窗口矩阵的和等于1GaFilter=GaWindow/sum(sum(GaWindow);用imfilter或filter2或conv2对原图进行滤波imf=imfilter(im,GaFilter);imshow(imf)高斯模糊的图片边缘检测原始图像原始图像 grayedge(gray)imfilter(gray,fspecial
13、(sobel)更多的滤波器 用fspecial生成二维的特殊滤波器 average 简单平均 gaussian 高斯滤波 motion 模拟摄像机抖动 sobel 检测边缘算子 doc fspecial(1 1)将)将faceface进行高斯滤波,高斯算子的边长是进行高斯滤波,高斯算子的边长是100100个个pixelpixel,sigmasigma为为 30 30。clear allface=imread(face.jpg);op=fspecial(Gaussian,100,30);filface=imfilter(face,op);imshow(filface);(2 2)对)对house
14、house进行边缘检测进行边缘检测。clear allhouse=imread(house.jpg);ghouse=rgb2gray(house);imshow(edge(ghouse,canny)(3 3)制作一个制作一个200 x200 200 x200 竖直朝向顺时针偏转竖直朝向顺时针偏转1515度的度的gaborgabor,其他参数可自己定其他参数可自己定,并解释各个参数的含义。并解释各个参数的含义。clear allX,Y=meshgrid(1:200,1:200);grating=sin(tan(75/180*pi)*X+Y)/25);%(tan(75/180*pi)表示竖直朝向顺
15、时偏转15度,%gabor一个周期是25*2*pi/sqrt(tan(75/180*pi)2+1)个pixel,%(分母是为了标准化)grating=(grating+1)/2;%imshow(grating);op=fspecial(Gaussian,200,50);%高斯算子的边长是200个pixel,sigma为50个pixelop=op/max(max(op);gabor=op.*grating;imshow(gabor)计算生成图像计算生成图像正弦光栅,Gabor Patch,生成正弦光栅 X,Y=meshgrid(1:50,1:100);imshow(sin(X)imshow(si
16、n(X+Y)imshow(sin(X+Y)/2)imshow(sin(X+2*Y)/2)imshow(0.5+0.5*sin(3*X+4*Y)/6)Psychtoolbox-1-listing-lst8.m生成Gabor%先生成正弦光栅 X,Y=meshgrid(-50:50,-50:50);im=sin(X+2*Y)/3);imshow(im)%生成窗口“盖住”光栅 Ga=exp(-(X/20).2)-(Y/20).2);imshow(Ga.*im)生成棋盘格clear allclose allx,y=meshgrid(1:400,1:400);%制作坐标网格x1=sin(x/10);%值域
17、为-1,1;y1=sin(y/10);c=x1.*y1;%负负得正pic=c0;%最后逻辑判断,得到棋盘格imshow(pic)Psychtoolbox函数介绍(图像刺激的实现)SCREEN函数与视觉刺激函数与视觉刺激被试眼睛到屏幕的距离为d,刺激的长度是l,那么视角就是,有tan()=l/d,写成matlab语句就是tand()=l/d,则=atand(l/d)deg2pix.m如果屏幕的分辨率是a x b,屏幕宽度是w,则pixel数=tand()*d*a/w假设屏幕的分辨率为1024x768,我们测得屏幕的宽为40cm,可以得出每cm的长度中有1024/40=25.6个pixel。实际报
18、告刺激大小的时候往往用的是视角,而我们操作matlab用的pixel的数目。如果已知求pixel数,则有pixel数=lx25.6=tand()*d*25.6视角视角扫频扫频 Support for multiple displays myscreens=Screen(Screens);Windows:0=“Virtual display”,spanning the main display and its right neighbour.1=Real main display,2=Real display 2.Stereo display support for easy binocular
19、 stimulation Screen(OpenWindow,stereoMode);Demos:StereoDemo,ImagingStereoDemo One command in your stimulus drawing loop to switch between drawing of left-(bufferid=0)and right-eye(bufferid=1)view:Screen(SelectStereoDrawBuffer,myWindow,bufferid)Psychtoolbox-2 StereoDemo.mStereo display for dual-displ
20、ay setups:Slightly different approach on Windows vs.MacOS/X:Windows:%Open on screen 0,with stereomode 4:win=Screen(OpenWindow,0,.,4);MacOS/X:%Open left-eye window first on lefteyedisplay,with stereomode 10:win=Screen(OpenWindow,lefteyedisplay,.,10);%Open right-eye window righteyedisplay,with stereom
21、ode 10.%Dont care about window handle,this window is just a passive%receiver:Screen(OpenWindow,righteyedisplay,.,10);Use win windowhandle for all further commands.Demos:StereoDemo,ImagingStereoDemoPTB-3 Double buffered drawing model-ConceptScreen:Stimulus onset timestamps Screen(Flip)-Example 1:Fix-
22、Prime-TargetPsychtoolbox2-prime.mScreen(Flip)-Example 1:FixPrimeTarget1%Draw fixation spot to backbuffer:winRect=Screen(Rect,win);slack=Screen(GetFlipInterval,win)/2;Screen(FillOval,win,255,CenterRectInRect(0 0 20 20,winRect);2.%Show fixation spot on next retrace,take onset timestamp:tfixation_onset
23、=Screen(Flip,win);3.%Draw prime stimulus image to backbuffer:Screen(DrawTexture,win,primeImage);4.%Show prime exactly 500 msecs after onset of fixation spot:tprime_onset=Screen(Flip,win,tfixation_onset+0.500-slack);5.%Draw target stimulus image to backbuffer:Screen(DrawTexture,win,targetImage);6.%Sh
24、ow target exactly 100 msecs after onset of prime image:ttarget_onset=Screen(Flip,win,tprime_onset+0.100-slack);7.%Show target exactly for 200 msecs,then blank screen.ttarget_offset=Screen(Flip,win,ttarget_onset+0.200-slack);Choose your presentation times as a multiple of the video refreshduration!10
25、0 Hz is a good refresh setting for 10 ms timing granularityScreen(Flip)-Example 2:Animation with const.fps.1.%Get basic timing info:Duration of a single video refresh interval:refresh=Screen(GetFlipInterval,win);2.%Synchronize to retrace at start of trial/animation loop:vbl=Screen(Flip,win);3.%Loop:
展开阅读全文