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); } } } }
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); } }
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); }