使用C++和Opencv进行不同分辨率摄像头的校准

4

我的相机有不同的分辨率: 1280*480 640*240 320*120

我使用了OpenCV3的算法对分辨率为1280*480的相机进行校准,并得到了该分辨率下的相机矩阵(fx fy cx cy)和畸变矩阵(k1 k2 p1 p2 k3)。

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

我想知道如果我将分辨率从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


请提供以下内容:1)1280x480的校准参数;2)1280x480的无畸变图像;3)同一场景下320x120的无畸变图像。 - Dan Mašek
这似乎很相关(我刚刚注意到他们甚至在评论中讨论了这个问题)。我还没有完全验证,但我认为它应该是线性的,因此将fxfycxcy除以4(因为每个维度现在都是原始尺寸的1/4)。 - Dan Mašek
需要更多的工作才能写出足够好的答案,但我的思路如下:假设相机将2x2和4x4分组以获得较低的分辨率,视场保持不变,(虚拟)像素变大。cxcy是中心点的坐标--线性缩放适用。| fxfy是以像素为单位的焦距--让我们坚持使用fx,因为相同的原理适用于两者。与实际焦距的关系是Fx = fx * (W / w),其中W是传感器宽度(实际单位),w是传感器宽度(像素)。...(续) - Dan Mašek
在我们的情况下,真实的焦距Fx保持不变(光学没有变化),真实的传感器宽度W也保持不变。因此,fxw成正比例关系(例如,像素宽度减少1/4,fx也减少1/4)。 - Dan Mašek
对于1280480相机矩阵(33) 4.1609688662292331e+02; 0.; 2.8905731584063523e+02; 0.; 4.1454707445301574e+02; 2.3874261375252598e+02; 0.; 0.; 1.; 畸变系数(5*1) -3.6288473454524128e-01; 1.5078686499416877e-01; 5.7904052666320714e-04; 1.3434936135297517e-05; -3.1521081637626687e-02; - Meng
显示剩余2条评论
1个回答

6

您无需更改畸变矩阵。相机矩阵(包含fx, fy, cx, cy的矩阵),在您的情况下,只需要将它们除以4即可。通用公式如下:

fx' = (dimx' / dimx) * fx 
fy' = (dimy' / dimy) * fy
fx'是新分辨率的值,fx是原始分辨率的值,dimx'是沿x轴的新分辨率,dimx是原始分辨率。 fy同样适用。 cxcy的计算方式类似,因为所有这些值都以像素坐标表示。
根据OpenCV文档关于相机矩阵的说明:

如果相机捕获的图像按比例缩放,则所有这些参数应按相同的比例缩放(分别乘以/除以)。


谢谢您的回答。我想知道当我改变分辨率时,相机矩阵是否会改变?这意味着fx、fy、cx和cy会改变吗?期待您的回复。 - Meng
@KjMag 看起来你误读了问题。他说的是同一台相机,只是设置了不同的分辨率。这意味着所有光学元件都保持不变,并且考虑到分辨率的比例,我认为相机可能会进行2x2和4x4的合并。| 在讨论相机矩阵时,教程提到:“虽然失真系数与使用的相机分辨率无关,但应该随着当前分辨率从校准分辨率进行缩放。”在我看来,这就是OP感到好奇的地方。 - Dan Mašek
@Dan Mašek 谢谢。我在谈论同一相机但不同分辨率的情况。我不明白的是,“虽然失真系数与所使用的相机分辨率无关,但这些应随校准分辨率一起缩放。” 我如何更改相机fx fy cx cy和失真k1 k2 p1 p2 k3的矩阵。 - Meng
没错,显然我误读了问题。我会相应地更新答案。 - KjMag
你知道如何解决这个问题吗?https://stackoverflow.com/questions/45215145/in-stereo-calibration-how-the-extrinsic-matrix-changes-if-i-change-the-resolution - Meng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接