Skip to content
Snippets Groups Projects
Commit a515e582 authored by César DEBEUNNE's avatar César DEBEUNNE :bicyclist:
Browse files

Switch to double in preprocess()

Use pinhole_tools.h instead of sensorCamera
parent c5c3d3e6
No related branches found
No related tags found
2 merge requests!36After cmake and const refactor,!28Resolve "Building a new visual odometry system"
...@@ -60,8 +60,8 @@ class WKeyPoint ...@@ -60,8 +60,8 @@ class WKeyPoint
cv::KeyPoint getCvKeyPoint() const {return cv_kp_;} cv::KeyPoint getCvKeyPoint() const {return cv_kp_;}
void setCvKeyPoint(cv::KeyPoint _cv_kp) {cv_kp_ = _cv_kp;} void setCvKeyPoint(cv::KeyPoint _cv_kp) {cv_kp_ = _cv_kp;}
Eigen::Vector2f getEigenKeyPoint() const {return Eigen::Vector2f(cv_kp_.pt.x, cv_kp_.pt.y);} Eigen::Vector2d getEigenKeyPoint() const {return Eigen::Vector2d(cv_kp_.pt.x, cv_kp_.pt.y);}
cv::Point2f getCvPoint() const {return cv_kp_.pt;} cv::Point2d getCvPoint() const {return cv_kp_.pt;}
cv::Mat getDescriptor() const {return desc_;} cv::Mat getDescriptor() const {return desc_;}
void setDescriptor(cv::Mat _desc) {desc_ = _desc;} void setDescriptor(cv::Mat _desc) {desc_ = _desc;}
......
...@@ -115,13 +115,12 @@ class SensorCamera : public SensorBase ...@@ -115,13 +115,12 @@ class SensorCamera : public SensorBase
Eigen::VectorXd getDistortionVector() { return distortion_; } Eigen::VectorXd getDistortionVector() { return distortion_; }
Eigen::VectorXd getCorrectionVector() { return correction_; } Eigen::VectorXd getCorrectionVector() { return correction_; }
Eigen::Matrix3d getIntrinsicMatrix() { return K_; } Eigen::Matrix3d getIntrinsicMatrix() { return K_; }
Eigen::Vector4d getPinholeModel() { return pinhole_model_raw_; }
bool isUsingRawImages() { return using_raw_; } bool isUsingRawImages() { return using_raw_; }
bool useRawImages(); bool useRawImages();
bool useRectifiedImages(); bool useRectifiedImages();
Eigen::Vector3f computeRay(Eigen::Vector2f _pix);
int getImgWidth(){return img_width_;} int getImgWidth(){return img_width_;}
int getImgHeight(){return img_height_;} int getImgHeight(){return img_height_;}
void setImgWidth(int _w){img_width_ = _w;} void setImgWidth(int _w){img_width_ = _w;}
......
...@@ -646,27 +646,27 @@ bool ProcessorVisualOdometry::filterWithEssential(const KeyPointsMap _mwkps_prev ...@@ -646,27 +646,27 @@ bool ProcessorVisualOdometry::filterWithEssential(const KeyPointsMap _mwkps_prev
{ {
ParamsProcessorVisualOdometry::RansacParams prms = params_visual_odometry_->ransac_params_; ParamsProcessorVisualOdometry::RansacParams prms = params_visual_odometry_->ransac_params_;
// We need to build lists of pt2f for openCV function // We need to build lists of pt2d for openCV function
std::vector<cv::Point2f> p2f_prev, p2f_curr; std::vector<cv::Point2d> p2d_prev, p2d_curr;
std::vector<size_t> all_indices; std::vector<size_t> all_indices;
for (auto & track : _tracks_prev_curr){ for (auto & track : _tracks_prev_curr){
all_indices.push_back(track.first); all_indices.push_back(track.first);
Eigen::Vector3f ray_prev = sen_cam_->computeRay(_mwkps_prev.at(track.first).getEigenKeyPoint()); Eigen::Vector2d ray_prev = pinhole::depixellizePoint(sen_cam_->getPinholeModel(), _mwkps_prev.at(track.first).getEigenKeyPoint());
Eigen::Vector3f ray_curr = sen_cam_->computeRay(_mwkps_curr.at(track.second).getEigenKeyPoint()); Eigen::Vector2d ray_curr = pinhole::depixellizePoint(sen_cam_->getPinholeModel(), _mwkps_curr.at(track.second).getEigenKeyPoint());
p2f_prev.push_back(cv::Point2f(ray_prev.x() / ray_prev.z(), ray_prev.y() / ray_prev.z())); p2d_prev.push_back(cv::Point2d(ray_prev.x(), ray_prev.y()));
p2f_curr.push_back(cv::Point2f(ray_curr.x() / ray_curr.z(), ray_curr.y() / ray_curr.z())); p2d_curr.push_back(cv::Point2d(ray_curr.x(), ray_curr.y()));
} }
// We need at least five tracks // We need at least five tracks
if (p2f_prev.size() < 5) return false; if (p2d_prev.size() < 5) return false;
cv::Mat cvMask; cv::Mat cvMask;
cv::Mat K = cv::Mat::eye(3,3,CV_32F); cv::Mat K = cv::Mat::eye(3,3,CV_32F);
float focal = (sen_cam_->getIntrinsicMatrix()(0,0) + double focal = (sen_cam_->getIntrinsicMatrix()(0,0) +
sen_cam_->getIntrinsicMatrix()(1,1)) / 2; sen_cam_->getIntrinsicMatrix()(1,1)) / 2;
_E = cv::findEssentialMat(p2f_prev, _E = cv::findEssentialMat(p2d_prev,
p2f_curr, p2d_curr,
Kcv_, Kcv_,
cv::RANSAC, cv::RANSAC,
prms.ransac_prob_, prms.ransac_prob_,
......
...@@ -71,13 +71,6 @@ Eigen::Matrix3d SensorCamera::setIntrinsicMatrix(Eigen::Vector4d _pinhole_model) ...@@ -71,13 +71,6 @@ Eigen::Matrix3d SensorCamera::setIntrinsicMatrix(Eigen::Vector4d _pinhole_model)
K.row(2) << 0, 0, 1; K.row(2) << 0, 0, 1;
return K; return K;
} }
Eigen::Vector3f SensorCamera::computeRay(Eigen::Vector2f _pix)
{
Eigen::Vector3f ray;
ray = K_.cast<float>().inverse() * Eigen::Vector3f(_pix.x(), _pix.y(), 1);
return ray;
}
} // namespace wolf } // namespace wolf
// Register in the FactorySensor // Register in the FactorySensor
......
...@@ -404,8 +404,8 @@ TEST(ProcessorVisualOdometry, filterWithEssential) ...@@ -404,8 +404,8 @@ TEST(ProcessorVisualOdometry, filterWithEssential)
ASSERT_EQ(tracks_prev_curr.size(), mwkps_curr.size()); ASSERT_EQ(tracks_prev_curr.size(), mwkps_curr.size());
// We had here an outlier: a keyPoint that doesn't move // We had here an outlier: a keyPoint that doesn't move
mwkps_prev.insert(std::pair<size_t, WKeyPoint>(8, WKeyPoint(cv::KeyPoint(cv::Point2f(120,140), 1)))); mwkps_prev.insert(std::pair<size_t, WKeyPoint>(8, WKeyPoint(cv::KeyPoint(cv::Point2d(120,140), 1))));
mwkps_curr.insert(std::pair<size_t, WKeyPoint>(8, WKeyPoint(cv::KeyPoint(cv::Point2f(120,140), 1)))); mwkps_curr.insert(std::pair<size_t, WKeyPoint>(8, WKeyPoint(cv::KeyPoint(cv::Point2d(120,140), 1))));
tracks_prev_curr.insert(std::pair<size_t, size_t>(8,8)); tracks_prev_curr.insert(std::pair<size_t, size_t>(8,8));
// point at 8 must be discarded // point at 8 must be discarded
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment