和心理系在做的实验,主要是研究基于双眼视差的立体视觉在不同的掩蔽类型以及不同视差条件下的去掩蔽效应。基于双眼视差的立体视觉不改变目标与掩蔽刺激之间的信噪比,但能使不同的刺激被知觉在不同的深度位置上以降低目标信号所受到的掩蔽作用。掩蔽作用依据机制不同,可分为能量掩蔽,即不受双眼立体视觉所造成的主观空间分离影响的;以及信息掩蔽,即可以被主观空间分离的。
实验分为几个阶段,最主要是在阶段II被试在存在掩蔽刺激的情况下判断目标图像中的四个字母是否相同。
我主要负责生成实验材料,以下是一些关键代码:
//旋转任意角度随机字母
Mat letterRandRotateMaskerImage(int tag_location)
{
int target_width=img_width+eye_shift+50;
int target_height=img_width+50;
Mat masker_img(target_height, target_width,CV_8UC3,Scalar(128,128,128));
Rect roi;
roi.y = 0;
roi.height = pics[0].rows;
int ini_height = 0;
int pic_num=pics.size();
int ang_num=angles.size();
while(1)
{
if((ini_height+pics[0].rows) > target_height) break;
//initial roi
roi.x = 0;
while(1)
{
roi.y = ini_height;
int pic_idx = rand()%pic_num;
int rotate_angle = rand()%70;
if((pic_idx==8||pic_idx==9)&&rotate_angle>45)
rotate_angle=rotate_angle-45;
int time_flag=rand()%2;
int ver_flag=rand()%2;
//rotate picture
Mat rota_img = rotateImage(pics[pic_idx], rotate_angle, time_flag,ver_flag);
//get roi
roi.width = rota_img.cols;
roi.height = rota_img.rows;
if(roi.x < 0) roi.x = 0;
if(roi.y < 0) roi.y = 0;
if((roi.x+roi.width) > target_width) break;
if((roi.y+roi.height) > target_height) break;
Mat sub_img(masker_img,roi);
for(int i=0;i<sub_img.rows;i++){
uchar* ptr_rotate=rota_img.ptr<uchar>(i);
uchar* ptr_sub=sub_img.ptr<uchar>(i);
for(int j=0;j<sub_img.cols;j++){
if(