我们如何确认固有的矩阵是正确的
How can we confirm that the intrinsic matrix is correct?
i使用Aruco标记执行了相机校准。由于固有矩阵是K = [fx 0 cx; 0 fy cy; 0 0 1]
,其中fx = image_width/2 and fy = image_height/2
。我进行了两次校准,结果是:
案例1
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 1.7837087835808685e+004, 0., 9.4648597205501767e+002, 0.,
1.7846680517567835e+004, 6.2655678552312384e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ 1.3214125616841757e-001, 1.3720591379476604e+001,
4.1379706976846960e-003, 3.2630160993931338e-002,
7.2446581087476508e-002 ]
案例2
camera_matrix: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 3.9925887362481939e+004, 0., 9.6015637557091463e+002, 0.,
3.5268399261164773e+003, 5.9886507612381956e+002, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ 4.4338539084399781e-001, 4.9217843346948866e+000,
5.8004377137432547e-002, 1.1762688789809046e-004,
-5.4097967557812456e+002 ]
图像的分辨率为1920*1200,因此cx
和cy
应为960和600。在第二种情况下,cx
和cy
是预期的。重投影误差很大。在其他情况下,cx
和cy
不匹配,但重新投影错误很低(小于1)。
所以现在可以考虑哪些结果,最好如何定义fx
和fy
?
您是正确的,cx和cy应该接近960和600。从这个角度来看,案例2似乎更有可能,但是案例1肯定是可行的,中心点(946,626))。
更多的眉毛升起是获得的焦距参数。对于焦距对(17837,17846)和(39925,3526)都不是合理的。根据经验,FX参数应与像素宽度(在这种情况下为1920年)相匹配到2倍以内(例如,iPhone 5S具有FX〜= 0.8*PixelWidth)。FY应将FX匹配到1.2倍左右。对于案例1,FX的宽度为10倍,对于情况2 FX,FY不匹配为10倍。
我建议尝试几个校准工具箱,并在其中任何两个之间找到共识(例如要求多个机械师看您的汽车)。我建议Jean-Yves Bouguet的校准工具箱,它是OpenCV方法的先驱。
如果您仍然可以访问相机,我会说尝试捕获更多图像并多次重复校准过程。
@willem在使用Jean-Yves的答案中提到的工具箱中提到,您将可视化木板的转角检测,3D位置,并帮助您丢弃嘈杂的图像。但是,Jean-Yves的工具箱仅在棋盘上工作,并且需要手动输入具有正方形的ROI。
如果您觉得Aruco董事会没有给出很高的精度,则可以在OpenCV中尝试Charuco板。
我想说的是mm中的焦距很难与像素焦距有关,因为要这样做,您需要相机的成像器的大小。通常不可用。
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 确认二进制文件中仅存在 1 和 0
- 确认在TWS c ++ API中至关重要吗?
- 确认了解指向函数的指针
- limits.h中未确认的值
- 迭代器 for 循环不会确认循环完成条件
- Q维扎德:后退按钮上的确认
- ESP8266 I2C 从站不确认数据
- 邮件收件人:确认状态
- 可视C++打印指针无法确认显示基础
- 我无法从文件中读取以确认用户名
- QML:在关闭应用程序之前询问确认
- C++确认通知
- 在向量中使用不带复制且没有 noexcept 移动构造函数的对象.实际损坏的内容以及我如何确认它
- 我们如何确认固有的矩阵是正确的
- 具有AX_BOOST_BASE的自动确认增强检测
- 确认从类构造函数中的文本文件初始化变量
- 比较从 Arduino 中的串行数据接收的确认字符串
- 已确认的已注册com对象cocreateinstance返回regdb_e_classnotreg
- 如何使“确认选择”函数从“主要”取消,如果它是假的