Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Camera.cpp
1 /*
2 This file is part of the BIAS library (Basic ImageAlgorithmS).
3 
4 Copyright (C) 2003-2009 (see file CONTACT for details)
5  Multimediale Systeme der Informationsverarbeitung
6  Institut fuer Informatik
7  Christian-Albrechts-Universitaet Kiel
8 
9 
10 BIAS is free software; you can redistribute it and/or modify
11 it under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14 
15 BIAS is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU Lesser General Public License for more details.
19 
20 You should have received a copy of the GNU Lesser General Public License
21 along with BIAS; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24 
25 #include <Base/Common/BIASpragma.hh>
26 
27 #define _CRT_SECURE_NO_DEPRECATE
28 #include <stdio.h>
29 
30 #include <Base/Image/Image.hh>
31 #include "Camera.hh"
32 #define MAXHEADERLINES 1024
33 
34 using namespace BIAS;
35 using namespace std;
36 
37 template <class StorageType>
39  TimeSec_ = 0;
40  TimeUSec_ = 0;
41  Orientation_[0] = 0.0;
42  Orientation_[1] = 0.0;
43  Orientation_[2] = 0.0;
44  _f=0.0;
45  _C.Set(0.0, 0.0, 0.0);
46  _K.SetZero();
47  P_.SetZero();
48  _R.SetIdentity();
49  _Point.Set(0.0,0.0,0.0);
50  // set all valid flags to false
51  TimeValid_ = false;
52  ASCIIValid_ = false;
53  OrientationValid_ = false;
54  PValid_ = false;
55  KValid_ = false;
56  RValid_ = false;
57  CValid_ = false;
58  PointValid_ = false;
59  fValid_ = false;
60  ProjValid_ = false;
61 //#ifdef BIAS_DAIMLERCHRYSLER
62  ptuValid_ = false;
63  inertialValid_ = false;
64  gpsValid_ = false;
65 //#endif
66 
67 }
68 
69 template <class StorageType>
71 {
72  Init_();
73 }
74 
75 template <class StorageType>
77 {}
78 
79 template <class StorageType>
81  : Image<StorageType>(img)
82 {
83  Init_();
84 }
85 
86 template <class StorageType>
88 {
89  if (ASCIIValid_) os << "ASCII : "<<ASCIIString_<<endl;
90  if (IsTimeValid()) os << "Timestamp : "<<TimeSec_<<":"<<TimeUSec_<<endl;
91  if (IsOrientationValid())
92  os << "Orientation : "<<Orientation_[0]<<" "<<Orientation_[1]<<" "
93  <<Orientation_[2]<<endl;
94  if (IsPValid()) os << "P-Matrix: " << endl << P_;
95 
96  bool isPDecomposable = IsPValid() && (P_.NormFrobenius() > 1E-50);
97 
98  // axis/angle representation of R-Matrix
99  bool hasRMatrix = false;
101  ROTATION_MATRIX_TYPE RAngle=0;
103 
104  if (IsRValid()) {
105  os << "R-Matrix: " << endl << _R;
106  _R.GetRotationAxisAngle(RAxis, RAngle);
107  _R.GetQuaternion(Q);
108  hasRMatrix = true;
109  } else {
110  if (isPDecomposable) {
111  os << "R-Matrix is empty - decomposed from P: " << endl << P_.GetR();
112  RMatrix(P_.GetR()).GetRotationAxisAngle(RAxis, RAngle);
113  RMatrix(P_.GetR()).GetQuaternion(Q);
114  hasRMatrix = true;
115  }
116  }
117  if (hasRMatrix) {
118  RAngle = (RAngle / M_PI) * 180.0; // convert angle to degrees
119  os << "[Axis, Angle] = [("
120  << RAxis[0] << ", "
121  << RAxis[1] << ", "
122  << RAxis[2] << "), "
123  << RAngle << " deg]" << endl;
124  os << "Quaternion: ["<<Q[0]<< ", "
125  << Q[1] << ", "
126  << Q[2] << ", "
127  << Q[3] << "]\n";
128  }
129  if (IsKValid()) {
130  os << "K-Matrix: " << endl << _K;
131  } else {
132  if (isPDecomposable)
133  os << "K-Matrix is empty - decomposed from P: " << endl << P_.GetK();
134  }
135  if (IsCValid()) {
136  os << "C-Vector: " << _C << endl;
137  } else {
138  if (isPDecomposable)
139  os << "C-Vector is empty - decomposed from P: " << P_.GetC() << endl;
140  }
141  if (IsPointValid()) os << "HomgPoint2D: " << _Point << endl;
142  if (IsfValid()) os << "Focal length: "<< _f << endl;
143  if (IsProjValid()) os<<"Projection: "<<Proj_<<endl;
144  os<<"RefUUID: "<<RefUUID_<<endl;
145 //#ifdef BIAS_DAIMLERCHRYSLER
146  if (IsptuValid()) os << ptu << endl;
147  if (IsinertialValid()) os << inertial << endl;
148  if (IsgpsValid()) os << gps << endl;
149 //#endif
150 }
151 
152 
153 template <class StorageType>
154 int Camera<StorageType>::ParseMetaData(bool bUse2x64bitTS)
155 {
156  // reset all haveXXX fields to avoid mixing "old meta data" with current
157  Init_();
158  int res = 0;
159  setlocale(LC_ALL, "C");//enforce C locales
160  AppData ad;
161  //SetDebugLevel(GetDebugLevel() | D_CAMERA_METADATA);
162 
163  BIASDOUT(D_CAMERA_METADATA, "_MetaData has " << this->_MetaData.size()
164  << " entries");
165 
166  if (this->_MetaData.Find(AppData::MD_ASCII_DATA, "#[ASCII]", ad)>=0){
167  BIASDOUT(D_CAMERA_METADATA, "found ASCII String");
168  if (ad.tag==AppData::MD_USE_ASCII){
169  ASCIIString_ = ad.sdata;
170  }
171  else{
172  ASCIIString_="";
173  for(int i=0; i<ad.length; i++){
174  ASCIIString_+=ad.data[i];
175  }
176  }
177  ASCIIValid_=true;
178  }
179 
180  if (this->_MetaData.Find(AppData::MD_Projection, "#[Projection]", ad)>=0){
181  BIASDOUT(D_CAMERA_METADATA, "found Projection");
182  string flatproj;
183  if (ad.tag==AppData::MD_USE_ASCII) flatproj = ad.sdata;
184 
185  else {
186  char *tmp = new char[ad.length+1];
187  memcpy(tmp, ad.data, ad.length);
188  tmp[ad.length] = 0;
189  flatproj = tmp;
190  //flatproj = flatproj.substr(0,ad.length);
191  delete[] tmp;
192  //cout << flatproj;
193  }
194 #ifdef BIAS_HAVE_XML2
195  int res = Proj_.XMLReadFromString(flatproj);
196  if (res<0)
197  BIASERR("Failed to parse string with length: "<<ad.length<<" string: "
198  <<flatproj);
199  ProjValid_=true;
200  //Proj_.GetParameters()->ValidatePose();
201  if(!Proj_.GetParameters()->PoseValid()) {
202  BIASERR("returning invalid pose!");
203  res = -1;
204  }
205 #endif //BIAS_HAVE_XML2
206  }
207 
208  if (this->_MetaData.Find(AppData::MD_PMatrix, "#[PMatrix]", ad)>=0){
209  PMatrix P;
210  BIASDOUT(D_CAMERA_METADATA, "found PMatrix");
211  if (ad.tag==AppData::MD_USE_ASCII){
212  sscanf(ad.sdata.c_str(),
213  "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
214  &P[0][0], &P[0][1], &P[0][2], &P[0][3],
215  &P[1][0], &P[1][1], &P[1][2], &P[1][3],
216  &P[2][0], &P[2][1], &P[2][2], &P[2][3]);
217  } else {
218  memcpy(P.GetData(), ad.data, ad.length);
219  }
220  if (P.NormL2()>1e-9) {
221  P_ = P;
222  PValid_=true;
223 
224  // ----------------- copy "deprecated" pmatrix from old ---------------
225  // ------- images into new projection, if image has no projection ------
226  if (!ProjValid_) {
228  PPP.SetImageSize(this->GetWidth(), this->GetHeight());
229  PPP.SetP(P);
230  Proj_ = Projection(PPP);
231  ProjValid_=true;
232  }
233  } else {
234  BIASWARN("ignored zero PMatrix in meta data.");
235  }
236  }
237 
238  if (this->_MetaData.Find(AppData::MD_TimeStamp, "#[TimeStamp]", ad)>=0){
239  BIASDOUT(D_CAMERA_METADATA, "found TimeStamp");
240  if (bUse2x64bitTS) {
241  if (ad.tag==AppData::MD_USE_ASCII){
242  sscanf(ad.sdata.c_str(), "%llu %llu " , &TimeSec_, &TimeUSec_);
243  } else {
244  //TimeSec_ = ((long int*)ad.data)[0];
245  //TimeUSec_ = ((long int*)ad.data)[1];
246  TimeSec_ = ((unsigned long long int*)ad.data)[0];
247  TimeUSec_ = ((unsigned long long int*)ad.data)[1];
248  }
249  } else {
250  if (ad.tag==AppData::MD_USE_ASCII){
251  int tSec = 0, tUSec = 0;
252  sscanf(ad.sdata.c_str(), "%d %d " , &tSec, &tUSec);
253  TimeSec_ = (unsigned long long int) tSec;
254  TimeUSec_ = (unsigned long long int) tUSec;
255  } else {
256  TimeSec_ = (unsigned long long int) ((int*)ad.data)[0];
257  TimeUSec_ = (unsigned long long int) ((int*)ad.data)[1];
258  }
259  }
260  TimeValid_=true;
261  }
262  if (this->_MetaData.Find(AppData::MD_Orientation, "#[Orientation]", ad)>=0){
263  BIASDOUT(D_CAMERA_METADATA, "found Orientation");
264  if (ad.tag==AppData::MD_USE_ASCII){
265  sscanf(ad.sdata.c_str(), "%f %f %f" ,&Orientation_[0], &Orientation_[1],
266  &Orientation_[2]);
267  } else {
268  memcpy(&Orientation_, ad.data, ad.length);
269  }
270  OrientationValid_=true;
271  }
272  if (this->_MetaData.Find(AppData::MD_CVector, "#[CVector]", ad)>=0){
273  BIASDOUT(D_CAMERA_METADATA, "found CVector");
274  if (ad.tag==AppData::MD_USE_ASCII){
275  sscanf(ad.sdata.c_str(), "%lf %lf %lf ", &_C[0], &_C[1], &_C[2]);
276  } else {
277  memcpy(_C.GetData(), ad.data, ad.length);
278  }
279  CValid_=true;
280  }
281  if (this->_MetaData.Find(AppData::MD_RMatrix, "#[RMatrix]", ad)>=0){
282  BIASDOUT(D_CAMERA_METADATA, "found RMatrix");
283  if (ad.tag==AppData::MD_USE_ASCII){
284  sscanf(ad.sdata.c_str(), "%lf %lf %lf %lf %lf %lf %lf %lf %lf",
285  &_R[0][0], &_R[0][1], &_R[0][2],
286  &_R[1][0], &_R[1][1], &_R[1][2],
287  &_R[2][0], &_R[2][1], &_R[2][2]);
288  } else {
289  memcpy(_R.GetData(), ad.data, ad.length);
290  }
291  RValid_=true;
292  }
293  if (this->_MetaData.Find(AppData::MD_KMatrix, "#[KMatrix]", ad)>=0){
294  BIASDOUT(D_CAMERA_METADATA, "found KMatrix");
295  if (ad.tag==AppData::MD_USE_ASCII){
296  sscanf(ad.sdata.c_str(), "%lf %lf %lf %lf %lf %lf %lf %lf %lf",
297  &_K[0][0], &_K[0][1], &_K[0][2],
298  &_K[1][0], &_K[1][1], &_K[1][2],
299  &_K[2][0], &_K[2][1], &_K[2][2]);
300  } else {
301  memcpy(_K.GetData(), ad.data, ad.length);
302  }
303  KValid_=true;
304  }
305  if (this->_MetaData.Find(AppData::MD_HomgPoint2D, "#[HomgPoint2D]", ad)>=0){
306  BIASDOUT(D_CAMERA_METADATA, "found HomgPoint2D");
307  if (ad.tag==AppData::MD_USE_ASCII){
308  sscanf(ad.sdata.c_str(), "[ %lf %lf %lf ]",
309  &_Point[0], &_Point[1], &_Point[2]);
310  } else {
311  memcpy(_Point.GetData(), ad.data, ad.length);
312  }
313  PointValid_=true;
314  }
315  if (this->_MetaData.Find(AppData::MD_Focal_Length, "#[Focal Length]", ad)>=0){
316  BIASDOUT(D_CAMERA_METADATA, "found Focal Length");
317  if (ad.tag==AppData::MD_USE_ASCII){
318  sscanf(ad.sdata.c_str(), "%lf", &_f);
319  } else {
320  memcpy(&_f, ad.data, ad.length);
321  }
322  fValid_=true;
323  }
324  if (this->_MetaData.Find(AppData::MD_RefUUID, "#[Reference UUID]", ad)>=0){
325  if (ad.tag==AppData::MD_USE_ASCII){
326  RefUUID_.SetFromString(ad.sdata);
327  } else {
328  string uids;
329  char * tmpstring = new char[ad.length+1];
330  tmpstring[ad.length]=0;
331  memcpy(tmpstring, ad.data, ad.length);
332  RefUUID_.SetFromString(tmpstring);
333  delete[] tmpstring;
334  }
335  BIASDOUT(D_CAMERA_METADATA, "found Reference UUID: "<<RefUUID_);
336 
337  }
338 //#ifdef BIAS_DAIMLERCHRYSLER
339  if (this->_MetaData.Find(AppData::MD_PTU_Data, "#[PTU Data]", ad)>=0){
340  BIASDOUT(D_CAMERA_METADATA, "found PTU_Data");
341  if (ad.tag==AppData::MD_USE_ASCII){
342  stringstream ss;
343  ss << ad.sdata;
344  ss >> ptu;
345  } else {
346  //memcpy(&ptu, ad.data, ad.length);
347  ptu.ReadBinary(ad.data);
348  }
349  BIASDOUT(D_CAMERA_METADATA, "cam.ptu: "<<ptu<<endl);
350  ptuValid_=true;
351  }
352  if (this->_MetaData.Find(AppData::MD_Inertial_Sensor,"#[Inertial Sensor]",
353  ad)>=0){
354  BIASDOUT(D_CAMERA_METADATA, "found Inertial_Sensor");
355  if (ad.tag==AppData::MD_USE_ASCII){
356  stringstream ss;
357  ss << ad.sdata;
358  ss >> inertial;
359  } else {
360  //memcpy(&inertial, ad.data, ad.length);
361  inertial.ReadBinary(ad.data);
362  }
363  BIASDOUT(D_CAMERA_METADATA, "cam.inertiual: "<<inertial<<endl);
364  inertialValid_=true;
365  }
366  if (this->_MetaData.Find(AppData::MD_Inertial_Sensor,"#[GPS Data]", ad)>=0){
367  BIASDOUT(D_CAMERA_METADATA, "found GPS Data");
368  if (ad.tag==AppData::MD_USE_ASCII){
369  stringstream ss;
370  ss << ad.sdata;
371  ss >> gps;
372  } else {
373  gps.ReadBinary(ad.data);
374  }
375  BIASDOUT(D_CAMERA_METADATA, "cam.gps: "<<gps<<endl);
376  gpsValid_=true;
377  }
378 //#endif // BIAS_DAIMLERCHRYSLER
379 
380  /*
381  if (this->_MetaData.Find(AppData::MD_, "#[]", ad)>=0){
382  BIASDOUT(D_CAMERA_METADATA, "found ");
383  if (ad.tag==AppData::MD_USE_ASCII){
384  sscanf(ad.sdata.c_str(), );
385  } else {
386  BEXCEPTION("Not implemented yet!");
387  }
388  }
389  */
390  return res;
391 }
392 
393 template <class StorageType>
395 {
396  this->operator=(src);
397 }
398 
399 
400 
401 template <class StorageType>
404 {
406  TimeSec_=src.TimeSec_;
407  TimeUSec_=src.TimeUSec_;
408  Orientation_[0] = src.Orientation_[0];
409  Orientation_[1] = src.Orientation_[1];
410  Orientation_[2] = src.Orientation_[2];
411  P_=src.P_;
412  _K=src._K;
413  _R=src._R; // rotation of camera
414  _C=src._C; // camera center in world coo
415  _Point=src._Point;
416  _f=src._f;
417  Proj_=src.Proj_;
418  RefUUID_=src.RefUUID_;
419 //#ifdef BIAS_DAIMLERCHRYSLER
420  ptu=src.ptu;
421  inertial=src.inertial;
422  gps=src.gps;
423 //#endif
424 
425  // copy all the valid flags
426  TimeValid_ = src.TimeValid_ ;
427  OrientationValid_ = src.OrientationValid_;
428  PValid_ = src.PValid_ ;
429  KValid_ = src.KValid_ ;
430  RValid_ = src.RValid_;
431  CValid_ = src.CValid_;
432  PointValid_ = src.PointValid_;
433  fValid_ = src.fValid_;
434  ProjValid_=src.ProjValid_;
435 
436 //#ifdef BIAS_DAIMLERCHRYSLER
437  ptuValid_ = src.ptuValid_;
438  inertialValid_ = src.inertialValid_;
439  gpsValid_ = src.gpsValid_;
440 //#endif
441  return (*this);
442 }
443 
444 
445 template <class StorageType>
447 {
448  setlocale(LC_ALL, "C");//enforce C locales
449  //AddDebugLevel(D_CAMERA_METADATA);
450  char tmpline[2048];
451  ostringstream os;
452  BIASDOUT(D_CAMERA_METADATA,"UpdateMetaData()");
453  if(ASCIIValid_)
454  {
455  this->_MetaData.Add(AppData::MD_ASCII_DATA, ASCIIString_.size(),
456  (char*)ASCIIString_.c_str());
457  this->_MetaData.Add("#[ASCII]", ASCIIString_);
458  BIASDOUT(D_CAMERA_METADATA,"Added ASCII String");
459  }
460  if (PValid_) {
461  this->_MetaData.Add(AppData::MD_PMatrix, 12*sizeof(double),
462  (char*)P_.GetData());
463  sprintf(tmpline, "%.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g",
464  P_[0][0], P_[0][1], P_[0][2], P_[0][3],
465  P_[1][0], P_[1][1], P_[1][2], P_[1][3],
466  P_[2][0], P_[2][1], P_[2][2], P_[2][3]);
467  this->_MetaData.Add("#[PMatrix]", tmpline);
468  BIASDOUT(D_CAMERA_METADATA,"Added PMatrix");
469  }
470  if (TimeValid_) {
471  //long int time[2];
472  unsigned long long int time[2];
473  time[0] = TimeSec_;
474  time[1] = TimeUSec_;
475  this->_MetaData.Add(AppData::MD_TimeStamp,sizeof(time),(char*)time);
476  sprintf(tmpline, "%llu %llu" , TimeSec_, TimeUSec_);
477  this->_MetaData.Add("#[TimeStamp]", tmpline);
478  BIASDOUT(D_CAMERA_METADATA,"Added Time");
479  }
480  if (OrientationValid_) {
481  this->_MetaData.Add(AppData::MD_Orientation, sizeof(Orientation_),
482  (char*)Orientation_);
483  sprintf(tmpline, "%.30f %.30f %.30f" , Orientation_[0], Orientation_[1],
484  Orientation_[2]);
485  this->_MetaData.Add("#[Orientation]", tmpline);
486  BIASDOUT(D_CAMERA_METADATA,"Added Orientation");
487  }
488  if (CValid_){
489  this->_MetaData.Add(AppData::MD_CVector, 3*sizeof(double),
490  (char*)_C.GetData());
491  sprintf(tmpline, "%.30g %.30g %.30g ", _C[0], _C[1], _C[2]);
492  this->_MetaData.Add("#[CVector]", tmpline);
493  BIASDOUT(D_CAMERA_METADATA,"Added CVector");
494  }
495  if (RValid_) {
496  this->_MetaData.Add(AppData::MD_RMatrix, 9*sizeof(double),
497  (char*)_R.GetData());
498  sprintf(tmpline, "%.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g",
499  _R[0][0], _R[0][1], _R[0][2],
500  _R[1][0], _R[1][1], _R[1][2],
501  _R[2][0], _R[2][1], _R[2][2]);
502  this->_MetaData.Add("#[RMatrix]", tmpline);
503  BIASDOUT(D_CAMERA_METADATA,"Added RMatrix");
504  }
505  if (KValid_) {
506  this->_MetaData.Add(AppData::MD_KMatrix, 9*sizeof(double),
507  (char*)_K.GetData());
508  sprintf(tmpline, "%.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g %.30g",
509  _K[0][0], _K[0][1], _K[0][2],
510  _K[1][0], _K[1][1], _K[1][2],
511  _K[2][0], _K[2][1], _K[2][2]);
512  this->_MetaData.Add("#[KMatrix]", tmpline);
513  BIASDOUT(D_CAMERA_METADATA,"Added KMatrix");
514  }
515  if (fValid_){
516  this->_MetaData.Add(AppData::MD_Focal_Length, sizeof(double),
517  (char*)&_f);
518  sprintf(tmpline, "%.30g", _f);
519  this->_MetaData.Add("#[Focal Length]", tmpline);
520  BIASDOUT(D_CAMERA_METADATA,"Added Focal Length");
521  }
522  if (ProjValid_) {
523  string flatproj ;
524 #ifdef BIAS_HAVE_XML2
525  Proj_.XMLWriteToString(flatproj);
526 #endif //BIAS_HAVE_XML2
527  for (unsigned int i=0;i<flatproj.length(); i++) {
528  if (flatproj[i] == 10) flatproj[i] = 32;
529  if (flatproj[i] == 13) flatproj[i] = 32;
530  }
531  this->_MetaData.Add(AppData::MD_Projection, flatproj.length(),
532  (char*)flatproj.c_str());
533 
534  this->_MetaData.Add("#[Projection]", flatproj.c_str());
535  BIASDOUT(D_CAMERA_METADATA,"Added Projection");
536 
537  } //Proj_
538 
539  if (RefUUID_.IsValid()) {
540  string uids=RefUUID_.GetString();
541  this->_MetaData.Add(AppData::MD_RefUUID,uids.length(),(char*)uids.c_str());
542  this->_MetaData.Add("#[Reference UUID]", uids);
543  BIASDOUT(D_CAMERA_METADATA,"Added Reference UUID: "<<uids);
544 
545  }
546 
547 //#ifdef BIAS_DAIMLERCHRYSLER
548  //this->AddDebugLevel(D_CAMERA_METADATA);
549  char *tmpdata = NULL;
550  int length=0;
551  if (ptuValid_) {
552  length=ptu.GetBinaryLength();
553  tmpdata=new char[length+1];
554  BIASCDOUT(D_CAMERA_METADATA, "allocated memory: "<<(void *)tmpdata<<endl);
555  ptu.WriteBinary(tmpdata);
556  BIASCDOUT(D_CAMERA_METADATA, *(double*)tmpdata<<endl);
557  this->_MetaData.Add(AppData::MD_PTU_Data, length, tmpdata);
558  BIASDOUT(D_CAMERA_METADATA,"Added PTU Data");
559  os.str("");
560  os << ptu;
561  BIASDOUT(D_CAMERA_METADATA,"ptu "<<os.str());
562  this->_MetaData.Add("#[PTU Data]", os.str());
563  BIASDOUT(D_CAMERA_METADATA,"Added string PTU Data");
564  BIASCDOUT(D_CAMERA_METADATA, "attempting to free memory: "
565  <<(void *)tmpdata<<endl);
566  delete[] tmpdata; tmpdata=NULL;
567  }
568  if (inertialValid_){
569  length=inertial.GetBinaryLength();
570  tmpdata=new char[length+1];
571  inertial.WriteBinary(tmpdata);
572  this->_MetaData.Add(AppData::MD_Inertial_Sensor, length, tmpdata);
573  os.str("");
574  os << inertial;
575  this->_MetaData.Add("#[Inertial Sensor]", os.str());
576  BIASDOUT(D_CAMERA_METADATA,"Added Inertial Sensor");
577  delete[] tmpdata; tmpdata=NULL;
578  }
579  if (gpsValid_){
580  length=gps.GetBinaryLength();
581  tmpdata=new char[length+1];
582  gps.WriteBinary(tmpdata);
583  this->_MetaData.Add(AppData::MD_GPS_Data, length, tmpdata);
584  os.str("");
585  os << gps;
586  this->_MetaData.Add("#[GPS Data]", os.str());
587  BIASDOUT(D_CAMERA_METADATA,"Added GPS Data");
588  delete[] tmpdata; tmpdata=NULL;
589  }
590 //#endif // BIAS_DAIMLERCHRYSLER
591 
592  BIASDOUT(D_CAMERA_METADATA,"Finished adding meta data");
593  return 0;
594 }
595 
596 
597 // template instantiation
598 
599 #define INST(type)\
600 template class BIASImage_EXPORT Camera<type>
601 //template ostream& operator<<<type>(ostream & , Image<type> const & );
602 //template istream& operator>><type>(istream& , Image<type>& );
603 
604 namespace BIAS{
605 INST(unsigned char);
606 INST(float);
607 
608 #ifdef BUILD_IMAGE_INT
609 INST(int);
610 #endif
611 #ifdef BUILD_IMAGE_CHAR
612 INST(char);
613 #endif
614 #ifdef BUILD_IMAGE_SHORT
615 INST(short);
616 #endif
617 #ifdef BUILD_IMAGE_USHORT
618 INST(unsigned short);
619 #endif
620 #ifdef BUILD_IMAGE_UINT
621 INST(unsigned int);
622 #endif
623 #ifdef BUILD_IMAGE_DOUBLE
624 INST(double);
625 #endif
626 }
bool PointValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:282
bool TimeValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:248
bool PValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:258
DC_GPS gps
Definition: Camera.hh:303
extends the Image by MetaData support (e.g.
Definition: Camera.hh:74
KMatrix _K
camera calibration with internals
Definition: Camera.hh:265
bool RValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:272
camera parameters which define the mapping between rays in the camera coordinate system and pixels in...
virtual void SetImageSize(const unsigned int w, const unsigned int h)
Set image dimensions (in pixels).
bool gpsValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:305
Vector3< double > _C
camera center in wcs
Definition: Camera.hh:275
HomgPoint2D _Point
a point, it is up to you what you put in
Definition: Camera.hh:280
int length
number of bytes used by the data block
Definition: MetaData.hh:96
virtual void SetP(const PMatrix &P)
set from P
DC_ptu ptu
Definition: Camera.hh:295
double NormL2() const
Return the L2 norm: a^2 + b^2 + c^2 + ...
Definition: Matrix.hh:878
std::string sdata
the data as given in ascii meta data
Definition: MetaData.hh:102
Camera< StorageType > & operator=(const Camera< StorageType > &src)
Definition: Camera.cpp:403
3D rotation matrix
Definition: RMatrix.hh:49
DC_inertial inertial
Definition: Camera.hh:299
char * data
pointer to block of data
Definition: MetaData.hh:98
This class hides the underlying projection model, like projection matrix, spherical camera...
Definition: Projection.hh:70
double _f
focal length in m
Definition: Camera.hh:285
unsigned long long int TimeUSec_
time stamp in microseconds
Definition: Camera.hh:246
PMatrix P_
pmatrix, maybe non-metric
Definition: Camera.hh:256
INST(unsigned char)
bool fValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:287
virtual ~Camera()
Definition: Camera.cpp:76
The image template class for specific storage types.
Definition: Image.hh:78
T * GetData()
get the pointer to the data array of the matrix (for faster direct memeory access) ...
Definition: Matrix.hh:185
BIAS::UUID RefUUID_
Definition: Camera.hh:291
bool inertialValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:301
enum TAppData tag
The tag defines the type of data, e.g.
Definition: MetaData.hh:94
class Vector3 contains a Vector of fixed dim.
Definition: Matrix.hh:53
Image< StorageType > & operator=(const ImageBase &Source)
copies ImageBase to an desired Image&lt;&gt;, be careful with this, because u can do something like: Image&lt;...
float Orientation_[3]
orientation data from sensor ?
Definition: Camera.hh:251
int UpdateMetaData()
copy P_ and co.
Definition: Camera.cpp:446
void PrintAppData(std::ostream &os)
see whats in the camera, for debug
Definition: Camera.cpp:87
Projection Proj_
Definition: Camera.hh:261
unsigned long long int TimeSec_
time stamp in seconds
Definition: Camera.hh:243
bool KValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:267
bool ptuValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:297
bool ProjValid_
Definition: Camera.hh:262
RMatrix _R
camera orientation
Definition: Camera.hh:270
describes a projective 3D -&gt; 2D mapping in homogenous coordinates
Definition: PMatrix.hh:88
void Init_()
called by constructors to init all fields
Definition: Camera.cpp:38
bool CValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:277
This is the base class for images in BIAS.
Definition: ImageBase.hh:102
int ParseMetaData(bool bUse2x64bitTS=true)
After ImageIO::Load() operated on AppData_, this method fills P_, Timestamp, DC_*, ...
Definition: Camera.cpp:154
bool OrientationValid_
is correspondig field of data valid or unknown ?
Definition: Camera.hh:253
this is a chunk of metadata, also see MetaData
Definition: MetaData.hh:49