我正在研究與攝像機標定有關的問題。在下圖中,我們考慮一個世界座標系,其中X軸向左,Y軸向右,Z軸向上。我們選擇15個點(x,y,z)均勻分佈在3個平面上。網格線之間的距離是1英寸。我們還獲得了15個像素(u,v)的MATLAB座標。其目的是使用均勻線性最小二乘法獲得3×4相機矩陣(M),然後使用M將這些世界點(x,y,z)投影到圖像(u',v')上。我已經編寫了代碼來完成此操作但是我得到的座標(u',v')與實際座標(u,v)相比似乎非常小。 RMS誤差太大,投影點甚至不會映射到實際點附近的任何圖像上。是否有任何縮放,我需要做的將其轉換爲MATLAB座標?我也包括我的代碼,因爲我對MATLAB比較陌生,所以寫得不好。 攝像機標定:3D到2D點映射
P=[];% 2nx12 matrix - 30x12 matrix
for i=1:15 %compute P
world_row = world_coords(i,:); % 3d homogeneous coordinates (x,y,z,1)
zeroelem = repelem(0,4);
image_coord = image_coords(i,:);
img_u = image_coord(1);
prod = -img_u*world_row;
row1 = [world_row,zeroelem,prod];
zeroelem = repelem(0,3);
img_v = image_coord(2);
prod = -img_v*world_row;
row2 = [0,world_row,zeroelem,prod];
P=[P;row1;row2];
end
var1 = P'*P;
[V,D] = eig(var1');//compute eigen vector corresponding to least eigen value
m = V(:,1); //unit vector of norm 1
M = reshape(m,3,4); //camera matrix of 3x4 size
%get projected points
proj = M*world_coords';
U = proj (1,:);
V = proj (2,:);
W = proj (3,:);
for i=1:15
U(i) = U(i)/W(i);
V(i) = V(i)/W(i);
end
final = [U;V];//(u',v')
我也包括我選擇了15個點的圖像。取P1(u,v)=(286,260)和P1(x,y,z)=(4,0,3)。我爲此獲得的(u',v')值很低。任何人都可以指出我做錯了什麼?