Tôi đã có một bài tập về nhà trong đó tôi phải tính toán và vẽ một số điểm bằng cách sử dụng phép biến đổi theo phương pháp, nhưng tôi không chắc kết quả của mình là đúng, vì biểu đồ 3d sử dụng tọa độ Camera trông rất khác so với biểu đồ 2d sử dụng tọa độ hình ảnh . Bạn có thể giúp tôi hiểu những gì sai?
Đây là những gì được đưa ra: Máy ảnh ở điểm W T C = [ - 1 , 1 , 5 ] T , được chỉ định trong tọa độ thế giới (tính bằng mét). Chiếc máy ảnh hệ tọa độ có thể xoay quanh trục y của tham chiếu thế giới bởi θ = 160 o , vì vậy nó của ma trận xoay là w R c = [ c o s ( θ ) 0 s i n ( θ ) 0 1 0 - s i n (
Thông số máy ảnh là: , s x = s y = 0,01 m m / p x , o x = 320 p x , o y = 240 p x
Điểm mẫu (theo tọa độ thế giới):
Tôi phải tính toán và vẽ các điểm trong tọa độ camera và tọa độ hình ảnh, vì vậy tôi đã viết đoạn mã sau trong Octave:
%camera intrinsic parameters
f = 16
Sx = 0.01
Sy = 0.01
Ox = 320
Oy = 240
%given points, in world coordinate
wP1 = transpose([1, 1, 0.5])
wP2 = transpose([1, 1.5, 0.5])
wP3 = transpose([1.5, 1.5, 0.5])
wP4 = transpose([1.5, 1, 0.5])
% camera translation matrix
wTc = transpose([-1, 1, 5])
% rotation angle converted to rad
theta = 160 / 180 * pi
%camera rotation matrix
wRc = transpose([cos(theta), 0, sin(theta); 0, 1, 0; -sin(theta), 0, cos(theta)])
%transform the points to homogeneous coordinates
wP1h = [wP1; 1]
wP2h = [wP2; 1]
wP3h = [wP3; 1]
wP4h = [wP4; 1]
%separate each line of the rotation matrix
R1 = transpose(wRc(1 , :))
R2 = transpose(wRc(2 , :))
R3 = transpose(wRc(3 , :))
%generate the extrinsic parameters matrix
Mext = [wRc, [-transpose(R1) * wTc; -transpose(R2) * wTc; -transpose(R3) * wTc]]
%intrinsic parameters matrix
Mint = [-f/Sx, 0, Ox; 0, -f/Sy, Oy; 0, 0, 1]
% calculate coordinates in camera coordinates
cP1 = wRc * (wP1 - wTc)
cP2 = wRc * (wP2 - wTc)
cP3 = wRc * (wP3 - wTc)
cP4 = wRc * (wP4 - wTc)
% put coordinates in a list for plotting
x = [cP1(1), cP2(1), cP3(1), cP4(1), cP1(1)]
y = [cP1(2), cP2(2), cP3(2), cP4(2), cP1(2)]
z = [cP1(3), cP2(3), cP3(3), cP4(3), cP1(3)]
%plot the points in 3D using camera coordinates
plot3(x, y, z, "o-r")
pause()
% calculate the points in image coordinates
iP1 = Mint * (Mext * wP1h)
iP2 = Mint * (Mext * wP2h)
iP3 = Mint * (Mext * wP3h)
iP4 = Mint * (Mext * wP4h)
%generate a list of points for plotting
x = [iP1(1) / iP1(3), iP2(1) / iP2(3), iP3(1) / iP3(3), iP4(1) / iP4(3), iP1(1) / iP1(3)]
y = [iP1(2) / iP1(3), iP2(2) / iP2(3), iP3(2) / iP3(3), iP4(2) / iP4(3), iP1(2) / iP1(3)]
plot(x, y, "o-r")
pause()
Và đây là những âm mưu tôi có được từ kịch bản: Tôi đã hy vọng chúng có phần giống nhau, nhưng chúng không giống nhau.
Âm mưu trong tọa độ camera
Vẽ trong tọa độ hình ảnh