我有一个类似于这的不对称圆点图案。我使用opencv solvePnP
函数根据已知的三维模式点来估计模式的姿态;( b)在2D图像中检测到模式点。
我发现在某些情况下(当模式正面面对摄像机并倾斜一点),solvePnP
函数返回的估计姿态是不稳定的。对于几乎相同的模式姿态有两个结果(不移动)。我想这是由于平面姿态模棱两可,具有相同的二维投影。
除了建议的时间过滤:类似问题之外,还有其他解决方案吗?
Update:我尝试应用这个纸来解决这个模棱两可的情况,但它没有起作用。我使用的代码来自这里。使用该算法可以得到与cv::solvePNP
几乎相同的结果,但不稳定的情况仍然存在。
发布于 2015-11-23 10:52:09
您可以将true设置为solvePnP函数的设置useExtrinsicGuess;使用此参数,solvePnP在solvePnP中的求解器的第一次迭代中使用最后一个计算位姿,参见算法。例如:
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);
}
你也可以用更多的点,在不同的平面上。
发布于 2015-09-08 15:03:47
正如已经建议的,使用findHomography
,然后分解结果。见张增友的纸在这里。特别要看的是,方程2.18用于概念,2.26用于解-您想要的情况是只有一个图像。
https://stackoverflow.com/questions/32447357
复制相似问题