#ifndef TRIANGULATION_H #define TRIANGULATION_H #include #include #include #include #include #include #include #include #define NOMINMAX ///< needed for OpenCV functionning #ifdef _WIN32 #include // required by 1394camapi.h #include // required by 1394camapi.h #endif #include #include #include #include #include #include #include #include //#include #include "transformations.h" #include #include #include #include #undef max class Triangulator { public: Triangulator(); Triangulator(int method); //! Possible triangulation methods : enum { LINEAR_LS, LINEAR_EIGEN, ITERATIVE_LS, ITERATIVE_EIGEN, DIRECT_AFFINE}; void setTriangulationMethod(int method); double getReprojectionError(); void triangulate(const cv::Mat & W, const cv::Mat & P, pcl::PointCloud & pointCloud); /*void triangulatePoints(const std::vector& pt_set1, const std::vector& pt_set2, const cv::Mat&Kinv, const cv::Matx34d& P, const cv::Matx34d& P1, std::vector& pointcloud);*/ pcl::PointCloud triangulatePoints_LinearLS(const cv::Mat & Wf, // Full measurement matrix 2i x p const cv::Mat & Pm // Camera matrices 3i x 4 ); // 4 x p void triangulateAffine(const cv::Mat & W, const cv::Mat & P, pcl::PointCloud & pointCloud); private: int triangulationMethod; double reprojectionError; //cv::Mat_ linearLS( cv::Point3d u, cv::Matx34d P, cv::Point3d u1, cv::Matx34d P1); //cv::Mat_ linearEigen( cv::Point3d u, cv::Matx34d P, cv::Point3d u1, cv::Matx34d P1); //cv::Mat_ iterativeLSandEigen( cv::Point3d u, cv::Matx34d P, cv::Point3d u1, cv::Matx34d P1); }; ///@} #endif