J'essaie de comparer des images en utilisant la méthode similaire à Features2D + Homography to find a known object mais remplacer findHomography()
par auto-écrit findAffine()
fonction. J'utilise Ceres Solver pour obtenir une matrice affine optimale en considérant les valeurs aberrantes.Comment extraire des résultats aberrants du résultat de ceres solveur?
double translation[] = {0, 0};
double angle = 0;
double scaleFactor = 1;
ceres::Problem problem;
for (size_t i = 0; i < points1.size(); ++i) {
problem.AddResidualBlock(
new ceres::AutoDiffCostFunction<AffineResidual, 1, 2, 1, 1>(
new AffineResidual(Eigen::Vector2d(points1[i].x, points1[i].y),
Eigen::Vector2d(points2[i].x, points2[i].y))),
new ceres::HuberLoss(1.0),
translation,
&angle,
&scaleFactor);
}
ceres::Solver::Options options;
options.linear_solver_type = ceres::DENSE_QR;
options.minimizer_progress_to_stdout = true;
ceres::Solver::Summary summary;
Solve(options, &problem, &summary);
Ceres fournir solveur LossFunction:
fonctions de perte réduisent l'influence des blocs résiduels avec des résiduels élevés, généralement ceux correspondant aux valeurs aberrantes.
Bien sûr, je peux transformer les coordonnées des points-clés de la première image par la matrice obtenue, comparer avec la seconde et obtenir une déviation. Mais ceres solveur déjà fait à l'intérieur pendant le travail.
Comment puis-je le récupérer? Je ne l'ai pas trouvé dans la documentation.
Quelqu'un pourrait-il m'expliquer pourquoi la question est downvoted? – victor1234