matlab内外参标定
站的位置(角度、距离)没有关系,标定板不垂直地面没有关系,旋转角度没有关系
MATLAB标定的R要转置,K也要转置
内参矩阵:3*3
外参矩阵:4*4
世界坐标:4*1
像素坐标:3*1
选的世界坐标:(0,0,0),(36,0,0) 单位是mm,计算的时候数值就是36 标定板小方格边长36mm
但凡标定板上的点,其世界坐标的z都是0
目标是:世界坐标和内外参===>像素坐标,验证这样推出的像素坐标和直接获取的像素坐标是否一致,我选择第二张图片验证
s呢,内参*外参*世界坐标=s*像素坐标
,像素坐标最后一个维度需要是1,而内参*外参*世界坐标得到向量的最后一个维度
不一定是1,所以要将这个结果化为1,这个化1的过程会得到s,也就是说s并不是测量出来的
先运行vs,按q得到25张图,然后matlab命令行输入cameraCalibrator标定,获得内外参,误差<0.5说明结果可信:
记录内外参(内参矩阵、旋转矩阵、平移向量):
然后验证公式的脚本,以及读取像素坐标的脚本为:
intrinsic_mat = [687.9080,0.6075,337.7433,0;0,680.8743,243.4195,0;0,0,1,0]
extrinsic_mat = [0.9751,-0.2042,0.0870,-125.3175;0.1936,0.9741,0.1167,-82.5560;-0.1086,-0.0969,0.9893,734.3342;0,0,0,1]
world_coord=[0;0;0;1]
homography_mat=intrinsic_mat*extrinsic_mat*world_coord
img= imread('2.jpg');
points = detectCheckerboardPoints(img);
num = size(points);
imshow(img);hold on;
for i=1:num
plot(points(i,1),points(i,2),'.','LineWidth',2);hold on;
end
脚本在f:/matlab,选择验证的图片也在这个文件夹
读取的结果保存在points
参考文献:
https://blog.csdn.net/qq_38429958/article/details/124125912
https://blog.csdn.net/Super_LHT/article/details/128380289
这个人有较多错误,没有转置K和R
https://blog.csdn.net/ftf15111099814/article/details/113920448
https://blog.csdn.net/swust5120171204/article/details/114839345#:~:text=matlab自带的Camera Calibrator只能对象图片进行标定,但是却不显示标定板各个角点的坐标。 通过查找源码可以找到其获取坐标的函数。,即detectCheckerboardPoints () 函数