1 | function [align] = bluechoengg(in,config) |
---|
2 | % bluechoengg ... local routines for the hoengg installation |
---|
3 | % |
---|
4 | % [align] = bluechoengg(in,config) |
---|
5 | % in, config ... see the main GOCAL script |
---|
6 | % |
---|
7 | % align ... structures aligned wit the specified world frame |
---|
8 | % |
---|
9 | % $Id: bluechoengg.m,v 2.1 2005/05/20 15:27:37 svoboda Exp $ |
---|
10 | |
---|
11 | Cst = in.Cst; |
---|
12 | Rot = in.Rot; |
---|
13 | |
---|
14 | drawscene(in.Xe,Cst',Rot,41,'cloud','Graphical Output Validation: View from top or bottom',config.cal.cams2use); |
---|
15 | |
---|
16 | horizplane.idx(1) = find(config.cal.cams2use==13); |
---|
17 | horizplane.idx(2) = find(config.cal.cams2use==14); |
---|
18 | horizplane.idx(3) = find(config.cal.cams2use==15); |
---|
19 | horizplane.idx(4) = find(config.cal.cams2use==16); |
---|
20 | horizplane.vec = pinv([Cst(horizplane.idx,1:2),ones(size(horizplane.idx))'])*Cst(horizplane.idx,3); |
---|
21 | horizplane.par = [-horizplane.vec(1),-horizplane.vec(2),1,-horizplane.vec(3)]; |
---|
22 | horizplane.n = horizplane.par(1:3)'; |
---|
23 | |
---|
24 | % set the camera on top |
---|
25 | set(gca,'CameraTarget',mean(Cst(horizplane.idx,:))); |
---|
26 | set(gca,'CameraPosition',mean(Cst(horizplane.idx,:))+3*horizplane.n'); |
---|
27 | % figure(41), print -depsc grapheval.eps |
---|
28 | |
---|
29 | % definition of the absolute world frame |
---|
30 | % ccam(11).C = [1.40, -2.05, 2.70]; |
---|
31 | cam(13).C = [-1.40, -2.55, 2.70]'; |
---|
32 | cam(14).C = [-1.40, 2.70, 2.70]'; |
---|
33 | cam(15).C = [0, 2.70, 2.70]'; |
---|
34 | cam(16).C = [1.40, 2.70, 2.70]'; |
---|
35 | |
---|
36 | cam(1).C = [-3.70, -2.55, 1.55]'; % relatively ad hoc values to improve the stability |
---|
37 | cam(5).C = [-3.70, 4.06, 1.55]'; |
---|
38 | cam(6).C = [3.70, 4.06, 1.55]'; |
---|
39 | cam(10).C = [3.70, -2.55, 1.55]'; |
---|
40 | % of the similarity computation |
---|
41 | |
---|
42 | [align.simT.s, align.simT.R, align.simT.t] = estsimt([Cst(find(config.cal.cams2use==1),:)', Cst(find(config.cal.cams2use==5),:)', Cst(find(config.cal.cams2use==6),:)', Cst(find(config.cal.cams2use==10),:)',Cst(horizplane.idx,1:3)'],[cam(:).C]); |
---|
43 | [align.P, align.X] = align3d(in.Pe,in.Xe,align.simT); |
---|
44 | % save aligned data |
---|
45 | if 1 % SAVE_STEPHI | SAVE_PGUHA |
---|
46 | [align.Cst,align.Rot] = savecalpar(align.P,config); |
---|
47 | end |
---|
48 | % plot the 3D results from a better perspective by estimating the plane of the Cams 9,10,17,18 |
---|
49 | % let call this plane "horizontal". |
---|
50 | % this plot makes sense only for the BigBlueC |
---|
51 | horizplane.vec = pinv([align.Cst(horizplane.idx,1:2),ones(size(horizplane.idx))'])*align.Cst(horizplane.idx,3); |
---|
52 | horizplane.par = [-horizplane.vec(1),-horizplane.vec(2),1,-horizplane.vec(3)]; |
---|
53 | horizplane.n = horizplane.par(1:3)'; |
---|
54 | drawscene(align.X,align.Cst',align.Rot,61,'cloud','Graphical Output Validation: View from the top camera',config.cal.cams2use); |
---|
55 | % set the camera on top |
---|
56 | set(gca,'CameraTarget',mean(align.Cst(horizplane.idx,:))); |
---|
57 | set(gca,'CameraPosition',mean(align.Cst(horizplane.idx,:))+3*horizplane.n'); |
---|
58 | % set(gca,'CameraPosition',align.Cst(find(config.cal.cams2use==15),:)); % view from the perspective of the camera4 |
---|
59 | |
---|
60 | % drawscene(in.Xe,Cst',Rot,42,'cloud','Graphical Output Validation: View from side',config.cal.cams2use); |
---|
61 | % set(gca,'CameraTarget',mean(Cst(horizplane.idx,:))); |
---|
62 | % set(gca,'CameraPosition',mean(Cst(horizplane.idx,:)+Cst(horizplane(4),:)-Cst(horizplane(1),:))'); |
---|
63 | |
---|
64 | figure(61), |
---|
65 | % print -depsc graphevalaligned.eps |
---|
66 | eval(['print -depsc ', config.paths.data, 'graphevalaligned.eps']) |
---|
67 | |
---|
68 | return |
---|