-
Notifications
You must be signed in to change notification settings - Fork 372
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Have you read the documentation?
- Yes
- [ ] No - then this issue will be closed.
Post your theoretical questions / usage questions here.
The default sub_optimality is 0.001, while the best suboptimal value obtained by the certification algorithm is very large.
Here are two cases:
case1: registration result is good while the best suboptimal value is so large (419.4077).
case2: registration result is bad while the best suboptimal value is less than case1 (4.6976)
Note: The ground truth rotations of the above cases are Identity, so the lines of correspondences should be parallel.
The best suboptimal values of two cases above are much larger than the default threshold (0.001) in TEASER++.
Looking forward to your reply, thank you so much!
Here are the params and code:
# solver / certifier params
cbar2: 1
noise_bound: 1.0
estimate_scaling: False
rotation_gnc_factor: 1.4
rotation_max_iterations: 100
rotation_cost_threshold: 1e-6
sub_optimality: 100 # 1e-3
# code
def reg_with_teaser(self, q_kpts, m_kpts):
''' @Input: q_kpts: N x 3, m_kpts: N x 3
@Return: est_R, est_t, est_theta
'''
self.solver.reset(self.solver_params)
self.solver.solve(q_kpts.T, m_kpts.T) # src: 3 x N, dst: 3 x N
solution = self.solver.getSolution()
mac_inliers = self.solver.getInlierMaxClique()
rotation_inlier_mask = self.solver.getRotationInliersMask()
translation_inlier_mask = self.solver.getTranslationInliersMask()
mask = rotation_inlier_mask & translation_inlier_mask
inliers = np.array(mac_inliers)[mask]
est_theta = np.ones(len(q_kpts), dtype=int) * -1
est_theta[inliers] = 1 # inliers
return solution.rotation, solution.translation, est_theta
def certify(self, q_kpts, m_kpts, est_R, est_theta):
''' @Input: q_kpts: N x 3, m_kpts: N x 3,
theta: N ({1, -1}, 1: inlier, -1: outlier),
est_R: 3 x 3
@Return: is_optimal: bool, True if best_suboptimality < sub_optimality, else False
best_suboptimality: double
'''
certify_res = self.certifier.certify(est_R, q_kpts.T, m_kpts.T, est_theta.reshape(1, -1))
return certify_res.is_optimal, certify_res.best_suboptimality
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working