我是靠谱客的博主 迷你棒棒糖,最近开发中收集的这篇文章主要介绍视觉心理物理学(2)matlab与ptb3,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

典型的心理物理实验通常通过各种显示设备向观察者显示刺激(常将处理过的特殊数字图像作为刺激),通过交互设备(键盘、鼠标、按键盒等)接收被试者反应。

通过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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部