void ForegroundProcessor::segmentForegroundSlow(Frame & frame) { //record demo threshMap(frame.foreground, threshval); //Threshold at threshval frame.foreground.copyTo(frame.demoImage(Range(0, frame.image.rows), Range(0, frame.image.cols))); if (shadows) { suppressShadows(frame, minArea, minQuotient); } //record demo frame.foreground.copyTo(frame.demoImage(Range(0, frame.image.rows), Range(frame.image.cols, frame.image.cols*2))); //Remove gray pixels threshMap(frame.foreground, threshval); distanceFilter(frame, minDist); dilateBinMap(frame.foreground, iterations); //record demo frame.foreground.copyTo(frame.demoImage(Range(frame.image.rows, frame.image.rows*2), Range(0, frame.image.cols))); getObjects(frame); return; }
vector<long> DividedHighwayMerger::_findOtherWays(boost::shared_ptr<const hoot::Way> baseWay) { shared_ptr<OneWayFilter> owFilter(new OneWayFilter()); shared_ptr<StatusFilter> statusFilter(new StatusFilter(baseWay->getStatus())); shared_ptr<WayBufferFilter> distanceFilter(new WayBufferFilter(_map, baseWay, _maxSeparation, _matchPercent)); shared_ptr<ParallelWayFilter> parallelFilter(new ParallelWayFilter(_map, baseWay)); shared_ptr<WayDirectionFilter> directionFilter(new WayDirectionFilter(_map, baseWay, false)); WayFilterChain filter; filter.addFilter(owFilter); filter.addFilter(statusFilter); filter.addFilter(distanceFilter); filter.addFilter(parallelFilter); filter.addFilter(directionFilter); return _map->filterWays(filter); }
vector<long> DividedHighwayMerger::_findCenterWays(shared_ptr<const Way> w1, shared_ptr<const Way> w2) { shared_ptr<OneWayFilter> owFilter(new OneWayFilter(false)); Status s; if (w1->getStatus() == Status::Unknown1) { s = Status::Unknown2; } else { s = Status::Unknown1; } shared_ptr<StatusFilter> statusFilter(new StatusFilter(s)); shared_ptr<ParallelWayFilter> parallelFilter(new ParallelWayFilter(_map, w1)); ElementConverter ec(_map); shared_ptr<LineString> ls2 = ec.convertToLineString(w2); if (DirectionFinder::isSimilarDirection(_map, w1, w2) == false) { ls2.reset(dynamic_cast<LineString*>(ls2->reverse())); } // calculate the center line of two ways. shared_ptr<LineString> center = LineStringAverager::average( ec.convertToLineString(w1), ls2); shared_ptr<WayBufferFilter> distanceFilter(new WayBufferFilter(_map, center, 0.0, (w1->getCircularError() + w2->getCircularError()) / 2.0, _matchPercent)); WayFilterChain filter; filter.addFilter(owFilter); filter.addFilter(statusFilter); filter.addFilter(parallelFilter); filter.addFilter(distanceFilter); return _map->filterWays(filter); }