概述
典型的心理物理实验通常通过各种显示设备向观察者显示刺激(常将处理过的特殊数字图像作为刺激),通过交互设备(键盘、鼠标、按键盒等)接收被试者反应。
通过matlab及psychtoolbox3工具包完成实现所需的刺激呈现、应答接收、以及数据拟合处理......
Psychtoolbox的维基网址为http://psychtoolbox.org/wiki 该网站中提供了一个论坛,以及供用户下载和安装Psychtoolbox的软件包以及系统要求的版本信息。
Psychtoolbox网站上概述和介绍,以及各种教程http://psychtoolbox.org/PsychtoolboxTutorial 读者还可以使用MATLAB中的帮助功能访问与工具箱函数的文档介绍页面。
图像(正弦光栅、外部噪声图像和纹理等)通常在文件或计算机内存中以数字形式保存为位图或像素图——位或像素(图像元素)的空间映射表示图像在x,y处每一点的颜色。
图像的位图是具有相应行数和列数的二维像素阵列。每个像素元素给出图像中对应行和列位置中的像素强度值。图像像素通常被存储为1,4,8,16,24,32,48或64位/像素。位/像素的数值被称为颜色深度。
(1)正弦波是视觉心理物理学中的基本图形。Gabor是一个由二维高斯(正常或钟形)函数窗口化的正弦波,具有明确的空间频率范围,并包含在窗口化的空间中,它是视觉研究中最常用的刺激之一。
l(x,y)=l0 (1.0±csin{2 π f [ysin(θ)+xcos(θ)]}) 正弦波方程
l(x,y)=l0 (1.0±csin{2 π f [ysin(θ)+xcos(θ)]}×exp[ ]) Gabor的方程 l(x,y)是图像中位置(x,y)处像素的灰度级,l0是平均灰度级,f是正弦波的频率(1 /像素),θ是正弦波的倾斜角
效果图(中)生成matlab代码(右) meshgrid 函数用来生成网格矩阵,可以是二维网格矩阵
(2)白噪声图像
噪声图像通常用于改变图像质量或终止视觉处理。常用高斯白噪声(即是每个像素的值均从均值等于中值或中性灰度、标准差为可实现强度值范围中一部分的正态分布中随机抽取)
(3)滤波图像
我们常需要不同空间频率的图像刺激,通过matlab设计不通滤波器可实现不同图像的处理。
1. imread 读取图像,得到矩阵map和相应的颜色映射M 如 [M,map] = imread ( 'Church.jpg','jpeg' ) ;% M is a true color image in a 1944x2896x3 matrix showImage (M,' ' ) ;%显示图片
2. rgb2gray 灰度变换(将真实的RGB图像转换为灰度图像)、函数可以保留亮度信息的同时,消除有关色彩的色调和饱和度的信息
[M,map] = imread ( 'Church.jpg','jpeg') ; M2 = rgb2gray(M) ; showImage (M2,'grayscale' ) ;
3. im2bw 读取并将图像转换为二进制黑白图(无灰度)
4. 几何变换 调整大小、旋转和裁剪
5. 滤波 滤波用于删除或减少图像的某些特性或成分,空间频率滤波器被用于创建特殊的实验刺激。
通过快速傅立叶变换(fft2)来完成的,fft2对图像中每个空间频率的数量进行编码
傅里叶分析用空间频率内容来描述一幅图像。低空间频率对应于空间中强度的缓慢起伏,而高空间频率对应于空间中强度的快速变化。
(1)低通滤波器 衰减高空间频率,同时“通过”(保持)低空间频率,这会模糊原始图像
(2)高通滤波器 保持高空间频率的同时衰减低空间频率,保留图像中更锐利的边缘
(3)带通滤波器 衰减非常低和非常高的空间频率
· 原始教堂图片及其傅里叶频谱(第一行)
· 低通滤过的教堂图片及其傅里叶频谱(第二行)
· 高通滤过的教堂图片及其傅里叶频谱,以及高通滤波器(第三行)
· 带通滤过的教堂图片及其傅里叶频谱,以及带通滤波器(第四行)
图像的傅立叶描述包括幅度谱和相位谱。幅度谱表示每个空间频率分量的幅度(数量),而相位谱描述了正弦波频率分量的位置。
一、matlab基础
常见函数和知识点:https://blog.csdn.net/nonmarking/article/details/20424997
简要列举经常用到的:
1. 连接数组 C=cat(dim, A,B)--cat(2,A,B)与[A,B]相同,cat(1,A,B)与[A;B]相同
数组初始化:zeros(m,n)返回用0初始化的m行n列的矩阵,ones返回1初始化的m行n列矩阵
2. 类型转换 num2str :把数字转换为字符串
str2double :把字符串转换为双精度浮点数
str2num :把字符串转换为数字
3. 元胞数组 cell :创建元胞数组 c=cell(n)c=cell(m,n)
celldisp :显示元胞数组的内容
cellfun :把函数应用于元胞数组中的每个元素 A=cellfun(fun, C, D,...)
cellplot :以图形形式显示元胞数组的结构
cellstr :根据字符串数组创建字符串元胞数组
mat2cell :把矩阵分割为元胞数组 c=mat2cell(x,m, n)
num2cell :把数值数组转变为元胞数组 C=num2cell(A)
4. 字符串 strcmp , strcmpi(不区分大小写) :比较字符串---strcmp('str1','str2')相同返回1,不同返回0
5. 基本运算 + :加法运算符
- :减法运算符
* :矩阵乘法
.*:数组乘法
/:斜杠或者矩阵右除 B/A等于公式B*inv(A)
./:数组右除 A./B等于A(i,j)/B(i,j)
:反斜杠或者矩阵左除 AB等于inv(A)*B
.:数组左除 A.B等于B(i,j)/A(i,j)
^:矩阵幂计算
.^:数组幂计算 A.^B等于A(i,j)的B(i,j)次幂
’:矩阵转置
[]:表示空矩阵,A(m,:)删除A中的一行,A(:,n)删除A中的一列
{}:元胞组赋值
关系操作符:< <= > >= == ~ =
逻辑操作符 : 逻辑:&& || 、 数组:& | ~
6. 矩阵
取值:e(2 , :)%取第2行所有元素
e(: , 3)%取第三列所有元素
e([1 3] , :)%取第1和第3行所有元素
e([1 3] , [2 4]) %分别取e(1,2);e(1,4);e(3,2);e(3,4)的元素
翻转:flipud(e)%矩阵上下翻转
fliplr(e)%矩阵左右翻转
rot90(e)%矩阵旋转90度
7. 绘图 v1=0:10:100
v2=9/5*v1+32
figure(n)% 新建第n个图形figure
plot(v1 , v2, 'ro-') %以v1为横坐标 v2为纵坐标进行描点画图用-连接起来
hold on;保持原图叠加绘图 subplot % 将多个图画到一个平面上
二、ptb3 基础知识 核心函数 Screen 窗口函数 、所有屏幕:Screen("Screens")、 获取帮助:Screen("Openwindow?")
ptb3通过Screen窗口函数向受试者呈现各种满足实验需求的刺激,常用函数整理:
(1). 打开一个窗口 Screen('Openwindow',0) 关闭窗口 Screen('Close',w)
(2). try-catch-end ,try下面的语句出现问题的时候,会自动执行catch后面的语句,跳出程序,不会出现程序卡死等问题
(3). Screen的画图子函数 FillRect FrameRect FillOval FrameOval FillArc FrameArc DrawLine
% 1.直线 Screen('DrawLine', windowPtr [,color], fromH, fromV, toH, toV [,penWidth]);
% 2.曲线Screen('DrawArc',windowPtr,[color],[rect],startAngle,arcAngle)
% 3.曲线Screen('FrameArc',windowPtr,[color],[rect],startAngle,arcAngle[,penWidth] [,penHeight] [,penMode])
% 4.填充多边形Screen('FillArc',windowPtr,[color],[rect],startAngle,arcAngle)
% 5.更换背景色Screen('FillRect', windowPtr [,color] [,rect] );
% 6.多边形边框填充Screen('FrameRect', windowPtr [,color] [,rect] [,penWidth]);
% 7.绘制圆形Screen('FillOval', windowPtr [,color] [,rect] [,perfectUpToMaxDiameter]);
% 8.Screen('FrameOval', windowPtr [,color] [,rect] [,penWidth] [,penHeight] [,penMode]);
% 9.矩阵绘制Screen('FramePoly', windowPtr [,color], pointList [,penWidth]);
% 10.填充多边形Screen('FillPoly', windowPtr [,color], pointList [, isConvex]);
(4). 刺激应答
fprintf('Please click the mouse now.n');%鼠标应答,获取按下的坐标
[x,y,buttons] = GetMouse;
while any(buttons) % if already down, wait for release
[x,y,buttons] = GetMouse;
end
KbName('UnifyKeyNames'); % 键盘应答、定义键盘按键
larrow = KbName('LeftArrow'); % 定义左右键
rarrow = KbName('RightArrow');
(5). 其他
Screen('Flip',w); %屏幕刷新
HideCursor; %隐藏鼠标的光标,以免实验过程中受到打扰
ShowCursor; %显示光标
KbWait; %等待按键的命令、按任意键继续
Waitsecs(2); %保持图形可见2秒
% 程序示例1 以下是新建一个窗口helloworld实例
try
Screens=Screen('Screens');
ScreenNum=max(Screens);
% 打开一个新的屏幕
[w, wRect] = Screen('OpenWindow', ScreenNum); % w指代当前的屏幕的位置大小信息,当前屏幕的分辨率是1680×1050, wRect就是[ 0 0 1680 1050]
black=BlackIndex(w);
white=WhiteIndex(w);
gray=(white+black)/2;
% 当前屏幕的最大、最小灰度值,一般white=255, black=0; 两者均值设为gray
Screen('FillRect',w,gray); %把屏幕w涂成gray颜色
Screen('Flip',w); %需要flip上面对屏幕的操作才会显现出来
HideCursor; %隐藏鼠标的光标,以免实验过程中受到打扰
Text='Hello World!'; %需要呈现的文字
%oldTextSize=Screen('TextSize',w,36); %调整文字的大小为36号
Screen('DrawText', w, Text, 420, 340,[0,0,255]); %呈现文字在屏幕上的函数,颜色为蓝色
Screen('Flip',w); %同上面。需要flip对屏幕的操作才会显现出来
KbWait; %按任意键继续
Waitsecs(2); %屏幕2秒
Screen('CloseAll'); %结束,关闭屏幕
ShowCursor; %显示光标(前面把光标隐藏了),否则程序结束后屏幕上也没有光标
catch
ShowCursor;
Screen('CloseAll');
Priority(0);
psychrethrow(psychlasterror);
end
最后
以上就是迷你棒棒糖为你收集整理的视觉心理物理学(2)matlab与ptb3的全部内容,希望文章能够帮你解决视觉心理物理学(2)matlab与ptb3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复