matlab 做相机标定后,想将第一张(任意一张都行)标定板角点所对应的像素坐标转换到世界坐标系下,标定板角点的像素坐标真值与世界坐标真值都非常容易获得,但是我通过内外参矩阵将像素坐标转换到世界坐标有很大的误差,如下
close all;
clear all;
clc;
load ('6mm_matlab.mat')
% 相机标定基本参数
M = cameraParams.IntrinsicMatrix';
R = cameraParams.RotationMatrices(:,:,1);
T = cameraParams.TranslationVectors(1,:)';
UV = cameraParams.ReprojectedPoints(:,:,1);
% 将标定板角点像素坐标转换成齐次
for i = 1:size(UV,1)
UV_H(i,:) = [UV(i,:),1];
end
% 将像素坐标系转换到像素坐标系,公式参考: https://blog.csdn.net/qq_43222384/article/details/101516807
leftMatrix = inv(R)*inv(M)*UV_H';
rightMatrix = inv(R)*T;
rightMatrix_H = repmat(rightMatrix(3),[1,size(UV,1)]);
temp_s = rightMatrix_H./leftMatrix(3,:);
N_rightMatrix = repmat(rightMatrix,1,size(UV,1));
CB_World = temp_s.*leftMatrix - N_rightMatrix;
像素坐标到世界坐标之间的转换可参考如下公式
已知像素坐标,世界坐标,内参矩阵 M,旋转矩阵 R,平移向量 T。
则有:
记,
解得
所以
Matlab 标定后的相机参数如下:
内参矩阵:,旋转矩阵:,
平移向量:
世界坐标系下的点到像素坐标系下的转化关系可表示为:
标定板的间距为10mm,随意带两个世界坐标系下的点(0,0)和(0,10)
算出来得结果分别为,
计算结果和真值的误差较大,在世界坐标系下的Y轴上的角点应该接近 0 实际上Y轴上的值逐渐增大,可以观察下面的计算结果
世界坐标系下的真值为:
通过上述公式计算得到的世界坐标结果:
我标定的重投影误差再0.04以内,其它各个参数也符合,为什么数据的误差会这么大呢?而且这个数据变化也有一定的规律,这是怎么回事呢?
相机标定图像
链接:百度网盘 请输入提取码
提取码:john文章来源:https://www.toymoban.com/news/detail-499641.html
已解决:matlab做相机标定,内参矩阵与旋转矩阵都需要做转置后才能使用文章来源地址https://www.toymoban.com/news/detail-499641.html
到了这里,关于MATLAB 相机标定中标定板角点像素坐标系到世界坐标系的转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!