| 164 | } |
| 165 | |
| 166 | void BindAbsolutePoseEstimator(py::module& m) { |
| 167 | auto PyRANSACOptions = m.attr("RANSACOptions"); |
| 168 | py::classh<AbsolutePoseEstimationOptions> PyEstimationOptions( |
| 169 | m, "AbsolutePoseEstimationOptions"); |
| 170 | PyEstimationOptions.def(py::init<>()) |
| 171 | .def_readwrite("estimate_focal_length", |
| 172 | &AbsolutePoseEstimationOptions::estimate_focal_length) |
| 173 | .def_readwrite("ransac", &AbsolutePoseEstimationOptions::ransac_options); |
| 174 | MakeDataclass(PyEstimationOptions); |
| 175 | |
| 176 | py::classh<AbsolutePoseRefinementOptions> PyRefinementOptions( |
| 177 | m, "AbsolutePoseRefinementOptions"); |
| 178 | PyRefinementOptions.def(py::init<>()) |
| 179 | .def_readwrite("gradient_tolerance", |
| 180 | &AbsolutePoseRefinementOptions::gradient_tolerance) |
| 181 | .def_readwrite("max_num_iterations", |
| 182 | &AbsolutePoseRefinementOptions::max_num_iterations) |
| 183 | .def_readwrite("loss_function_scale", |
| 184 | &AbsolutePoseRefinementOptions::loss_function_scale) |
| 185 | .def_readwrite("refine_focal_length", |
| 186 | &AbsolutePoseRefinementOptions::refine_focal_length) |
| 187 | .def_readwrite("refine_extra_params", |
| 188 | &AbsolutePoseRefinementOptions::refine_extra_params) |
| 189 | .def_readwrite("print_summary", |
| 190 | &AbsolutePoseRefinementOptions::print_summary) |
| 191 | .def_readwrite("use_position_prior", |
| 192 | &AbsolutePoseRefinementOptions::use_position_prior) |
| 193 | .def_readwrite("position_prior_in_world", |
| 194 | &AbsolutePoseRefinementOptions::position_prior_in_world) |
| 195 | .def_readwrite("position_prior_covariance", |
| 196 | &AbsolutePoseRefinementOptions::position_prior_covariance); |
| 197 | MakeDataclass(PyRefinementOptions); |
| 198 | |
| 199 | m.def("estimate_absolute_pose", |
| 200 | &PyEstimateAbsolutePose, |
| 201 | "points2D"_a, |
| 202 | "points3D"_a, |
| 203 | "camera"_a, |
| 204 | py::arg_v("estimation_options", |
| 205 | AbsolutePoseEstimationOptions(), |
| 206 | "AbsolutePoseEstimationOptions()"), |
| 207 | "Robustly estimate absolute pose using LO-RANSAC " |
| 208 | "without non-linear refinement."); |
| 209 | |
| 210 | m.def("refine_absolute_pose", |
| 211 | &PyRefineAbsolutePose, |
| 212 | "cam_from_world"_a, |
| 213 | "points2D"_a, |
| 214 | "points3D"_a, |
| 215 | "inlier_mask"_a, |
| 216 | "camera"_a, |
| 217 | py::arg_v("refinement_options", |
| 218 | AbsolutePoseRefinementOptions(), |
| 219 | "AbsolutePoseRefinementOptions()"), |
| 220 | "return_covariance"_a = false, |
| 221 | "Non-linear refinement of absolute pose."); |
| 222 | |
| 223 | m.def("estimate_and_refine_absolute_pose", |
no test coverage detected