Changeset 116
- Timestamp:
- Oct 16, 2010, 5:56:00 PM (14 years ago)
- Location:
- trunk/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/civ.m
r113 r116 770 770 set(handles.RUN, 'Enable','On') 771 771 set(handles.RUN,'BackgroundColor',[1 0 0]) 772 if isequal(get(handles.BATCH, 'Enable'),'On')772 set(handles.BATCH,'Enable','On') 773 773 set(handles.BATCH,'BackgroundColor',[1 0 0]) 774 end775 774 776 775 %%%%% store the root input filename for future opening … … 2107 2106 s=convert(t); 2108 2107 end 2109 if batch 2108 test_interp=0; 2109 if batch 2110 2110 if isfield(s,'BatchParam') 2111 2111 sparam=s.BatchParam; … … 2140 2140 end 2141 2141 %test_interp=get(handles.test_interp,'Value'); 2142 test_interp=0; 2142 2143 2143 if isfield(sparam,'PatchBin') 2144 2144 if ~exist(sparam.PatchBin,'file') -
trunk/src/geometry_calib.m
r114 r116 71 71 % parameters on the uvmat interface (obtained by 'get_plot_handle.m') 72 72 %------------------------------------------------------------------------ 73 function geometry_calib_OpeningFcn(hObject, eventdata, handles, handles_uvmat,pos,inputfile)73 function geometry_calib_OpeningFcn(hObject, eventdata, handles,inputfile,pos) 74 74 %------------------------------------------------------------------------ 75 75 % Choose default command line output for geometry_calib … … 81 81 82 82 %set the position of the interface 83 if exist('pos','var')& length(pos)>283 if exist('pos','var')&& length(pos)>2 84 84 pos_gui=get(hObject,'Position'); 85 85 pos_gui(1)=pos(1); … … 92 92 set(handles.calib_type,'String',{'rescale';'linear';'quadr';'3D_linear';'3D_quadr';'3D_extrinsic'}) 93 93 inputxml=''; 94 if exist('inputfile','var')& ~isempty(inputfile)94 if exist('inputfile','var')&& ~isempty(inputfile) 95 95 struct.XmlInputFile=inputfile; 96 96 set(hObject,'UserData',struct) 97 97 [Pathsub,RootFile,field_count,str2,str_a,str_b,ext,nom_type,subdir]=name2display(inputfile); 98 inputxml=[fullfile(Pathsub,RootFile) '.xml']; 98 if ~strcmp(ext,'.xml') 99 inputfile=[fullfile(Pathsub,RootFile) '.xml']%xml file corresponding to the input file 100 end 99 101 end 100 102 set(handles.ListCoord,'String',{'......'}) 101 if exist(input xml,'file')102 loadfile(handles,input xml)% load the point coordiantes existing in the xml file103 if exist(inputfile,'file') 104 loadfile(handles,inputfile)% load the point coordiantes existing in the xml file 103 105 end 104 106 set(handles.ListCoord,'KeyPressFcn',{@key_press_fcn,handles})%set keyboard action function … … 232 234 set(hhuvmat.FixedLimits,'Value',0)% put FixedLimits option to 'off' 233 235 set(hhuvmat.FixedLimits,'BackgroundColor',[0.7 0.7 0.7]) 236 UserData=get(handles.geometry_calib,'UserData'); 237 UserData.XmlInputFile=outputfile;%save the current xml file name 238 set(handles.geometry_calib,'UserData',UserData) 234 239 uvmat('RootPath_Callback',hObject,eventdata,hhuvmat); %file input with xml reading in uvmat, show the image in phys coordinates 235 240 MenuPlot_Callback(hObject, eventdata, handles) … … 294 299 %record the points 295 300 GeometryCalib.SourceCalib.PointCoord=Coord; 296 errormsg=update_imadoc(GeometryCalib,outputfile);% introduce the calibration data in the xml file297 if ~strcmp(errormsg,'')298 msgbox_uvmat('ERROR',errormsg);299 end301 % errormsg=update_imadoc(GeometryCalib,outputfile);% introduce the calibration data in the xml file 302 % if ~strcmp(errormsg,'') 303 % msgbox_uvmat('ERROR',errormsg); 304 % end 300 305 end 301 306 display_intrinsic(GeometryCalib,handles)%display calibration intrinsic parameters … … 412 417 % y1=XY_mat*a_Y1; 413 418 % err_Y1=max(abs(y1-y_ima));%error 419 R=[a_X1(2),a_X1(3),0;a_Y1(2),a_Y1(3),0;0,0,0]; 420 norm=abs(det(R)); 414 421 GeometryCalib.CalibrationType='linear'; 415 GeometryCalib.f ocal=1;422 GeometryCalib.fx_fy=[norm norm]; 416 423 GeometryCalib.CoordUnit=[];% default value, to be updated by the calling function 417 424 R=[a_X1(2),a_X1(3),0;a_Y1(2),a_Y1(3),0;0,0,0]; 418 norm=det(R); 419 GeometryCalib.Tx_Ty_Tz=[a_X1(1) a_Y1(1) norm]; 425 GeometryCalib.Tx_Ty_Tz=[a_X1(1) a_Y1(1) 1]; 420 426 GeometryCalib.R=R/norm; 421 427 GeometryCalib.omc=(180/pi)*[acos(R(1,1)) 0 0]; 422 428 %------------------------------------------------------------------------ 423 429 % determine the tsai parameters for a view normal to the grid plane … … 600 606 path_uvmat=which('geometry_calib');% check the path detected for source file uvmat 601 607 path_UVMAT=fileparts(path_uvmat); %path to UVMAT 602 x_1= Coord(:,4:5)';603 X_1= Coord(:,1:3)';608 x_1=double(Coord(:,4:5)');%image coordiantes 609 X_1=double(Coord(:,1:3)');% phys coordinates 604 610 huvmat=findobj(allchild(0),'Tag','uvmat'); 605 611 hhuvmat=guidata(huvmat); 606 ny=str2 num(get(hhuvmat.npy,'String'));612 ny=str2double(get(hhuvmat.npy,'String')); 607 613 x_1(2,:)=ny-x_1(2,:);%reverse the y image coordinates 608 614 n_ima=1; … … 615 621 fct_path=fullfile(path_UVMAT,'toolbox_calib'); 616 622 addpath(fct_path) 617 Cx_Cy=ny-(GeometryCalib.Cx_Cy)';%reverse Cx_Cy(2) for calibration (inversion of px ordinate)623 GeometryCalib.Cx_Cy(2)=ny-GeometryCalib.Cx_Cy(2);%reverse Cx_Cy(2) for calibration (inversion of px ordinate) 618 624 % [omc1,Tc1,Rc1,H,x,ex,JJ] = compute_extrinsic(x_1,X_1,... 619 625 % [Calib.f Calib.f*Calib.sx]',... … … 621 627 % [-Calib.kappa1*Calib.f^2 0 0 0 0]); 622 628 [omc,Tc1,Rc1,H,x,ex,JJ] = compute_extrinsic(x_1,X_1,... 623 (GeometryCalib.fx_fy)',... 624 Cx_Cy,[GeometryCalib.kc 0 0 0 0]); 625 %get the euler angles ??? 629 (GeometryCalib.fx_fy)',GeometryCalib.Cx_Cy',[GeometryCalib.kc 0 0 0 0]); 626 630 rmpath(fct_path); 627 628 std(ex')629 631 GeometryCalib.CoordUnit=[];% default value, to be updated by the calling function 630 632 GeometryCalib.Tx_Ty_Tz=Tc1'; … … 633 635 GeometryCalib.R(2,1:3)=-GeometryCalib.R(2,1:3);%inversion of the y image coordinate 634 636 GeometryCalib.Tx_Ty_Tz(2)=-GeometryCalib.Tx_Ty_Tz(2);%inversion of the y image coordinate 635 %GeometryCalib.Cx_Cy(2)=ny-GeometryCalib.Cx_Cy(2);%inversion of the y image coordinate637 GeometryCalib.Cx_Cy(2)=ny-GeometryCalib.Cx_Cy(2);%inversion of the y image coordinate 636 638 GeometryCalib.omc=(180/pi)*omc'; 637 639 %GeometryCalib.R(3,1:3)=-GeometryCalib.R(3,1:3);%inversion for z upward 640 638 641 639 642 … … 993 996 % -------------------------------------------------------------------- 994 997 function MenuHelp_Callback(hObject, eventdata, handles) 995 path_to_uvmat=which 998 path_to_uvmat=which('uvmat');% check the path of uvmat 996 999 pathelp=fileparts(path_to_uvmat); 997 1000 helpfile=fullfile(pathelp,'uvmat_doc','uvmat_doc.html'); 998 1001 if isempty(dir(helpfile)), msgbox_uvmat('ERROR','Please put the help file uvmat_doc.html in the sub-directory /uvmat_doc of the UVMAT package') 999 1002 else … … 1409 1412 GeometryCalib=s.GeometryCalib; 1410 1413 %GeometryCalib=load_calib(hObject, eventdata, handles) 1411 calib=reshape(GeometryCalib.PointCoord ',[],1);1414 calib=reshape(GeometryCalib.PointCoord,[],1); 1412 1415 for ilist=1:numel(calib) 1413 1416 CoordCell{ilist}=num2str(calib(ilist)); … … 1474 1477 fileinput=[];%default 1475 1478 oldfile=''; %default 1476 UserData=get(handles.geometry_calib,'UserData') 1479 UserData=get(handles.geometry_calib,'UserData'); 1477 1480 if isfield(UserData,'XmlInputFile') 1478 1481 oldfile=UserData.XmlInputFile; … … 1497 1500 function loadfile(handles,fileinput) 1498 1501 %------------------------------------------------------------------------ 1499 [s,errormsg]=imadoc2struct(fileinput,'GeometryCalib'); 1500 GeometryCalib=s.GeometryCalib 1502 fileinput 1503 [s,errormsg]=imadoc2struct(fileinput,'GeometryCalib') 1504 GeometryCalib=s.GeometryCalib; 1501 1505 fx=1;fy=1;Cx=0;Cy=0;kc=0; %default 1502 1506 % Tabchar={}; … … 1534 1538 set(handles.Psi,'String',num2str(GeometryCalib.omc(3),4)) 1535 1539 end 1536 calib=reshape(GeometryCalib.PointCoord ',[],1);1540 calib=reshape(GeometryCalib.PointCoord,[],1); 1537 1541 for ilist=1:numel(calib) 1538 1542 CoordCell{ilist}=num2str(calib(ilist)); -
trunk/src/griddata_uvmat.m
r115 r116 2 2 %adapt the input of the matlab function griddata to the appropriate version of Matlab 3 3 function ZI = griddata_uvmat(X,Y,Z,XI,YI) 4 whos X Y Z XI YI5 4 txt=ver; 6 5 Release=txt(1).Release; 7 relnumb=str2num(Release(3:4)) 6 relnumb=str2num(Release(3:4)); 8 7 if relnumb >= 20 9 8 ZI=griddata(double(X),double(Y),double(Z),double(XI),double(YI),'linear',{'QJ'}); -
trunk/src/imadoc2struct.m
r114 r116 217 217 if strcmp(option,'GeometryCalib') 218 218 tsai.PointCoord=get_value(subt,'/GeometryCalib/SourceCalib/PointCoord',[0 0 0 0 0]);%time in TimeUnit 219 size(tsai.PointCoord) 219 220 end 220 221 s.GeometryCalib=tsai; … … 228 229 val=default; 229 230 uid=find(t,label);%find the element iud(s) 230 if ~isempty(uid) 231 uid_child=children(t,uid); 231 if ~isempty(uid) %if the element named label exists 232 uid_child=children(t,uid);%find the children 232 233 if ~isempty(uid_child) 233 data=get(t,uid_child,'type'); 234 if iscell(data) 234 data=get(t,uid_child,'type');%get the type of child 235 if iscell(data)% case of multiple element 235 236 for icell=1:numel(data) 236 237 val_read=str2num(get(t,uid_child(icell),'value')); … … 239 240 end 240 241 end 241 val=val';242 else 242 % val=val'; 243 else % case of unique element value 243 244 val_read=str2num(get(t,uid_child,'value')); 244 245 if ~isempty(val_read) -
trunk/src/series/merge_proj.m
r109 r116 23 23 WaitbarPos=get(hseries.waitbar_frame,'Position'); %positiopn of waitbar frame 24 24 %------------------------------------------------- 25 26 25 27 26 28 %projection object … … 229 231 if ~exist(res_subdir,'dir') 230 232 dircur=pwd; 231 cd(fulldir) 232 error=mkdir(subdir); 233 cd(dircur) 233 cd(fulldir); 234 succeed=mkdir(subdir); 235 if succeed 236 cd(dircur); 237 else 238 msgbox_uvmat('ERROR',['Cannot create directory ' fulldir]) 239 return 240 end 234 241 end 235 242 filebasesub=fullfile(res_subdir,Series.RootFile{1}); … … 286 293 % coord transform 287 294 % z index 295 288 296 if ~isempty(NbSlice_calib) 289 Field{iview}.ZIndex=mod(num_i1{iview}(ifile)-1,NbSlice_calib{1})+1; 290 end 297 Field{iview}.ZIndex=mod(num_i1{iview}(ifile)-1,NbSlice_calib{1})+1 298 end 299 % Field{iview}.ZIndex=1; 291 300 if ~isempty(transform_fct) 292 Field{iview}=transform_fct(Field{iview},XmlData{iview});%transform to phys if requested 301 XmlData{iview}.GeometryCalib 302 Field{iview}=transform_fct(Field{iview},XmlData{iview}); 303 %transform to phys if requested 293 304 end 294 305 if testcivx … … 301 312 end 302 313 end 303 304 314 %----------END LOOP ON VIEWS---------------------- 305 315 … … 376 386 %MergeData.dt=1; 377 387 MergeData.Time=time_i; 378 error=struct2nc(mergename,MergeData); 388 error=struct2nc(mergename,MergeData);%save result file 379 389 if isempty(error) 380 390 display(['output file ' mergename ' written']) -
trunk/src/transform_field/phys.m
r79 r116 58 58 end 59 59 %transform of X,Y coordinates for vector fields 60 if isfield(Data,'ZIndex')&&~isempty(Data.ZIndex) 60 if isfield(Data,'ZIndex')&&~isempty(Data.ZIndex)&&~isnan(Data.ZIndex) 61 61 ZIndex=Data.ZIndex; 62 62 else 63 ZIndex= 0;63 ZIndex=1; 64 64 end 65 65 if test_1 … … 111 111 DataOut.TimeUnit='s'; 112 112 %transform of X,Y coordinates for vector fields 113 if isfield(Data,'ZIndex') && ~isempty(Data.ZIndex) 114 Z=Data.ZIndex ;113 if isfield(Data,'ZIndex') && ~isempty(Data.ZIndex)&&~isnan(Data.ZIndex) 114 Z=Data.ZIndex 115 115 else 116 116 Z=0; … … 153 153 end 154 154 155 156 155 %%%%%%%%%%%%%%%%%%%% 157 156 function [A_out,Rangx,Rangy]=phys_Ima(A,CalibIn,ZIndex) 157 158 if ndims(A)==3 159 A=mean(A,3); 160 end 161 162 158 163 xcorner=[]; 159 164 ycorner=[]; 160 165 npx=[]; 161 166 npy=[]; 167 dx=ones(1,length(A)); 168 dy=ones(1,length(A)); 162 169 for icell=1:length(A) 163 170 siz=size(A{icell}); … … 165 172 npy=[npy siz(1)]; 166 173 Calib=CalibIn{icell}; 167 xima=[0.5 siz(2)-0.5 0.5 siz(2)-0.5];%image coordi antes of corners174 xima=[0.5 siz(2)-0.5 0.5 siz(2)-0.5];%image coordinates of corners 168 175 yima=[0.5 0.5 siz(1)-0.5 siz(1)-0.5]; 169 176 [xcorner_new,ycorner_new]=phys_XYZ(Calib,xima,yima,ZIndex);%corresponding physical coordinates … … 177 184 Rangy(2)=min(ycorner); 178 185 Rangy(1)=max(ycorner); 179 test_multi=(max(npx)~=min(npx)) | (max(npy)~=min(npy));186 test_multi=(max(npx)~=min(npx)) || (max(npy)~=min(npy)); %different image lengths 180 187 npX=1+round((Rangx(2)-Rangx(1))/min(dx));% nbre of pixels in the new image (use the finest resolution min(dx) in the set of images) 181 188 npY=1+round((Rangy(1)-Rangy(2))/min(dy)); … … 187 194 for icell=1:length(A) 188 195 Calib=CalibIn{icell}; 189 if (isfield(Calib,'R') && ~isequal(Calib.R(2,1),0) && ~isequal(Calib.R(1,2),0)) ||... 190 ((isfield(Calib,'kappa1')&& ~isequal(Calib.kappa1,0))) || test_multi || ~isequal(Calib,CalibIn{1}) 196 if isfield(Calib,'R') || isfield(Calib,'kc')|| test_multi ||~isequal(Calib,CalibIn{1})% the image needs to be interpolated to the new coordinates 191 197 zphys=0; %default 192 198 if isfield(Calib,'SliceCoord') %.Z= index of plane … … 227 233 A_out{icell}=uint16(A_out{icell}); 228 234 end 229 else% 230 235 else% 231 236 A_out{icell}=A{icell};%no transform 232 237 Rangx=[0.5 npx-0.5];%image coordiantes of corners 233 238 Rangy=[npy-0.5 0.5]; 234 [Rangx]=phys_XYZ(Calib,Rangx,[0.5 0.5],[ZIndex ZIndex]);%case of translations without rotation and quadratic deformation 235 [xx,Rangy]=phys_XYZ(Calib,[0.5 0.5],Rangy,[ZIndex ZIndex]); 236 end 237 end 238 239 [Rangx]=phys_XYZ(Calib,Rangx,[0.5 0.5],ZIndex);%case of translations without rotation and quadratic deformation 240 [xx,Rangy]=phys_XYZ(Calib,[0.5 0.5],Rangy,ZIndex); 241 end 242 end 243 244 %------------------------------------------------------------------------ 239 245 %'phys_XYZ':transforms image (px) to real world (phys) coordinates using geometric calibration parameters 240 246 % function [Xphys,Yphys]=phys_XYZ(Calib,X,Y,Z) … … 245 251 %Z: index of plane 246 252 function [Xphys,Yphys,Zphys]=phys_XYZ(Calib,X,Y,Z) 247 if exist('Z','var')& isequal(Z,round(Z))& Z>0 & isfield(Calib,'SliceCoord')&length(Calib.SliceCoord)>=Z 253 %------------------------------------------------------------------------ 254 if exist('Z','var')&& isequal(Z,round(Z))&& Z>0 && isfield(Calib,'SliceCoord')&&length(Calib.SliceCoord)>=Z 248 255 Zindex=Z; 249 256 Zphys=Calib.SliceCoord(Zindex,3);%GENERALISER AUX CAS AVEC ANGLE 250 257 else 251 % if exist('Z','var') 252 % Zphys=Z; 253 % else 254 Zphys=0; 255 % end 258 Zphys=0; 256 259 end 257 260 if ~exist('X','var')||~exist('Y','var') … … 260 263 return 261 264 end 262 Xphys=X;%default 263 Yphys=Y; 264 %image transform 265 %coordinate transform 266 if ~isfield(Calib,'fx_fy') 267 Calib.fx_fy=[1 1]; 268 end 269 if ~isfield(Calib,'Tx_Ty_Tz') 270 Calib.Tx_Ty_Tz=[0 0 1]; 271 end 272 if ~isfield(Calib,'Cx_Cy') 273 Calib.Cx_Cy=[0 0]; 274 end 275 if ~isfield(Calib,'kc') 276 Calib.kc=0; 277 end 265 278 if isfield(Calib,'R') 266 279 R=(Calib.R)'; 280 Tx=Calib.Tx_Ty_Tz(1); 281 Ty=Calib.Tx_Ty_Tz(2); 282 Tz=Calib.Tx_Ty_Tz(3); 283 f=Calib.fx_fy(1);%dpy=1; sx=1 284 dpx=Calib.fx_fy(2)/Calib.fx_fy(1); 267 285 Dx=R(5)*R(7)-R(4)*R(8); 268 286 Dy=R(1)*R(8)-R(2)*R(7); 269 D0= Calib.f*(R(2)*R(4)-R(1)*R(5));287 D0=f*(R(2)*R(4)-R(1)*R(5)); 270 288 Z11=R(6)*R(8)-R(5)*R(9); 271 289 Z12=R(2)*R(9)-R(3)*R(8); … … 274 292 Zx0=R(3)*R(5)-R(2)*R(6); 275 293 Zy0=R(1)*R(6)-R(3)*R(4); 276 A11=R(8)* Calib.Ty-R(5)*Calib.Tz+Z11*Zphys;277 A12=R(2)* Calib.Tz-R(8)*Calib.Tx+Z12*Zphys;278 A21=-R(7)* Calib.Ty+R(4)*Calib.Tz+Z21*Zphys;279 A22=-R(1)* Calib.Tz+R(7)*Calib.Tx+Z11*Zphys;280 X0= Calib.f*(R(5)*Calib.Tx-R(2)*Calib.Ty+Zx0*Zphys);281 Y0= Calib.f*(-R(4)*Calib.Tx+R(1)*Calib.Ty+Zy0*Zphys);294 A11=R(8)*Ty-R(5)*Tz+Z11*Zphys; 295 A12=R(2)*Tz-R(8)*Tx+Z12*Zphys; 296 A21=-R(7)*Ty+R(4)*Tz+Z21*Zphys; 297 A22=-R(1)*Tz+R(7)*Tx+Z22*Zphys; 298 X0=f*(R(5)*Tx-R(2)*Ty+Zx0*Zphys); 299 Y0=f*(-R(4)*Tx+R(1)*Ty+Zy0*Zphys); 282 300 %px to camera: 283 Xd= (Calib.dpx/Calib.sx)*(X-Calib.Cx); % sensor coordinates284 Yd= Calib.dpy*(Y-Calib.Cy);285 dist_fact=1+Calib.k appa1*(Xd.*Xd+Yd.*Yd); %distortion factor286 Xu= dist_fact.*Xd;%undistorted sensor coordinates287 Yu= dist_fact.*Yd;301 Xd=dpx*(X-Calib.Cx_Cy(1)); % sensor coordinates 302 Yd=(Y-Calib.Cx_Cy(2)); 303 dist_fact=1+Calib.kc*(Xd.*Xd+Yd.*Yd)/(f*f); %distortion factor 304 Xu=Xd./dist_fact;%undistorted sensor coordinates 305 Yu=Yd./dist_fact; 288 306 denom=Dx*Xu+Dy*Yu+D0; 289 307 % denom2=denom.*denom; 290 308 Xphys=(A11.*Xu+A12.*Yu+X0)./denom;%world coordinates 291 309 Yphys=(A21.*Xu+A22.*Yu+Y0)./denom; 310 % Xd=(X-Calib.Cx_Cy(1))/Calib.fx_fy(1); % sensor coordinates 311 % Yd=(Y-Calib.Cx_Cy(2))/Calib.fx_fy(2); 312 % dist_fact=1+Calib.kc*(Xd.*Xd+Yd.*Yd); %distortion factor 313 % Xu=Xd./dist_fact;%undistorted sensor coordinates 314 % Yu=Yd./dist_fact; 315 % A11=R(7)*Xu-R(1); 316 % A12=R(8)*Xu-R(2); 317 % A21=R(7)*Yu-R(4); 318 % A22=R(8)*Yu-R(5); 319 % B1=(R(3)-R(9)*Xu)*Zphys-Tz*Xu+Tx; 320 % B2=(R(6)-R(9)*Yu)*Zphys-Tz*Yu+Ty; 321 % deter=A12.*A21-A11.*A22; 322 % Xphys=(A21.*B1-A11.*B2)./deter; 323 % Yphys=(-A22.*B1+A12.*B2)./deter; 324 else 325 Xphys=-Calib.Tx_Ty_Tz(1)+X/Calib.fx_fy(1); 326 Yphys=-Calib.Tx_Ty_Tz(2)+Y/Calib.fx_fy(2); 292 327 end 293 328 -
trunk/src/transform_field/px.m
r40 r116 18 18 % DataIn.A, AX, AY : image or scalar input -> EMPTY CORRESPONDING OUTPUT (A REVOIR) 19 19 % Other fields in DataIn: copied to DataOut without modification 20 % Calib: structure containing the calibration parameters (Tsai) or containing a subtree Calib.GeometryCalib with theseparameters20 % Calib: structure containing the substructure Calib.GeometryCalib with the calibration parameters 21 21 % 22 22 % call the function px_XYZ (case of images) for pointwise coordinate transforms … … 36 36 DataOut=px_1(Data,CalibData.GeometryCalib); 37 37 end 38 if exist('Data_1','var') 38 if isfield(DataOut,'Z') 39 DataOut=rmfield(DataOut,'Z'); 40 end 41 if exist('Data_1','var')% if there is a second input field, it is also transformed 39 42 if ~(exist('CalibData_1','var') && isfield(CalibData_1,'GeometryCalib')) 40 43 DataOut_1=Data_1; … … 42 45 DataOut_1=px_1(Data_1,CalibData_1.GeometryCalib); 43 46 end 44 else 47 if isfield(DataOut_1,'Z') 48 DataOut_1=rmfield(DataOut_1,'Z'); 49 end 50 else % no second input field then empty second output field 45 51 DataOut_1=[]; 46 52 end … … 52 58 53 59 %Act only if .CoordType=phys, and Calib defined 54 if isfield(Data,'CoordType')& isequal(Data.CoordType,'phys')& ~isempty(Calib)60 if isfield(Data,'CoordType')&& isequal(Data.CoordType,'phys')&& ~isempty(Calib) 55 61 DataOut.CoordType='px'; %put flag for pixel coordinates 56 62 DataOut.CoordUnit='px'; 57 63 %transform of X,Y coordinates 58 if isfield(Data,'Z')& ~isempty(Data.Z)64 if isfield(Data,'Z')&&~isempty(Data.Z) 59 65 Z=Data.Z; 60 66 else … … 97 103 % [Zphys]: corresponding array of z physical coordinates (0 by default) 98 104 99 100 function [X,Y]=px_XYZ(Calib,Xphys,Yphys,Zphys) 101 X=[];%default 102 Y=[]; 103 % if exist('Z','var')& isequal(Z,round(Z))& Z>0 & isfield(Calib,'PlanePos')&length(Calib.PlanePos)>=Z 104 % Zindex=Z; 105 % planepos=Calib.PlanePos{Zindex}; 106 % zphys=planepos(3);%A GENERALISER CAS AVEC ANGLE 107 % else 108 % zphys=0; 105 % 106 % function [X,Y]=px_XYZ(Calib,Xphys,Yphys,Zphys) 107 % X=[];%default 108 % Y=[]; 109 % % if exist('Z','var')& isequal(Z,round(Z))& Z>0 & isfield(Calib,'PlanePos')&length(Calib.PlanePos)>=Z 110 % % Zindex=Z; 111 % % planepos=Calib.PlanePos{Zindex}; 112 % % zphys=planepos(3);%A GENERALISER CAS AVEC ANGLE 113 % % else 114 % % zphys=0; 115 % % end 116 % if ~exist('Zphys','var') 117 % Zphys=0; 109 118 % end 110 if ~exist('Zphys','var') 111 Zphys=0; 112 end 113 114 %%%%%%%%%%%%% 115 if isfield(Calib,'R') 116 R=(Calib.R)'; 117 xc=R(1)*Xphys+R(2)*Yphys+R(3)*Zphys+Calib.Tx; 118 yc=R(4)*Xphys+R(5)*Yphys+R(6)*Zphys+Calib.Ty; 119 zc=R(7)*Xphys+R(8)*Yphys+R(9)*Zphys+Calib.Tz; 120 %undistorted image coordinates 121 Xu=Calib.f*xc./zc; 122 Yu=Calib.f*yc./zc; 123 %distorted image coordinates 124 distortion=(Calib.kappa1)*(Xu.*Xu+Yu.*Yu)+1; %A REVOIR 125 % distortion=1; 126 Xd=Xu./distortion; 127 Yd=Yu./distortion; 128 %pixel coordinates 129 X=Xd*Calib.sx/Calib.dpx+Calib.Cx; 130 Y=Yd/Calib.dpy+Calib.Cy; 131 132 elseif isfield(Calib,'Pxcmx')&isfield(Calib,'Pxcmy')%old calib 133 X=Xphys*Calib.Pxcmx; 134 Y=Yphys*Calib.Pxcmy; 135 end 119 % 120 % %%%%%%%%%%%%% 121 % if isfield(Calib,'R') 122 % R=(Calib.R)'; 123 % xc=R(1)*Xphys+R(2)*Yphys+R(3)*Zphys+Calib.Tx; 124 % yc=R(4)*Xphys+R(5)*Yphys+R(6)*Zphys+Calib.Ty; 125 % zc=R(7)*Xphys+R(8)*Yphys+R(9)*Zphys+Calib.Tz; 126 % %undistorted image coordinates 127 % Xu=Calib.f*xc./zc; 128 % Yu=Calib.f*yc./zc; 129 % %distorted image coordinates 130 % distortion=(Calib.kappa1)*(Xu.*Xu+Yu.*Yu)+1; %A REVOIR 131 % % distortion=1; 132 % Xd=Xu./distortion; 133 % Yd=Yu./distortion; 134 % %pixel coordinates 135 % X=Xd*Calib.sx/Calib.dpx+Calib.Cx; 136 % Y=Yd/Calib.dpy+Calib.Cy; 137 % 138 % elseif isfield(Calib,'Pxcmx')&isfield(Calib,'Pxcmy')%old calib 139 % X=Xphys*Calib.Pxcmx; 140 % Y=Yphys*Calib.Pxcmy; 141 % end 136 142 137 143 -
trunk/src/uvmat.m
r114 r116 744 744 set(handles.view_xml,'BackgroundColor',[1 1 1]) 745 745 drawnow 746 if isfield(XmlData, 'GeometryCalib') && ~isempty(XmlData.GeometryCalib) 747 hgeometry_calib=findobj('tag','geometry_calib'); 748 if ~isempty(hgeometry_calib) 749 GUserData=get(hgeometry_calib,'UserData'); 750 if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,filexml)) 751 answer=msgbox_uvmat('INPUT_Y-N','replace the display of geometry_calib with the new input data?'); 752 if strcmp(answer,'Yes') 753 geometry_calib(filexml);%diplay the new calibration points and parameters in geometry_calib 754 end 755 end 756 end 757 end 746 758 elseif exist(fileciv,'file')% if .civ file found 747 759 [error,XmlData.Time,TimeUnit,mode,npx,npy,pxcmx,pxcmy]=read_imatext([FileBase '.civ']); … … 4565 4577 pos(2)=pos(2)-0.02; 4566 4578 [FileName,RootPath,FileBase,FileIndices,FileExt,SubDir]=read_file_boxes(handles); 4567 [UvData.hset_object,UvData.sethandles]=geometry_calib( handles,pos,FileName);% call the set_objectinterface4579 [UvData.hset_object,UvData.sethandles]=geometry_calib(FileName,pos);% call the geometry_calib interface 4568 4580 pos_uvmat=get(handles.uvmat,'Position'); 4569 4581 -
trunk/src/view_field.m
r102 r116 605 605 %------------------------------------------------------- 606 606 function decimate4_Callback(hObject, eventdata, handles) 607 'TEST' 607 608 update_plot(handles) 608 609
Note: See TracChangeset
for help on using the changeset viewer.