You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.6 KiB
Matlab
101 lines
3.6 KiB
Matlab
function pcbc_prob_image_orientation_prior()
|
|
%Perform inference with a prior when one cue is an image processed by the PC/BC-DIM model of V1
|
|
iterations=50;
|
|
imageSigmaEquiv=11.2; %as measured by pcbc_prob_image_orientation_estvar
|
|
imSize=39;
|
|
angles=[0:5:179];
|
|
priorMean=90;
|
|
priorStd=15 %30;
|
|
priorDist=code(priorMean,angles,priorStd,0,0,0,1);
|
|
|
|
%define weights
|
|
[W,V]=define_weights_gabors_matrix(imSize,angles,priorDist);
|
|
|
|
%define test cases
|
|
surr=3;
|
|
imageOri=37;
|
|
I{1}=image_circular_grating(imSize-2*surr,surr,4,imageOri,0,1);
|
|
X{1}=zeros(length(angles),1);
|
|
mu3_fig1=stats_gaussian_combination([imageOri,priorMean],[imageSigmaEquiv.^2,priorStd.^2])
|
|
|
|
imageOri=121.5;
|
|
I{2}=image_circular_grating(imSize-2*surr,surr,4,imageOri,0,1);
|
|
X{2}=zeros(length(angles),1);
|
|
mu3_fig2=stats_gaussian_combination([imageOri,priorMean],[imageSigmaEquiv.^2,priorStd.^2])
|
|
|
|
|
|
%present test cases to network and record results
|
|
for k=1:length(I)
|
|
Ion=I{k}(:); Ion(Ion<0)=0;
|
|
Ioff=-I{k}(:); Ioff(Ioff<0)=0;
|
|
x=[Ion;Ioff;X{k}];
|
|
[y,e,r]=dim_activation(W,x,V,iterations);
|
|
|
|
figure(k),clf
|
|
plot_result_images(x,r,y,1,imSize,angles,W);
|
|
print(gcf, '-dpdf', ['probability_images_orientation_prior',int2str(k),'.pdf']);
|
|
end
|
|
|
|
|
|
%test accuracy across many random trials
|
|
numTests=100
|
|
compare_means=zeros(numTests,2);
|
|
compare_vars=zeros(numTests,2);
|
|
for k=1:numTests
|
|
fprintf(1,'.%i.',k);
|
|
|
|
%randomly select parameters of input
|
|
mu1=priorMean+(120*rand-60);
|
|
sigma1=imageSigmaEquiv;
|
|
|
|
%calc bayesian estimate of posterior
|
|
[mu3act,var3act]=stats_gaussian_combination([mu1,priorMean],[sigma1^2,priorStd^2]);
|
|
|
|
%calc network estimate of posterior
|
|
Itmp=image_circular_grating(imSize-2*surr,surr,4,mu1,0,1);
|
|
|
|
Ion=Itmp(:); Ion(Ion<0)=0;
|
|
Ioff=-Itmp(:); Ioff(Ioff<0)=0;
|
|
x=[Ion;Ioff;X{1}];
|
|
|
|
[y,e,r]=dim_activation(W,x,V,iterations);
|
|
[mu3est,var3est]=decode(r(1+2*imSize.^2:end)',angles,1,1);
|
|
|
|
%store estimates for plotting later
|
|
compare_means(k,:)=[mu3act,mu3est];
|
|
compare_vars(k,:)=[var3act,var3est];
|
|
end
|
|
disp(' ')
|
|
|
|
figure(length(I)+1),clf
|
|
plot(compare_means(:,1),compare_means(:,2),'o','MarkerFaceColor','b','MarkerSize',6);
|
|
hold on
|
|
plot([10,170],[10,170],'k--','LineWidth',2)
|
|
set(gca,'YTick',[0:45:179],'XTick',[0:45:179],'FontSize',15)
|
|
axis('equal','tight')
|
|
xlabel('Optimal Estimate of Mean ');
|
|
ylabel('Network Estimate of Mean ')
|
|
set(gcf,'PaperSize',[10 8],'PaperPosition',[0 0.25 10 7.5],'PaperOrientation','Portrait');
|
|
print(gcf, '-dpdf', ['probability_images_orientation_prior_mean_accuracy.pdf']);
|
|
|
|
figure(length(I)+2),clf
|
|
plot(compare_vars(:,1),compare_vars(:,2),'o','MarkerFaceColor','b','MarkerSize',6);
|
|
hold on
|
|
plot([25,150],[25,150],'k--','LineWidth',2)
|
|
set(gca,'YTick',[50:50:150],'YTickLabel',' ','XTick',[50:50:150],'FontSize',15)
|
|
text([25,25,25]-1,[50:50:150],int2str([50:50:150]'),'Rotation',90,'VerticalAlignment','bottom','HorizontalAlignment','center','FontSize',15)
|
|
axis('equal','tight')
|
|
xlabel({'Optimal Estimate of \sigma^2 ';' '});
|
|
ylabel({'Network Estimate of \sigma^2 ';' '});
|
|
set(gcf,'PaperSize',[10 8],'PaperPosition',[0 0.25 10 7.5],'PaperOrientation','Portrait');
|
|
print(gcf, '-dpdf', ['probability_images_orientation_prior_var_accuracy.pdf']);
|
|
|
|
|
|
error=abs(compare_means(:,1)-compare_means(:,2));
|
|
disp('Comparing Means (difference between network and optimal estimate)')
|
|
disp([' Max=',num2str(max(error)),' Median=',num2str(median(error)),' Mean=',num2str(mean(error))]);
|
|
|
|
error=100.*abs(compare_vars(:,1)-compare_vars(:,2))./compare_vars(:,1);
|
|
disp('Comparing Variances (% difference between network and optimal estimate)')
|
|
disp([' Max=',num2str(max(error)),' Median=',num2str(median(error)),' Mean=',num2str(mean(error))]);
|