我已经计算了5个摄像机矩阵(c1, ... c5
),这些矩阵是通过将一个3D物体放置在5个不同的位置并为每个位置计算摄像机矩阵(且摄像机保持不变)来计算得出的。摄像机矩阵使用SVD方法计算。
现在我想使用opencv
中的束调整算法得到一个最优的摄像机矩阵。我在这里找到了文档。
但是文档不清晰,而且我也找不到任何示例代码。有人能解释一下如何使用opencv的束调整算法来获得最优的摄像机矩阵吗?
我已经计算了5个摄像机矩阵(c1, ... c5
),这些矩阵是通过将一个3D物体放置在5个不同的位置并为每个位置计算摄像机矩阵(且摄像机保持不变)来计算得出的。摄像机矩阵使用SVD方法计算。
现在我想使用opencv
中的束调整算法得到一个最优的摄像机矩阵。我在这里找到了文档。
但是文档不清晰,而且我也找不到任何示例代码。有人能解释一下如何使用opencv的束调整算法来获得最优的摄像机矩阵吗?
请参阅《使用OpenCV学习图像处理》第155页的示例代码。类似这样:
vector<CameraParams> cameras;
vector<MatchesInfo> pairwise_matches;
vector<ImageFeatures> features(num_images);
// initialize the above params here
Ptr<BundleAdjusterBase> adjuster;
adjuster = makePtr<BundleAdjusterReproj>();
if (!(*adjuster)(features, pairwise_matches, cameras)) {
cout << "Camera parameters adjusting failed." << endl;
return -1;
}
如果您提供一个最小化完整可复制的示例(MCVE),则更容易提供帮助。
编辑: 假设您有5个相同K矩阵的估计值。最简单的方法是将这5个估计值平均,以获得更准确的K值。在一些温和的假设下,这将是一个最优的估计。如果再投影误差差异很大,则可以计算加权平均值。
calibrateCamera
函数的设计比标准校准模式更通用,并且它还可以处理抽象的3D模式。 - BConic