matlab 做相機(jī)標(biāo)定后,想將第一張(任意一張都行)標(biāo)定板角點(diǎn)所對應(yīng)的像素坐標(biāo)轉(zhuǎn)換到世界坐標(biāo)系下,標(biāo)定板角點(diǎn)的像素坐標(biāo)真值與世界坐標(biāo)真值都非常容易獲得,但是我通過內(nèi)外參矩陣將像素坐標(biāo)轉(zhuǎn)換到世界坐標(biāo)有很大的誤差,如下
close all;
clear all;
clc;
load ('6mm_matlab.mat')
% 相機(jī)標(biāo)定基本參數(shù)
M = cameraParams.IntrinsicMatrix';
R = cameraParams.RotationMatrices(:,:,1);
T = cameraParams.TranslationVectors(1,:)';
UV = cameraParams.ReprojectedPoints(:,:,1);
% 將標(biāo)定板角點(diǎn)像素坐標(biāo)轉(zhuǎn)換成齊次
for i = 1:size(UV,1)
UV_H(i,:) = [UV(i,:),1];
end
% 將像素坐標(biāo)系轉(zhuǎn)換到像素坐標(biāo)系,公式參考: 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;
像素坐標(biāo)到世界坐標(biāo)之間的轉(zhuǎn)換可參考如下公式
已知像素坐標(biāo),世界坐標(biāo),內(nèi)參矩陣 M,旋轉(zhuǎn)矩陣 R,平移向量 T。
則有:
記,
解得
所以
Matlab 標(biāo)定后的相機(jī)參數(shù)如下:
內(nèi)參矩陣:,旋轉(zhuǎn)矩陣:,
平移向量:
世界坐標(biāo)系下的點(diǎn)到像素坐標(biāo)系下的轉(zhuǎn)化關(guān)系可表示為:
標(biāo)定板的間距為10mm,隨意帶兩個世界坐標(biāo)系下的點(diǎn)(0,0)和(0,10)
算出來得結(jié)果分別為,
計算結(jié)果和真值的誤差較大,在世界坐標(biāo)系下的Y軸上的角點(diǎn)應(yīng)該接近 0 實(shí)際上Y軸上的值逐漸增大,可以觀察下面的計算結(jié)果
世界坐標(biāo)系下的真值為:
通過上述公式計算得到的世界坐標(biāo)結(jié)果:
我標(biāo)定的重投影誤差再0.04以內(nèi),其它各個參數(shù)也符合,為什么數(shù)據(jù)的誤差會這么大呢?而且這個數(shù)據(jù)變化也有一定的規(guī)律,這是怎么回事呢?
相機(jī)標(biāo)定圖像
鏈接:百度網(wǎng)盤 請輸入提取碼
提取碼:john文章來源:http://www.zghlxwxcb.cn/news/detail-499641.html
已解決:matlab做相機(jī)標(biāo)定,內(nèi)參矩陣與旋轉(zhuǎn)矩陣都需要做轉(zhuǎn)置后才能使用文章來源地址http://www.zghlxwxcb.cn/news/detail-499641.html
到了這里,關(guān)于MATLAB 相機(jī)標(biāo)定中標(biāo)定板角點(diǎn)像素坐標(biāo)系到世界坐標(biāo)系的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!