Оптимизация расстояния между двумя векторами в C ++ - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть два вектора с координатами, которые хранятся как плавающие точки OpenCV:
a) dstpoints - это вектор с точками OpenCV - std::vector<cv::Point2f> (в моем примере 162 точки, онине изменяется),
b) ppts также std::vector<cv::Point2f> и того же размера, что и dstpoints:
std::vector<cv::Point2f> ppts = project_keypoints(params, input);
Но ppts зависит от двух другихвекторы:
- input имеет длину 2 * 162 = 324 и не изменяется,
- params имеет длину 189 и его значения следует изменить, чтобы получить минимальное значениепеременной сума , что-то вроде этого:

    double suma = 0.0;
    for (int i=0; i<dstpoints_size; i++)
    {
        suma += pow(dstpoints[i].x - ppts[i].x, 2);
        suma += pow(dstpoints[i].y - ppts[i].y, 2);
    }

Я ищу params вектор, который даст мне наименьшее значение сума переменная.Алгоритм наименьших квадратов кажется хорошим вариантом для его решения: https://en.wikipedia.org/wiki/Least_squares
Я пробовал версию dlib:
http://dlib.net/dlib/optimization/optimization_least_squares_abstract.h.html#solve_least_squares
, но я боюсь, что это не подходит для моего случая.
Iдумаю, моя проблема в версии dlib состоит в том, что для каждого различного параметра вектора я получаю различный ppts вектор, а не только одно значение, и я не знаю, если solve_least_squares функция из dlib может соответствовать моему примеру.
Я ищу решение C ++ (возможно, с оптимизаторами), которое могло бы помочь решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...