% visualize_distortions
%
%
% A script to run in conjunction with calib_gui in TOOLBOX_calib to plot
% the distortion models.
%
% This is a slightly modified version of the script plot_CCT_distortion.m written by Mr. Oshel
% Thank you Mr. Oshel for your contribution!


[mx,my] = meshgrid(0:nx/20:(nx-1),0:ny/20:(ny-1));
[nnx,nny]=size(mx);
px=reshape(mx',nnx*nny,1);
py=reshape(my',nnx*nny,1);
kk_new=[fc(1) alpha_c*fc(1) cc(1);0 fc(2) cc(2);0 0 1];
rays=inv(kk_new)*[px';py';ones(1,length(px))];
x=[rays(1,:)./rays(3,:);rays(2,:)./rays(3,:)];


title2=strcat('Complete Distortion Model');

fh1 = 2;

%if ishandle(fh1),
%    close(fh1);
%end;
figure(fh1); clf;
xd=apply_distortion(x,kc);
px2=fc(1)*(xd(1,:)+alpha_c*xd(2,:))+cc(1);
py2=fc(2)*xd(2,:)+cc(2);
dx=px2-px';
dy=py2-py';
Q=quiver(px+1,py+1,dx,dy);
hold on;
plot(cc(1)+1,cc(2)+1,'o');
plot((nx-1)/2+1,(ny-1)/2+1,'x');
dr=reshape(sqrt((dx.*dx)+(dy.*dy)),nny,nnx)';
[C,h]=contour(mx,my,dr,'k');
clabel(C,h);
Mean=mean(mean(dr));
Max=max(max(dr));
title(title2);

axis ij;
axis([1 nx 1 ny])
axis equal;
axis tight;

position=get(gca,'Position');
shr = 0.9;
position(1)=position(1)+position(3)*((1-shr)/2);
position(2)=position(2)+position(4)*(1-shr)+0.03;
position(3:4)=position(3:4)*shr;
set(gca,'position',position);
set(gca,'fontsize',8,'fontname','clean')

gh = gca;

line1=sprintf('Principal Point               = (%0.6g, %0.6g)',cc(1),cc(2));
line2=sprintf('Focal Length                 = (%0.6g, %0.6g)',fc(1),fc(2));
line3=sprintf('Radial coefficients         = (%0.4g, %0.4g, %0.4g)',kc(1),kc(2),kc(5));
line4=sprintf('Tangential coefficients  = (%0.4g, %0.4g)',kc(3),kc(4));
line5=sprintf('+/- [%0.4g, %0.4g]',cc_error(1),cc_error(2));
line6=sprintf('+/- [%0.4g, %0.4g]',fc_error(1),fc_error(2));
line7=sprintf('+/- [%0.4g, %0.4g, %0.4g]',kc_error(1),kc_error(2),kc_error(5));
line8=sprintf('+/- [%0.4g, %0.4g]',kc_error(3),kc_error(4));
line9=sprintf('Pixel error                      = [%0.4g, %0.4g]',err_std(1),err_std(2));
line10=sprintf('Skew                              = %0.4g',alpha_c);
line11=sprintf('+/- %0.4g',alpha_c_error);


axes('position',[0 0 1 1],'visible','off');
th=text(0.11,0,{line9,line2,line1,line10,line3,line4},'horizontalalignment','left','verticalalignment','bottom','fontsize',8,'fontname','clean');
th2=text(0.9,0.,{line6,line5,line11,line7,line8},'horizontalalignment','right','verticalalignment','bottom','fontsize',8,'fontname','clean');
%set(th,'FontName','fixed');
axes(gh);

set(fh1,'color',[1,1,1]);

hold off;





title2=strcat('Tangential Component of the Distortion Model');

fh2 = 3;

%if ishandle(fh2),
%    close(fh2);
%end;
figure(fh2); clf;
xd=apply_distortion(x,[0 0 kc(3) kc(4) 0]);
px2=fc(1)*(xd(1,:)+alpha_c*xd(2,:))+cc(1);
py2=fc(2)*xd(2,:)+cc(2);
dx=px2-px';
dy=py2-py';
Q=quiver(px+1,py+1,dx,dy);
hold on;
plot(cc(1)+1,cc(2)+1,'o');
plot((nx-1)/2+1,(ny-1)/2+1,'x');
dr=reshape(sqrt((dx.*dx)+(dy.*dy)),nny,nnx)';
[C,h]=contour(mx,my,dr,'k');
% clabel(C,h);
Mean=mean(mean(dr));
Max=max(max(dr));
title(title2);

axis ij;
axis([1 nx 1 ny])
axis equal;
axis tight;

position=get(gca,'Position');
shr = 0.9;
position(1)=position(1)+position(3)*((1-shr)/2);
position(2)=position(2)+position(4)*(1-shr)+0.03;
position(3:4)=position(3:4)*shr;
set(gca,'position',position);
set(gca,'fontsize',8,'fontname','clean')

gh = gca;

line1=sprintf('Principal Point               = (%0.6g, %0.6g)',cc(1),cc(2));
line2=sprintf('Focal Length                 = (%0.6g, %0.6g)',fc(1),fc(2));
line3=sprintf('Radial coefficients         = (%0.4g, %0.4g, %0.4g)',kc(1),kc(2),kc(5));
line4=sprintf('Tangential coefficients  = (%0.4g, %0.4g)',kc(3),kc(4));
line5=sprintf('+/- [%0.4g, %0.4g]',cc_error(1),cc_error(2));
line6=sprintf('+/- [%0.4g, %0.4g]',fc_error(1),fc_error(2));
line7=sprintf('+/- [%0.4g, %0.4g, %0.4g]',kc_error(1),kc_error(2),kc_error(5));
line8=sprintf('+/- [%0.4g, %0.4g]',kc_error(3),kc_error(4));
line9=sprintf('Pixel error                      = [%0.4g, %0.4g]',err_std(1),err_std(2));
line10=sprintf('Skew                              = %0.4g',alpha_c);
line11=sprintf('+/- %0.4g',alpha_c_error);


axes('position',[0 0 1 1],'visible','off');
th=text(0.11,0,{line9,line2,line1,line10,line3,line4},'horizontalalignment','left','verticalalignment','bottom','fontsize',8,'fontname','clean');
th2=text(0.9,0.,{line6,line5,line11,line7,line8},'horizontalalignment','right','verticalalignment','bottom','fontsize',8,'fontname','clean');
%set(th,'FontName','fixed');
axes(gh);

set(fh2,'color',[1,1,1]);

hold off;








title2=strcat('Radial Component of the Distortion Model');

fh3 = 4;

%if ishandle(fh3),
%    close(fh3);
%end;
figure(fh3); clf;
xd=apply_distortion(x,[kc(1) kc(2) 0 0 kc(5)]);
px2=fc(1)*(xd(1,:)+alpha_c*xd(2,:))+cc(1);
py2=fc(2)*xd(2,:)+cc(2);
dx=px2-px';
dy=py2-py';
Q=quiver(px+1,py+1,dx,dy);
hold on;
plot(cc(1)+1,cc(2)+1,'o');
plot((nx-1)/2+1,(ny-1)/2+1,'x');
dr=reshape(sqrt((dx.*dx)+(dy.*dy)),nny,nnx)';
[C,h]=contour(mx,my,dr,'k');
clabel(C,h);
Mean=mean(mean(dr));
Max=max(max(dr));
title(title2);

axis ij;
axis([1 nx 1 ny])
axis equal;
axis tight;

position=get(gca,'Position');
shr = 0.9;
position(1)=position(1)+position(3)*((1-shr)/2);
position(2)=position(2)+position(4)*(1-shr)+0.03;
position(3:4)=position(3:4)*shr;
set(gca,'position',position);
set(gca,'fontsize',8,'fontname','clean')

gh = gca;

line1=sprintf('Principal Point               = (%0.6g, %0.6g)',cc(1),cc(2));
line2=sprintf('Focal Length                 = (%0.6g, %0.6g)',fc(1),fc(2));
line3=sprintf('Radial coefficients         = (%0.4g, %0.4g, %0.4g)',kc(1),kc(2),kc(5));
line4=sprintf('Tangential coefficients  = (%0.4g, %0.4g)',kc(3),kc(4));
line5=sprintf('+/- [%0.4g, %0.4g]',cc_error(1),cc_error(2));
line6=sprintf('+/- [%0.4g, %0.4g]',fc_error(1),fc_error(2));
line7=sprintf('+/- [%0.4g, %0.4g, %0.4g]',kc_error(1),kc_error(2),kc_error(5));
line8=sprintf('+/- [%0.4g, %0.4g]',kc_error(3),kc_error(4));
line9=sprintf('Pixel error                      = [%0.4g, %0.4g]',err_std(1),err_std(2));
line10=sprintf('Skew                              = %0.4g',alpha_c);
line11=sprintf('+/- %0.4g',alpha_c_error);


axes('position',[0 0 1 1],'visible','off');
th=text(0.11,0,{line9,line2,line1,line10,line3,line4},'horizontalalignment','left','verticalalignment','bottom','fontsize',8,'fontname','clean');
th2=text(0.9,0.,{line6,line5,line11,line7,line8},'horizontalalignment','right','verticalalignment','bottom','fontsize',8,'fontname','clean');
%set(th,'FontName','fixed');
axes(gh);

set(fh3,'color',[1,1,1]);

hold off;

figure(fh1);
