2017-07-03 61 views
1

我的照相机具有不同的分辨率 1280 * 480 640 * 240 320 * 120C中的照相机具有不同的分辨率的++ opencv的校准

我已经使用Opencv3的算法,以将相机的分辨率为1280校准* 480,我得到了这个分辨率的相机矩阵(fx fy cx cy)和失真矩阵(k1 k2 p1 p2 k3)。

但现在我想用这些相机矩阵和失真矩阵,以将相机的320 * 120分辨率进行校准。我不知道如何将这两个分辨率为1280 * 480的矩阵应用到320 * 120的分辨率。 PS直接因为图像太小和OpenCV的算法无法找到棋盘我没有校准,320 * 120分辨率的摄像头。

我想知道如果我将分辨率1280 * 480更改为320 * 120,相机矩阵(fx fy cx cy)和失真矩阵(k1 k2 p1 p2 k3)将如何改变。

的OpenCV算法是以下之一: http://docs.opencv.org/3.0-beta/doc/tutorials/calib3d/camera_calibration/camera_calibration.html

+0

请您附上:1)1280x480的校准参数2)1280x480的未畸变图像3)320x120的同一场景的未平息图像。 –

+0

[这似乎相关(http://ksimek.github.io/2013/08/13/intrinsic/)(我只注意到他们甚至讨论在评论这个问题)。我没有完全证实这一点,但在我看来,它应该线性缩放,所以将fx,fy,cx和cy划分为4(因为每个维度现在是1/4的比例原本的)。 –

+0

这将需要一些更多的工作来写一个足够好的答案,但我的思路如下:假设相机箱的2x2和4x4,以获得较低的分辨率,视场保持不变,和(虚拟)像素变为大。 'cx'和'cy'是中心点的坐标 - 适用线性缩放。 | 'fx'和'fy'是以像素为单位的焦距 - 让我们坚持'fx',因为同样的原则适用于两者。与实际焦距的关系为Fx = fx *(W/w),其中W是以实际单位表示的传感器宽度,w是以像素为单位的传感器宽度。 ...(续) –

回答

0

你并不需要改变失真矩阵。至于相机矩阵(包含fx, fy, cx, cy的相机矩阵),您只需将它们除以4即可。一般的计算公式为:

fx' = (dimx'/dimx) * fx 
fy' = (dimy'/dimy) * fy 

fx'是你的新决议的价值,fx是你已经为你的原始分辨率值,dimx'是沿x轴的新决议,dimx是原来的一个。这同样适用于fy

cxcy的类比计算,因为所有这些值都在像素坐标表示。

作为每OpenCV docs关于相机矩阵:

如果从照相机的图像由一个因子按比例缩放,所有这些 参数应缩放(乘以/分,分别地)由 相同因子。

+0

感谢您的回答。我想知道当我改变分辨率时相机的矩阵是否会改变?这意味着fx,fy,cx和cy。等待你的回答。 – Meng

+0

@KjMag看来你误解了这个问题。他在谈论同一台相机,只是设置了不同的分辨率。这意味着所有的光学元件都保持不变,并且考虑到分辨率的比例,我认为相机可能会进行2x2和4x4分档。 |讨论相机矩阵时,教程提到“尽管失真系数是相同的,无论使用何种相机分辨率,这些都应该从校准分辨率和当前分辨率一起缩放。”恕我直言,这是OP很好奇的。 –

+0

@DanMašek谢谢。我讨论具有不同分辨率的相同相机。我不明白的是“虽然失真系数是相同的,无论使用的摄像机分辨率如何,这些都应该从校准的分辨率和当前的分辨率一起缩放。”我如何改变相机fx fy cx cy的矩阵和失真矩阵k1 k2 p1 p2 k3。 – Meng