You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
The text was updated successfully, but these errors were encountered:
Hi @zouxianghong Thanks for the report unfortunately I currently do not have the bandwidth to investigate this issue. I'm leaving this open in case anyone will be interested in taking a look.
Have you read the documentation?
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:
The text was updated successfully, but these errors were encountered: