function out=CPleastsqmethod(); % to read data from G.byt file % infname='CalgridG.byt'; fid=fopen(infname); G=fread(fid,'float'); fclose(fid); %no of elements% %n=G(1); %A=reshape(G(2:141),7,20)'; A=read_calib_data(infname,18); %reading the world coordinates% xw=A(:,1); yw=A(:,2); zw=A(:,3); %reading the camera coordinates% xc=A(:,4) yc=A(:,5) %reading the projector coordinates% xp=A(:,6); yp=A(:,7) %%%calculate transformation matrix using linear triangulation%%% %%%perspective matrix for camera%%%% N=18; for i=1:N Ac(2*i-1,:)=[xw(i) yw(i) zw(i) 1 0 0 0 0 -xc(i)*xw(i) -xc(i)*yw(i) -xc(i)*zw(i)]; Ac(2*i,:)=[0 0 0 0 xw(i) yw(i) zw(i) 1 -yc(i)*xw(i) -yc(i)*yw(i) -yc(i)*zw(i)]; Pc(2*i-1,1)=xc(i); Pc(2*i,1)=yc(i); end mc=(inv(Ac'*Ac))*Ac'*Pc; mc(12)=1; mwc=(reshape(mc,4,3))'; %%%perspective matrix for projector%%%% for i=1:N Ayp(i,:)=[xw(i) yw(i) zw(i) 1 -yp(i)*xw(i) -yp(i)*yw(i) -yp(i)*zw(i)]; Pp(i,1)=yp(i); end mp=(inv(Ayp'*Ayp))*Ayp'*Pp; mp(8)=1; mwp=(reshape(mp,4,2))'; %%%%%reconstruct the 3D world co-ordinates%%%%% M=18; for i=1:M c(1,1)=mwc(1,1)-mwc(3,1)*xc(i); c(1,2)=mwc(1,2)-mwc(3,2)*xc(i); c(1,3)=mwc(1,3)-mwc(3,3)*xc(i); c(2,1)=mwc(2,1)-mwc(3,1)*yc(i); c(2,2)=mwc(2,2)-mwc(3,2)*yc(i); c(2,3)=mwc(2,3)-mwc(3,3)*yc(i); c(3,1)=mwp(1,1)-mwp(2,1)*yp(i); c(3,2)=mwp(1,2)-mwp(2,2)*yp(i); c(3,3)=mwp(1,3)-mwp(2,3)*yp(i); d(1,1)=xc(i)-mwc(1,4); d(2,1)=yc(i)-mwc(2,4); d(3,1)=yp(i)-mwp(1,4); W(:,i)=inv(c)*d; end new_xw(:,1)=W(1,:); new_yw(:,1)=W(2,:); new_zw(:,1)=W(3,:); pdisplay=zeros(18,3); olddisplay=pdisplay; pdisplay(:,1)=new_xw(:,1); pdisplay(:,2)=new_yw(:,1); pdisplay(:,3)=new_zw(:,1); olddisplay(:,1)=xw; olddisplay(:,2)=yw; olddisplay(:,3)=zw; pdisplay olddisplay errval(:,1)= xw-new_xw(:,1); errval(:,2)= yw-new_yw(:,1); errval(:,3)= zw-new_zw(:,1) % erval = sqrt(errval(:,1).^2+errval(:,2).^2+errval(:,3).^2) meanerval=mean(erval) %write the projector parameters fp = fopen('proj.txt','w'); fprintf(fp,'%f ',mwp(1,1));fprintf(fp,'%f ',mwp(1,2));fprintf(fp,'%f ',mwp(1,3));fprintf(fp,'%f\n',mwp(1,4)); fprintf(fp,'%f ',mwp(2,1));fprintf(fp,'%f ',mwp(2,2));fprintf(fp,'%f ',mwp(2,3));fprintf(fp,'%f\n',mwp(2,4)); %fprintf(fp,'%f ',mwp(3,1));fprintf(fp,'%f ',mwp(3,2));fprintf(fp,'%f ',mwp(3,3));fprintf(fp,'%f\n',mwp(3,4)); fclose(fp); %write the camera parameters fp = fopen('cam.txt','w'); fprintf(fp,'%f ',mwc(1,1));fprintf(fp,'%f ',mwc(1,2));fprintf(fp,'%f ',mwc(1,3));fprintf(fp,'%f\n',mwc(1,4)); fprintf(fp,'%f ',mwc(2,1));fprintf(fp,'%f ',mwc(2,2));fprintf(fp,'%f ',mwc(2,3));fprintf(fp,'%f\n',mwc(2,4)); fprintf(fp,'%f ',mwc(3,1));fprintf(fp,'%f ',mwc(3,2));fprintf(fp,'%f ',mwc(3,3));fprintf(fp,'%f\n',mwc(3,4)); fclose(fp); mwc mwp out=1;