【发布时间】:2015-01-31 03:31:17
【问题描述】:
我知道上述问题是广泛而模糊的。 但要放在上下文中: 我正在尝试确定相机的姿势和位置估计的准确性。我花了数周时间校准和尝试不同的方法和不同尺寸的电路板、照明、距离等。
我尝试过的方法:
说明:
- 每张照片使用大约 20 张不同方向和位置的图像,在相机前拍摄
- 适用于尺寸为 25mm、32mm 和 50mm 的 9x6 棋盘
- 在 1280x720 和 1920x1080 两种分辨率下
- 小板的距离在 500 毫米到大板的 2000 毫米之间
在所有情况下,我都遵循此链接How to verify the correctness of calibration of a webcam?的严格准则
在上述因素的所有组合中,我得到的结果相差几毫米(+- 15 毫米) 对于上述方法,我对 1280x720 的 25mm 块的内在函数范围如下:
- OpenCV 的内置校准方法 > fx = 1269.4 fy = 1269.49 cx = 639.5 cy = 359.5
- Matlab 校准工具箱 > fx = 1259.53 fy = 1260.76 cx = 661.3 cy = 306.5
- Matlab标定App > fx = 1255.1 fy = 1254.8 cx = 652.6 cy = 340.7
- 手动调整值。 > 各种结果,除 cx = 639.5 cy = 359.5 外均不稳定
情况不应该如此。在处理 1 米以下的距离时,相机相对于电路板原点的位置应该精确到平均一毫米或两毫米,如果不是亚毫米精度的话。除非我弄错了?
我的问题是,对于高清网络摄像头,什么是理想、简单且失真小的校准方法?
【问题讨论】:
-
openCVs和Matlabs的标定方法是一样的,据我所知...
-
我不确定如何解释您的声明 "In all cases I have followed strict guidelines as per ..." - 因为如果我点击链接,在 #4 下我会读到:“进行大量测量和图片。你想要数百个每张图像的测量值(角)和数十张图像。就数据而言,越多越好。10x10 棋盘格是我会考虑的绝对最小值。我通常以 20x20 工作。" - 但你使用的是9x6 板?
-
这是真的。我的项目是确定距离约为 3 米的精度。使用较小的块变得更难检测,并且使用 10x10 在检测 180 度旋转时会出现错误。我还阅读了一些资源(其中一个在 stackoverflow 中并且找不到),说明没有必要拥有这么多图像。我发现我的重投影误差随着图像的增加而增加。拒绝高错误图像后,我剩下 20 张图像。
标签: matlab opencv computer-vision camera-calibration matlab-cvst