59 PCL_ERROR (
"[pcl::ProgressiveSampleConsensus::computeModel] No threshold set!\n");
64 const int T_N = 200000;
65 const std::size_t N = sac_model_->indices_->
size ();
66 const std::size_t
m = sac_model_->getSampleSize ();
67 float T_n =
static_cast<float> (
T_N);
68 for (
unsigned int i = 0; i <
m; ++i)
69 T_n *=
static_cast<float> (
m - i) /
static_cast<float> (N - i);
72 float n =
static_cast<float> (
m);
75 float n_star =
static_cast<float> (N);
92 for (
unsigned int i = 0; i < n; ++i)
93 index_pool.push_back (sac_model_->indices_->operator[](i));
96 while (
static_cast<unsigned int> (iterations_) <
k_n_star)
108 index_pool.push_back (sac_model_->indices_->at(
static_cast<unsigned int> (n - 1)));
111 T_n *= (
static_cast<float>(n) + 1.0f) / (
static_cast<float>(n) + 1.0f -
static_cast<float>(
m));
118 sac_model_->getSamples (iterations_,
selection);
122 selection.push_back (sac_model_->indices_->at(
static_cast<unsigned int> (n - 1)));
130 PCL_ERROR (
"[pcl::ProgressiveSampleConsensus::computeModel] No samples could be selected!\n");
183 +
static_cast<std::size_t
> (std::ceil (boost::math::quantile (boost::math::complement (boost::math::binomial_distribution<float>(
static_cast<float> (
possible_n_star), 0.1f), 0.05))));
215 PCL_DEBUG (
"[pcl::ProgressiveSampleConsensus::computeModel] Trial %d out of %d: %d inliers (best is: %d so far).\n", iterations_,
k_n_star,
I_N,
I_N_best);
216 if (iterations_ > max_iterations_)
219 PCL_DEBUG (
"[pcl::ProgressiveSampleConsensus::computeModel] RANSAC reached the maximum number of trials.\n");
225 PCL_DEBUG (
"[pcl::ProgressiveSampleConsensus::computeModel] Model: %lu size, %d inliers.\n", model_.size (),
I_N_best);