41 delta_1_epsilon_1_ = (1 - options.
delta) / (1 - options.
epsilon);
42 UpdateDecisionThreshold();
46 const double max_residual,
size_t* num_inliers,
47 size_t* num_eval_samples) {
50 double likelihood_ratio = 1;
52 for (
size_t i = 0; i < residuals.size(); ++i) {
53 if (std::abs(residuals[i]) <= max_residual) {
55 likelihood_ratio *= delta_epsilon_;
57 likelihood_ratio *= delta_1_epsilon_1_;
60 if (likelihood_ratio > decision_threshold_) {
61 *num_eval_samples = i + 1;
66 *num_eval_samples = residuals.size();
71 void SPRT::UpdateDecisionThreshold() {
73 const double C = (1 - options_.
delta) *
74 std::log((1 - options_.
delta) / (1 - options_.
epsilon)) +
83 const double kEps = 1.5e-8;
89 for (
size_t i = 0; i < 100; ++i) {
90 const double A1 = A0 + std::log(A);
92 if (std::abs(A1 - A) < kEps) {
99 decision_threshold_ = A;
bool Evaluate(const std::vector< double > &residuals, const double max_residual, size_t *num_inliers, size_t *num_eval_samples)
void Update(const Options &options)
SPRT(const Options &options)
int num_models_per_sample