Hi All
I am trying to select the best parameters for ICP registration dynamically.
This means I am trying to identify an objective function to select the best threshold value.
I have been using this:
def objective(thresh,source, target, trans_init):
evaluation = o3d.registration.evaluate_registration(source, target,thresh, trans_init)
return (1.0/(np.asarray(evaluation.correspondence_set).shape[0] * evaluation.fitness))
Basically my assumption was that the greater the number of inliers, the better the fit.
Needless to say it does not work.
What would you suggest as a better objective funciton to use to optimise via scipy.minimize?
I also wonder if I need to also optimise the parameters used to generate the normals, e.g.:
source.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.5, max_nn=300))
ie – do I also need to optimise the radius?
I then use this threshold value in the ICP registration…
reg_p2p = o3d.registration.registration_icp(
source, target, threshold, trans_init,
o3d.registration.TransformationEstimationPointToPlane())
Thanks for your help.