5 #pragma warning(disable:4503) 13 #include <Eigen/Dense> 14 #include "opencv2/core/core.hpp" 21 #if defined(__GNUC__) || defined(__GNUG__) 22 #define _force_inline_ __attribute__ (always_inline) 24 #define _force_inline_ 57 #define _USE_MATH_DEFINES 59 #define mtf_clock_get(time_instant) \ 60 std::chrono::steady_clock::time_point time_instant = std::chrono::steady_clock::now(); 61 #define mtf_clock_measure(start_time, end_time, elapsed_time) \ 62 elapsed_time = std::chrono::duration_cast<std::chrono::duration<double>>(end_time - start_time).count(); 65 #define mtf_clock_get(time_instant) \ 66 timespec time_instant;\ 67 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time_instant) 68 #define mtf_clock_measure(start_time, end_time, elapsed_time) \ 69 elapsed_time = ((double)(end_time.tv_sec - start_time.tv_sec) +\ 70 1e-9*(double)(end_time.tv_nsec - start_time.tv_nsec)) 73 #ifdef ENABLE_PROFILING 74 #define init_profiling() \ 75 timespec _event_start_time, _event_end_time;\ 76 double _event_interval; \ 77 std::vector<double> proc_times;\ 78 std::vector<char*> proc_labels 79 #define inherit_profiling(BASE_CLASS) \ 80 using BASE_CLASS ::_event_start_time;\ 81 using BASE_CLASS ::_event_end_time;\ 82 using BASE_CLASS ::_event_interval;\ 83 using BASE_CLASS :: proc_times;\ 84 using BASE_CLASS :: proc_labels 85 #define write_frame_id(frame_id) \ 86 utils::printScalarToFile(frame_id, "\n\nframe_id", time_fname, "%6d", "a"); 87 #define init_timer() \ 90 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &_event_start_time) 91 #define start_timer() \ 92 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &_event_start_time) 94 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &_event_end_time);\ 95 _event_interval = (double)(_event_end_time.tv_sec - _event_start_time.tv_sec) + 1e-9*(double)(_event_end_time.tv_nsec - _event_start_time.tv_nsec); 96 #define write_interval(time_fname, mode) \ 97 utils::printScalarToFile(_event_interval, "init_time", time_fname, "%15.9f", mode) 98 #define record_event(label) \ 99 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &_event_end_time);\ 100 proc_times.push_back((double)(_event_end_time.tv_sec - _event_start_time.tv_sec) + 1e-9*(double)(_event_end_time.tv_nsec - _event_start_time.tv_nsec));\ 101 proc_labels.push_back(label);\ 102 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &_event_start_time) 103 #define write_data(time_fname) \ 104 utils::writeTimesToFile(proc_times, proc_labels, time_fname, i) 106 #define init_profiling() 107 #define inherit_profiling(BASE_CLASS) 108 #define write_frame_id(frame_id) 110 #define start_timer() 112 #define write_interval(time_fname, mode) 113 #define record_event(label) 114 #define write_data(time_fname) 117 #define eig_set_zero(eig_mat, scalar_type) \ 118 memset(eig_mat.data(), 0, eig_mat.size()*sizeof(scalar_type)) 120 #define func_not_implemeted(func_name) \ 121 throw mtf::utils::FunctonNotImplemented(cv::format("%s :: %s :: Not implemented Yet", name.c_str(), #func_name)) 123 #define remap_data(var_name, var_type, data_loc, data_size) new (&var_name) Map< var_type >(data_loc, data_size) 128 #define spi_pt_check_mc(mask, id, ch_id) \ 129 if(mask && !mask[id]){ ch_id += n_channels; continue;} 130 #define spi_pt_check(mask, id) \ 131 if(mask && !mask[id]){ continue;} 132 #define spi_check_mc(mask, id, ch_id) \ 133 if(!mask[id]){ ch_id += n_channels; continue;} 134 #define spi_check(mask, id) \ 135 if(!mask[id]){continue;} 137 #define spi_pt_check(mask, id) 138 #define spi_pt_check_mc(mask, id, ch_id) 139 #define spi_check_mc(mask, id, ch_id) 140 #define spi_check(mask, id) 143 #define corners_to_cv(cv_corners, eig_corners)\ 144 for(int corner_id = 0; corner_id < 4; ++corner_id){\ 145 cv_corners.at<double>(0, corner_id) = eig_corners(0, corner_id);\ 146 cv_corners.at<double>(1, corner_id) = eig_corners(1, corner_id);\ 148 #define corners_from_cv(eig_corners, cv_corners)\ 149 for(int corner_id = 0; corner_id < 4; ++corner_id){\ 150 eig_corners(0, corner_id) = cv_corners.at<double>(0, corner_id);\ 151 eig_corners(1, corner_id) = cv_corners.at<double>(1, corner_id);\ 153 #define corners_to_points(points, eig_corners)\ 154 for(int corner_id = 0; corner_id < 4; ++corner_id){\ 155 points[corner_id].x = curr_corners(0, corner_id);\ 156 points[corner_id].y = curr_corners(1, corner_id);\ 158 #define HETEROGENEOUS_INPUT -1 162 #define SRC_USB_CAM 'u' 163 #define SRC_PG_FW_CAM 'p' 164 #define SRC_FW_CAM 'f' 167 #define _MTF_BEGIN_NAMESPACE namespace mtf { 168 #define _MTF_END_NAMESPACE } 173 #if CV_MAJOR_VERSION < 3 174 #define cv_format(...) cv::format(__VA_ARGS__) 176 #define cv_format(...) cv::format(__VA_ARGS__).c_str() 178 #define CV_RGB( r, g, b ) cvScalar( (b), (g), (r), 0 ) 183 using namespace Eigen;
187 typedef unsigned char uchar;
188 typedef unsigned int uint;
190 typedef float EigPixT;
191 typedef float CVPixT;
193 typedef Matrix<double, 3, 4> Matrix34d;
194 typedef Matrix<double, 2, 4> Matrix24d;
195 typedef Matrix<double, 2, 5> Matrix25d;
196 typedef Matrix<double, 5, 5> Matrix5d;
197 typedef Matrix<double, 10, 1> Vector10d;
198 typedef Matrix<double, 8, 1> Vector8d;
199 typedef Matrix<double, 5, 1> Vector5d;
200 typedef Matrix<double, 6, 1> Vector6d;
202 typedef Matrix<double, 8, Dynamic> Matrix8Xd;
203 typedef Matrix<double, 16, Dynamic> Matrix16Xd;
205 typedef Matrix<double, Dynamic, 9> MatrixX9d;
206 typedef Matrix<double, 9, Dynamic> Matrix9Xd;
208 typedef Matrix<double, 8, 8> Matrix8d;
209 typedef Matrix<double, 7, 7> Matrix7d;
210 typedef Matrix<double, 6, 6> Matrix6d;
211 typedef Matrix<double, 2, 8> Matrix28d;
212 typedef Matrix<double, 2, 6> Matrix26d;
213 typedef Matrix<double, 9, 8> Matrix98d;
214 typedef Matrix<double, 8, 9> Matrix89d;
215 typedef Matrix<double, 8, 6> Matrix86d;
216 typedef Matrix<double, 8, 5> Matrix85d;
217 typedef Matrix<double, 8, 4> Matrix84d;
218 typedef Matrix<double, 8, 3> Matrix83d;
219 typedef Matrix<double, 7, 2> Matrix72d;
220 typedef Matrix<double, 6, 6> Matrix66d;
221 typedef Matrix<double, 5, 5> Matrix55d;
222 typedef Matrix<double, 4, 4> Matrix44d;
223 typedef Matrix<double, 4, 3> Matrix43d;
224 typedef Matrix<double, 3, 9> Matrix39d;
225 typedef Matrix<double, 2, 3> Matrix23d;
227 typedef Matrix<bool, Dynamic, 1> VectorXb;
228 typedef Array<bool, Dynamic, 1> ArryaXb;
229 typedef Matrix<double, 9, 1> Vector9d;
230 typedef Matrix<unsigned char, Dynamic, 1> VectorXc;
232 typedef Map<VectorXd> VectorXdM;
233 typedef Map<VectorXb> VectorXbM;
234 typedef Map<RowVectorXd> RowVectorXdM;
235 typedef Map<MatrixXd> MatrixXdM;
236 typedef Map<MatrixX2d> MatrixX2dM;
237 typedef Map<Matrix2d> Matrix2dM;
239 typedef Matrix<double, Dynamic, Dynamic, RowMajor> MatrixXdr;
240 typedef Matrix<double, Dynamic, 1, RowMajor> VectorXdr;
241 typedef Matrix<int, Dynamic, 1, RowMajor> VectorXir;
242 typedef Matrix<EigPixT, Dynamic, Dynamic, RowMajor> EigImgMat;
244 typedef Map<EigImgMat> EigImgT;
245 typedef Map<MatrixXdr> MatrixXdMr;
247 typedef VectorXd PixValT;
248 typedef MatrixX2d PixGradT;
249 typedef Matrix4Xd PixHessT;
251 typedef Matrix3d ProjWarpT;
252 typedef Matrix2Xd PtsT;
253 typedef Matrix2Xf PtsfT;
254 typedef Matrix24d CornersT;
255 typedef Matrix3Xd HomPtsT;
256 typedef Matrix34d HomCornersT;
257 typedef Matrix8Xd GradPtsT;
258 typedef Matrix16Xd HessPtsT;
260 typedef cv::Rect_<double> Rectd;
262 typedef std::vector<double> vectord;
263 typedef std::vector<float> vectorf;
264 typedef std::vector<int> vectori;
265 typedef std::vector<std::string> vector_s;
266 typedef std::vector<vectord> vectorvd;
267 typedef std::vector<vectori> vectorvi;