* Python interface with pybind11 */
| 22 | * Python interface with pybind11 |
| 23 | */ |
| 24 | PYBIND11_MODULE(teaserpp_python, m) { |
| 25 | m.doc() = "Python binding for TEASER++"; |
| 26 | |
| 27 | // Python bound for teaser::RegistrationSolution |
| 28 | py::class_<teaser::RegistrationSolution>(m, "RegistrationSolution") |
| 29 | .def_readwrite("scale", &teaser::RegistrationSolution::scale) |
| 30 | .def_readwrite("translation", &teaser::RegistrationSolution::translation) |
| 31 | .def_readwrite("rotation", &teaser::RegistrationSolution::rotation) |
| 32 | .def("__repr__", [](const teaser::RegistrationSolution& a) { |
| 33 | std::ostringstream print_string; |
| 34 | |
| 35 | print_string << "<RegistrationSolution with scale=" << a.scale << "\n" |
| 36 | << "translation=\n" |
| 37 | << a.translation << "\n" |
| 38 | << "rotation=\n" |
| 39 | << a.rotation << "\n" |
| 40 | << ">"; |
| 41 | return print_string.str(); |
| 42 | }); |
| 43 | |
| 44 | // Python bound for teaser::RobustRegistraionSolver |
| 45 | py::class_<teaser::RobustRegistrationSolver> solver(m, "RobustRegistrationSolver"); |
| 46 | |
| 47 | // Python bound for teaser::RobustRegistrationSolver functions |
| 48 | solver.def(py::init<>()) |
| 49 | .def(py::init<const teaser::RobustRegistrationSolver::Params&>()) |
| 50 | .def("getParams", &teaser::RobustRegistrationSolver::getParams) |
| 51 | .def("reset", &teaser::RobustRegistrationSolver::reset) |
| 52 | .def("solve", py::overload_cast<const Eigen::Matrix<double, 3, Eigen::Dynamic>&, |
| 53 | const Eigen::Matrix<double, 3, Eigen::Dynamic>&>( |
| 54 | &teaser::RobustRegistrationSolver::solve)) |
| 55 | .def("getSolution", &teaser::RobustRegistrationSolver::getSolution) |
| 56 | .def("getGNCRotationCostAtTermination", |
| 57 | &teaser::RobustRegistrationSolver::getGNCRotationCostAtTermination) |
| 58 | .def("getScaleInliersMask", &teaser::RobustRegistrationSolver::getScaleInliersMask) |
| 59 | .def("getScaleInliersMap", &teaser::RobustRegistrationSolver::getScaleInliersMap) |
| 60 | .def("getScaleInliers", &teaser::RobustRegistrationSolver::getScaleInliers) |
| 61 | .def("getRotationInliersMask", &teaser::RobustRegistrationSolver::getRotationInliersMask) |
| 62 | .def("getRotationInliersMap", &teaser::RobustRegistrationSolver::getRotationInliersMap) |
| 63 | .def("getRotationInliers", &teaser::RobustRegistrationSolver::getRotationInliers) |
| 64 | .def("getTranslationInliersMask", |
| 65 | &teaser::RobustRegistrationSolver::getTranslationInliersMask) |
| 66 | .def("getTranslationInliersMap", &teaser::RobustRegistrationSolver::getTranslationInliersMap) |
| 67 | .def("getTranslationInliers", &teaser::RobustRegistrationSolver::getTranslationInliers) |
| 68 | .def("getInlierMaxClique", &teaser::RobustRegistrationSolver::getInlierMaxClique) |
| 69 | .def("getInlierGraph", &teaser::RobustRegistrationSolver::getInlierGraph) |
| 70 | .def("getSrcTIMsMap", &teaser::RobustRegistrationSolver::getSrcTIMsMap) |
| 71 | .def("getDstTIMsMap", &teaser::RobustRegistrationSolver::getDstTIMsMap) |
| 72 | .def("getSrcTIMsMapForRotation", &teaser::RobustRegistrationSolver::getSrcTIMsMapForRotation) |
| 73 | .def("getDstTIMsMapForRotation", &teaser::RobustRegistrationSolver::getDstTIMsMapForRotation) |
| 74 | .def("getMaxCliqueSrcTIMs", &teaser::RobustRegistrationSolver::getMaxCliqueSrcTIMs) |
| 75 | .def("getMaxCliqueDstTIMs", &teaser::RobustRegistrationSolver::getMaxCliqueDstTIMs) |
| 76 | .def("getSrcTIMs", &teaser::RobustRegistrationSolver::getSrcTIMs) |
| 77 | .def("getDstTIMs", &teaser::RobustRegistrationSolver::getDstTIMs); |
| 78 | |
| 79 | // Python bound for teaser::RobustRegistrationSolver::ROTATION_ESTIMATE_ALGORITHM |
| 80 | py::enum_<teaser::RobustRegistrationSolver::ROTATION_ESTIMATION_ALGORITHM>( |
| 81 | solver, "ROTATION_ESTIMATION_ALGORITHM") |