%MakeFigure1.m %Makes figure 1 in the commentary %"Imaging orientation selectivity: decoding conscious perception in V1" %Nature Neuroscience 2005;8 541-542. % %Written by G.M.Boynton, 4/2005 %initial parameters: FOV = [3*3,3*3]; %Field of view (mm) pixpermm = 25; %Number of pixels per millimeter voxSize = 3; %Voxel size (mm) sz = pixpermm*FOV; %Total size of image (in pixels) angleList = linspace(-180,180,9); %this determines the histogram bins %9 numbers define 8 bins %Fist, make fake orientation 'pinwheel' map based on %Rojer and Schwartz' method of bandpassing random noise: %Rojer, A.S. and E.L. Schwartz, Cat and monkey cortical columnar patterns %modeled by bandpass-filtered 2D white noise. Biol Cybern, 1990. 62(5): p. 381-91. %Make random noise: complex numbers where the angle is the orientation z = exp(sqrt(-1)*rand(sz)*pi*2); %Make a gabor filter filtSz = 3; % 3mm sig = .8; % .8 mm freq = 1; %cycles/mm (Try zero for big columns) filtPix = ceil(filtSz*pixpermm); [x,y] = meshgrid(linspace(-filtSz/2,filtSz/2,filtPix),linspace(-filtSz/2,filtSz/2,filtPix)); r = sqrt(x.^2+y.^2); filt = exp(-r.^2/sig.^2).*cos(2*pi*freq*r); %Gabor %Convolve z with the filter bandpassz = conv2(z,filt,'same'); %Show the pinwheel map in figure 1 figure(1) clf %scale it from 0 to 64 img = 64*(angle(bandpassz)+pi)/(pi*2); %These are vectors for x and y axes, in units of millemters: xax = linspace(.5/pixpermm,FOV(2)-.5/pixpermm,FOV(2)*pixpermm); yax = linspace(.5/pixpermm,FOV(1)-.5/pixpermm,FOV(1)*pixpermm); image(xax,yax,img); set(gca,'XTick',[0:FOV(2)]); set(gca,'YTick',[0:FOV(1)]); colormap(hsv(64)) axis equal axis tight axis off set(gca,'YDir','normal'); set(gcf,'PaperPosition',[1,1,3,3]); hold on %Draw the black voxel edges on the pinwheel map in figure 1. m = FOV(1)/voxSize; %number of voxel rows n = FOV(2)/voxSize; %number of voxel columns %loop through the voxels for i=1:m %columns for j=1:n %rows xx = (j-1)*voxSize; yy = (i-1)*voxSize; patch([xx,xx+voxSize,xx+voxSize,xx,xx,xx+voxSize],[yy,yy,yy+voxSize,yy+voxSize,yy,yy],'w','LineWidth',3,'FaceColor','none'); end end %On to the histograms... %Figure 2 will show histogrrams of the amount of orientation represented in %each bin, for each voxel. xa = linspace(.1,.9,length(angleList)); %x-positions for bar graphs %colors for each bars will match center of colors for each bin tmpCol = hsv(length(angleList)*2-1); col = tmpCol(2:2:end,:); figure(2) clf axis off axis equal hold on %loop through the voxels for i=1:m %columns for j=1:n %rows %define out the pixels inside the voxel xx = (j-1)*voxSize; yy = (i-1)*voxSize; inVoxel = bandpassz(yy*pixpermm+1:(yy+voxSize)*pixpermm,xx*pixpermm+1:(xx+voxSize)*pixpermm); a = 180*angle(inVoxel(:))/pi; %calculate the pixels for each bin for k=1:length(angleList)-1 nn(k) = sum(a>=angleList(k) & a