首页 > 解决方案 > 在 C++ 中优化两个向量之间的距离

问题描述

我有两个带坐标的向量,存储为 OpenCV 的浮点数:
a)dstpoints是一个带有 OpenCV 点的向量 - std::vector<cv::Point2f>(在我的示例中我有 162 个点,它们没有改变),
b)pptsstd::vector<cv::Point2f>和 dstpoints 的大小相同:
std::vector<cv::Point2f> ppts = project_keypoints(params, input);
但是ppts依赖于另外两个向量:
-输入是 2*162=324 长并且没有改变,
-参数是 189 长,应该改变它的值以获得变量suma的最小值,如下所示:

    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);
    }

我正在寻找参数向量,它将给我最小的suma变量值。最小二乘算法似乎是解决它的好选择: https
://en.wikipedia.org/wiki/Least_squares 我尝试了 dlib 版本:
http
://dlib.net/dlib/optimization/optimization_least_squares_abstract.h.html#solve_least_squares 但恐怕这对我的情况不利。
我认为,我在 dlib 版本中的问题是,对于每个不同的参数向量,我得到不同的ppts向量,不仅是单个值,而且我不知道dlib 中的solve_least_squares函数是否可以匹配我的示例。
我正在寻找可以帮助解决问题的 C++ 解决方案(可能带有优化器)。

标签: c++mathoptimizationleast-squares

解决方案


推荐阅读