示例#1
0
void LKTracker::InitializeTracker(cv::Mat &current_frame, const Pose &pose){

  const cv::Size subPixWinSize(10, 10);
   
  cv::Mat gray;
  cv::cvtColor(current_frame, gray, CV_BGR2GRAY);

  //std::vector<cv::Point2f> points;
  cv::goodFeaturesToTrack(gray, points_test[0], 50, 0.01, 10, CreateMask(), 3, 0, 0.04);
  cv::cornerSubPix(gray, points_test[0], subPixWinSize, cv::Size(-1, -1), term_crit_);

  tracked_points_.clear();
  //for (int i = 0; i < points_test[0].size(); ++i){
  //  tracked_points_.push_back(TrackedPoint(cv::Vec3f(0, 0, 0), cv::Vec2f(0, 0)));
  //}
  for (size_t i = 0; i < points_test[0].size(); ++i){
    cv::Vec3f &point_on_model = front_intersection_image_.at<cv::Vec3f>(points_test[0][i].y, points_test[0][i].x);
    if (point_on_model[0] == GL_FAR || point_on_model[1] == GL_FAR || point_on_model[2] == GL_FAR){
      tracked_points_.push_back(TrackedPoint(cv::Vec3f(0,0,0), cv::Vec2f(-1,-1)));
    }
    else{
      tracked_points_.push_back(TrackedPoint(pose.InverseTransformPoint(point_on_model), points_test[0][i]));
    }
  }
 
  previous_frame_gray_ = gray.clone();

}
示例#2
0
void LKTracker::UpdatePointsOnModelBeforeDerivatives(const Pose &pose){
  
  for (size_t i = 0; i < tracked_points_.size(); ++i){
    
    if (tracked_points_[i].frame_point[1] >= 0 && tracked_points_[i].frame_point[0] >= 0){
      
      if (tracked_points_[i].frame_point[1] > front_intersection_image_.rows || tracked_points_[i].frame_point[0] >= front_intersection_image_.cols){
      }
      else{
        cv::Vec3f pt = front_intersection_image_.at<cv::Vec3f>(tracked_points_[i].frame_point[1], tracked_points_[i].frame_point[0]);
        if (pt[0] == GL_FAR && pt[1] == GL_FAR && pt[2] == pt[2]){
          tracked_points_[i].frame_point = cv::Vec2i(-1, -1);
        }
        else{
          tracked_points_[i].model_point = pose.InverseTransformPoint(pt);
        }
      }

    }
  }
}