gpt4 book ai didi

opencv - SolvePnP - 平面物体的姿态估计 - 模棱两可的情况

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:52 26 4
gpt4 key购买 nike

我有一个类似于 this 的不对称圆点图案.我使用 opencv solvePnP 函数根据 a) 已知的 3D 图案点来估计图案的姿态; b) 二维图像中检测到的图案点

我发现在某些情况下(当图案正面朝向相机并稍微倾斜时),solvePnP 函数返回的估计姿势是不稳定的。几乎相同的模式姿势(没有移动)有两个结果。我猜这是由于模糊的平面姿态具有相同的 2D 投影。

除了此处建议的时间过滤之外,是否有任何解决方案: Similar issue

更新:我试着应用这个 paper这解决了模棱两可的情况,但没有奏效。我使用的代码来自here .通过使用该算法,我可以获得与 cv::solvePNP 几乎相同的结果,但不稳定的情况仍然存在。

最佳答案

您可以将 solvePnP 函数的 useExtrinsicGuess 设置为 true;使用此参数,solvePnP 在 solverPnP 内部求解器的第一次迭代中使用最后计算的姿势,请参见 https://en.wikipedia.org/wiki/Levenberg–Marquardt_algorithm .例如:

void getPose(cv::Mat& t_vec, cv::Mat& r_vec)
{
static cv::Mat raux, taux;
static bool useExtrinsicGuess = false
cv::Mat objPoints (4, 3, CV_32FC1); // Your 3d points
cv::Mat imagePoints(4, 2, CV_32FC1); // Your 2d points

cv::solvePnP (objPoints,
imagePoints,
camera.getCameraMatrix(), // Camera matrix
camera.getDistorsion(), // Camera distorsion
raux, taux, useExtrinsicGuess, CV_ITERATIVE);
if (!useExtrinsicGuess) {
useExtrinsicGuess = true;
}
raux.convertTo(r_vec, CV_32F);
taux.convertTo(t_vec, CV_32F);
}

您还可以在不同的平面上使用更多的点。

关于opencv - SolvePnP - 平面物体的姿态估计 - 模棱两可的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com