Я пытаюсь сравнить изображения, используя метод, аналогичный Features2D + Homography to find a known object, но замените findHomography()
на самообману findAffine()
функция.Как получить выбросы от результата решателя ceres?
Я использую Ceres Solver для получения оптимальной аффинной матрицы с учетом выбросов.
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);
Восковины решатель обеспечивает LossFunction:
функции потерь уменьшить влияние остаточных блоков с высокими невязок, как правило, те, соответствующие выбросам.
Конечно, я могу преобразовать координаты ключевых точек из первого изображения по полученной матрице, сравнить со вторым и получить отклонение. Но ceres solver уже сделал это внутри во время работы.
Как я могу его получить? Не нашли его в документации.
Может ли кто-нибудь объяснить мне, почему вопрос ниспровергнут? – victor1234