opencv - 通过 opencv projectPoints() 使用 Levenberg-Marquardt 优化算法来估计校准误差

标签 opencv opencv3.0 camera-calibration levenberg-marquardt

在相机校准中,我使用 calibrateCamera() 从校准图案的多个 View 中查找相机参数。它恰恰做了两件事:

1) 假设镜头畸变为零,估计封闭形式的初始相机参数。

2) 运行全局 Levenberg-Marquardt 优化算法以最小化重投影误差,这是使用 projectPoints() 完成的

现在,我不仅要计算最小化重投影误差,还要计算导致它的拟合参数。目前没有返回无错误参数的函数。所以,我想的是我会使用 projectPoints() 来获取重新投影的图像点,然后使用重新投影的图像点和世界点再次校准并获得无误差参数。问题是这不是我确定会给我输出的东西。谁能告诉我是不是?任何帮助将不胜感激。

最佳答案

Levenberg-Marquardt 将对您的模型和数据的能力做出最佳估计。除非您的输入数据没有噪声并且您的模型复杂性与真实模型的复杂性相匹配,否则您无法获得无错误的参数。

例如,您的模型是: x * 2 + y = z, x > 0 且x为整数

输入数据 z = { 3 }

根据您的初始值,Levenberg-Marquardt 将为您提供: (x = 1, y = 1) 或 (x=2,y=-1) 或 ... 没有错误

但是,对于相同的输入 z,如果您的模型是: x * 2 = z, x > 0 且x为整数

你不可能得到没有错误的参数

关于opencv - 通过 opencv projectPoints() 使用 Levenberg-Marquardt 优化算法来估计校准误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37937966/

相关文章:

opencv - 如何将opencv image(8UC3)转换为char *数组

c++ - OpenCV: ‘AlgorithmInfo’ 在构建 opencv_contrib 时未命名类型

opencv - 安装 OpenCV3 后有没有办法恢复 OpenCV2.4.11?

python-3.x - OpenCV-检测不包括阴影的对象

c++ - 如何解决 Qt Creator 变量 -“<not accessible>” 行为 (Opencv)

java - 从位图 rgb_565 转换为 Mat

ubuntu - 尝试在 Ubuntu 上构建 OpenCV 3 世界模块时出现 CMake 不存在目标错误

c++ - OpenCV - 将相机矩阵和畸变系数存储为 Mat

python - 将纬度、经度和高度转换为平面 3D 空间中的点

opencv - 较小的重投影误差是否总是意味着更好的校准?