Пример #1
0
void OPTICSFilter::expandClusterOrder(OPTICSObject_Ptr node) {
    OPTICSObjectVector_Ptr epsilonNeighbors = getEpsilonNeighbors(node);
    node->processed = true;

    // output p to the ordered list
    _orderedObjects.push_back(node);

    OPTICSObjectVector_Ptr seeds(new OPTICSObjectVector);
    if (node->coreDistance != UNDEFINED_DISTANCE) {
        updateSeeds(epsilonNeighbors, node, seeds);

        while (!seeds->empty()) {
            OPTICSObject_Ptr currentObject = seeds->back();
            seeds->pop_back();

            OPTICSObjectVector_Ptr currentObjectEpsilonNeighbors = getEpsilonNeighbors(currentObject);

            // output q to the ordered list
            if (currentObject->processed == false) {
                _orderedObjects.push_back(currentObject);
                currentObject->processed = true;
            } else
                continue;

            if (currentObject->coreDistance != UNDEFINED_DISTANCE) {
                updateSeeds(currentObjectEpsilonNeighbors, currentObject, seeds);
            }
        }
    }
}
Пример #2
0
void DepthFilter::updateSeedsLoop()
{
  while(!boost::this_thread::interruption_requested())
  {
    FramePtr frame;
    {
      lock_t lock(frame_queue_mut_);
      while(frame_queue_.empty() && new_keyframe_set_ == false)
        frame_queue_cond_.wait(lock);
      if(new_keyframe_set_)
      {
        new_keyframe_set_ = false;
        seeds_updating_halt_ = false;
        clearFrameQueue();
        frame = new_keyframe_;
      }
      else
      {
        frame = frame_queue_.front();
        frame_queue_.pop();
      }
    }
    updateSeeds(frame);
    if(frame->isKeyframe())
      initializeSeeds(frame);
  }
}
Пример #3
0
void DepthFilter::addFrame(FramePtr frame)
{
  if(thread_ != NULL)
  {
    {
      lock_t lock(frame_queue_mut_);
      if(frame_queue_.size() > 2)
        frame_queue_.pop();
      frame_queue_.push(frame);
    }
    seeds_updating_halt_ = false;
    frame_queue_cond_.notify_one();
  }
  else
    updateSeeds(frame);
}