【发布时间】:2020-11-10 15:00:36
【问题描述】:
我有一个鱼眼相机,我已经使用 OpenCV 提供的校准功能正确校准了它。因此,我得到了一个 3x3 Intrinsic Camera Matrix K 和带有失真参数的向量。
使用最后 2 个,我可以使用函数 estimateNewCameraMatrixForUndistortRectify 和 initUndistortRectifyMap 校正输入图像,以获得 2 个转换映射,我稍后将其用作函数 remap 的输入。作为输出,我得到了一个未失真的图像,其中保持了平行线。
我的问题基本上是……
- 我可以继续使用从校准中得到的 K 内在矩阵和未失真的图像吗?
- 由于不失真,固有矩阵 K 是否发生了某种变化?如果这是真的,那么我该如何计算新的 K?
提前致谢。
【问题讨论】:
-
如果你同时计算内在函数和失真系数,你可以保持 K 不变。如果您独立执行这两个步骤,您应该使用失真图像创建新的内在函数(并在校准期间修复失真系数)。如果您想更改内在函数,例如为了获得更大的图像(有时不失真裁剪掉图像部分),您可以在 initUndistortRectifyMap 期间指定新的内在函数,但是您喜欢。
-
@Micka 我使用文件 /opencv/samples/cpp/tutorial_code/calib3d/camera_calibration.cpp 进行了校准。正如你指出的那样,我同时得到了内在和扭曲。可以将来自estimateNewCameraMatrixForUndistortRectify 的新内在矩阵(按照您的建议计算以获得更大的图像)用于单应性计算吗?还是只对 initUndistortRectifyMap 操作有效?
-
它应该对重新映射(未失真)的图像有效
标签: opencv computer-vision camera-calibration