00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef TCamera_H
00029 #define TCamera_H
00030
00031 #include <mrpt/math/CMatrixTemplateNumeric.h>
00032 #include <mrpt/math/CMatrixFixedNumeric.h>
00033 #include <mrpt/utils/CLoadableOptions.h>
00034 #include <mrpt/utils/CConfigFileBase.h>
00035 #include <mrpt/utils/CSerializable.h>
00036
00037 namespace mrpt
00038 {
00039 namespace utils
00040 {
00041 using namespace mrpt::math;
00042
00043 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE( TCamera, mrpt::utils::CSerializable )
00044
00045
00046
00047
00048
00049 class BASE_IMPEXP TCamera : public mrpt::utils::CSerializable
00050 {
00051 DEFINE_SERIALIZABLE( TCamera )
00052
00053 public:
00054 TCamera() : ncols(640), nrows(480), focalLengthMeters(0)
00055 {
00056 intrinsicParams.set_unsafe(0,0,507.808);
00057 intrinsicParams.set_unsafe(1,1,507.808);
00058 intrinsicParams.set_unsafe(0,2,356.2368);
00059 intrinsicParams.set_unsafe(1,2,252.9216);
00060 intrinsicParams.set_unsafe(2,2,1);
00061 for (size_t i=0;i<5;i++)
00062 dist[i] = 0;
00063 }
00064
00065
00066
00067
00068 uint32_t ncols,nrows;
00069 CMatrixDouble33 intrinsicParams;
00070 CArrayDouble<5> dist;
00071 double focalLengthMeters;
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 void saveToConfigFile( const std::string §ion, mrpt::utils::CConfigFileBase &cfg ) const;
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 void loadFromConfigFile(const std::string §ion, const mrpt::utils::CConfigFileBase &cfg );
00104
00105
00106
00107
00108 inline void setIntrinsicParamsFromValues ( double fx, double fy, double cx, double cy )
00109 {
00110 intrinsicParams.set_unsafe( 0, 0, fx );
00111 intrinsicParams.set_unsafe( 1, 1, fy );
00112 intrinsicParams.set_unsafe( 0, 2, cx );
00113 intrinsicParams.set_unsafe( 1, 2, cy );
00114 }
00115
00116
00117 inline void getDistortionParamsVector ( CMatrixDouble15 &distParVector ) const
00118 {
00119 for (size_t i=0;i<5;i++)
00120 distParVector.set_unsafe(0,i, dist[i]);
00121 }
00122
00123
00124 inline vector_double getDistortionParamsAsVector () const {
00125 mrpt::vector_double v(5);
00126 for (size_t i=0;i<5;i++)
00127 v[i] = dist[i];
00128 return v;
00129 }
00130
00131
00132 void setDistortionParamsVector( const CMatrixDouble15 &distParVector )
00133 {
00134 for (size_t i=0;i<5;i++)
00135 dist[i] = distParVector.get_unsafe(0,i);
00136 }
00137
00138
00139 template <class VECTORLIKE>
00140 void setDistortionParamsVector( const VECTORLIKE &distParVector )
00141 {
00142 ASSERT_(distParVector.size()==4 || distParVector.size()==5)
00143 dist[4] = 0;
00144 for (size_t i=0;i<distParVector.size();i++)
00145 dist[i] = distParVector[i];
00146 }
00147
00148
00149
00150 inline void setDistortionParamsFromValues( double k1, double k2, double p1, double p2, double p3 = 0 )
00151 {
00152 dist[0] = k1;
00153 dist[1] = k2;
00154 dist[2] = p1;
00155 dist[3] = p2;
00156 dist[4] = p3;
00157 }
00158
00159
00160
00161 inline double cx() const { return intrinsicParams.get_unsafe(0,2); }
00162
00163
00164 inline double cy() const { return intrinsicParams.get_unsafe(1,2); }
00165
00166
00167 inline double fx() const { return intrinsicParams.get_unsafe(0,0); }
00168
00169
00170 inline double fy() const { return intrinsicParams.get_unsafe(1,1); }
00171
00172
00173
00174 inline double k1() const { return dist[0]; }
00175
00176
00177 inline double k2() const { return dist[1]; }
00178
00179
00180 inline double p1() const { return dist[2]; }
00181
00182
00183 inline double p2() const { return dist[3]; }
00184
00185
00186 inline double p3() const { return dist[4]; }
00187
00188 };
00189
00190 }
00191 }
00192 #endif