void opengv::sac::SampleConsensusProblem<M>::getSamples( int &iterations, std::vector<int> &samples) { // We're assuming that indices_ have already been set in the constructor if (indices_->size() < (size_t)getSampleSize()) { fprintf( stderr, "[sm::SampleConsensusModel::getSamples] Can not select %zu unique points out of %zu!\n", (size_t) getSampleSize(), indices_->size() ); // one of these will make it stop :) samples.clear(); iterations = std::numeric_limits<int>::max(); return; } // Get a second point which is different than the first samples.resize( getSampleSize() ); for( int iter = 0; iter < max_sample_checks_; ++iter ) { drawIndexSample(samples); // If it's a good sample, stop here if(isSampleGood(samples)) return; } fprintf( stdout, "[sm::SampleConsensusModel::getSamples] WARNING: Could not select %d sample points in %d iterations!\n", getSampleSize(), max_sample_checks_ ); samples.clear(); }
void RansacProblem<M>::getSamples(int &iterations, std::vector<int> &samples) { // We're assuming that indices_ have already been set in the constructor if (indices_->size() < (size_t)getSampleSize()) { SM_ERROR ("[sm::SampleConsensusModel::getSamples] Can not select %zu unique points out of %zu!\n", samples.size (), indices_->size ()); // one of these will make it stop :) samples.clear(); iterations = INT_MAX - 1; return; } // Get a second point which is different than the first samples.resize( getSampleSize() ); for (int iter = 0; iter < max_sample_checks_; ++iter) { drawIndexSample (samples); // If it's a good sample, stop here if (isSampleGood (samples)) return; } SM_DEBUG ("[sm::SampleConsensusModel::getSamples] WARNING: Could not select %d sample points in %d iterations!\n", getSampleSize (), max_sample_checks_); samples.clear (); }
void opengv::sac::MultiSampleConsensusProblem<M>::getSamples( int &iterations, std::vector< std::vector<int> > &samples ) { std::vector<int> sampleSizes = getSampleSizes(); samples.resize( sampleSizes.size() ); for( size_t subIter = 0; subIter < samples.size(); subIter++ ) { // We're assuming that indices_ have already been set in the constructor if( (*indices_)[subIter].size() < (size_t) sampleSizes[subIter] ) { fprintf( stderr, "[sm::SampleConsensusModel::getSamples] Can not select %d unique points out of %zu!\n", sampleSizes[subIter], (*indices_)[subIter].size() ); // one of these will make it stop :) samples.clear(); iterations = INT_MAX - 1; return; } // Get a second point which is different than the first samples[subIter].resize( sampleSizes[subIter] ); } for( int iter = 0; iter < max_sample_checks_; ++iter ) { drawIndexSample(samples); // If it's a good sample, stop here if (isSampleGood (samples)) return; } size_t multiSampleSize = 0; for( size_t multiIter = 0; multiIter < samples.size(); multiIter++ ) multiSampleSize += samples[multiIter].size(); fprintf( stdout, "[sm::SampleConsensusModel::getSamples] WARNING: Could not select %zu sample points in %d iterations!\n", multiSampleSize, max_sample_checks_ ); samples.clear(); }