コード例 #1
0
ファイル: Gui.cpp プロジェクト: liz-murphy/rslam_dev
bool Gui::Update(const std::shared_ptr<pb::ImageArray> &frames, const ReferenceFrameId& id, std::vector<std::vector<cv::KeyPoint> >&current_keypoints)
{
 
  std::unique_lock<std::mutex> lock = lock_gui();

  if(!lock)
  {
    ROS_ERROR("Can't update Gui");
    return false;
  }
  
  // Reference frame
  current_frame_id_ = id;

  // Current images
  current_frames_.clear();
  if(frames)
  {
    for (int i = 0; i < frames->Size(); ++i) {
      current_frames_.push_back(frames->at(i)->Mat().clone());
    }
  }

  SlamFramePtr current_frame = map_->GetFramePtr(current_frame_id_);
  if (!current_frame) {
    return false;
  }

  size_t num_meas = current_frame->NumMeasurements();
  ROS_INFO("Frame has %d measurements", num_meas);
  std::vector<MultiViewMeasurement> cur_meas(
      num_meas, MultiViewMeasurement(rig_.cameras.size()));
  for (size_t zi = 0; zi < num_meas; ++zi) {
    current_frame->GetMeasurement(zi, &cur_meas[zi]);
  }

  current_measurements_.swap(cur_meas);
  current_keypoints_.swap(current_keypoints);

  // Update track data structure
  TrackInfoPtr pTrackInfo;
  
  if(track_info_.size() < num_visible_time_steps_)
  {
    pTrackInfo = TrackInfoPtr(new TrackInfo());
  }
  else
  {
    pTrackInfo = track_info_.back();
    track_info_.pop_back();
  }
  track_info_.push_front(pTrackInfo);
  pTrackInfo->Update(current_measurements_, current_keypoints_, current_frame_id_);

  if(!init_)
    init_=true;

  return true;
}
コード例 #2
0
ファイル: preferencesthread.C プロジェクト: knutj/cinelerra
void PreferencesThread::update_rates()
{
	if(thread_running)
	{
		lock_gui("PreferencesThread::update_framerate");
		PreferencesWindow *window = (PreferencesWindow*)get_gui();
		if(window) window->update_rates();
		unlock_gui();
	}
}
コード例 #3
0
ファイル: Gui.cpp プロジェクト: liz-murphy/rslam_dev
void Gui::GetDisplayImage(cv::Mat &image)
{
  cv::Mat out_left, out_right;
  std::unique_lock<std::mutex> lock = lock_gui();

  if(!lock)
    return;
  
  cv::drawKeypoints(current_frames_[0], current_keypoints_[0], out_left);
  cv::drawKeypoints(current_frames_[1], current_keypoints_[1], out_right);
  cv::hconcat(out_left, out_right, image);
  // Draw correspondences
  for(auto z : current_measurements_)
  {
    if(z.HasGoodMeasurement())
    {
      Eigen::MatrixXd p1 = z.Pixel(0);
      Eigen::MatrixXd p2 = z.Pixel(1);

      line(image, cv::Point(p1(0),p1(1)), cv::Point(p2(0)+current_frames_[0].size().width,p2(1)),cv::Scalar(0,255,0.,1.0));
    }
  }

  /* Draw landmark tracks */
  for(size_t row=0; row < track_info_.size(); ++row) {
    for(MultiViewMeasurement& z: track_info_[row]->measurements_){
        Landmark landmark;
        if(!map_->GetLandmark(z.id().landmark_id, &landmark)){
          ROS_INFO("Can't find landmark");
          continue;
        }
        const std::vector<MeasurementId>& msr_ids = landmark.GetFeatureTrackRef();

        MultiViewMeasurement z1,z2;
        int cam_id = 0;
        for (unsigned int ii=0; ii < msr_ids.size()-1; ++ii) {
          map_->GetMeasurement(msr_ids[ii], z1);
          map_->GetMeasurement(msr_ids[ii+1], z2);
          if (z1.HasGoodMeasurementInCam(cam_id) && z2.HasGoodMeasurementInCam(cam_id)){
            const Eigen::Vector2t& p1 = z1.Pixel(cam_id);
            const Eigen::Vector2t& p2 = z2.Pixel(cam_id);
            line(image, cv::Point(p1(0),p1(1)), cv::Point(p2(0),p2(1)),cv::Scalar(255,0.,0.,1.0));
          }
        }
    }

  }
}