Saya punya pekerjaan rumah di mana saya harus menghitung dan memplot beberapa poin menggunakan transformasi pespektif, tetapi saya tidak yakin hasil saya benar, karena plot 3d menggunakan koordinat Kamera terlihat sangat berbeda dari plot 2d menggunakan koordinat gambar . Bisakah Anda membantu saya memahami apa yang salah?
Inilah yang diberikan: Kamera berada pada titik W T C = [ - 1 , 1 , 5 ] T , ditentukan dalam koordinat dunia (dalam meter). Sistem koordinat kamera diputar di sekitar sumbu Y dari referensi dunia oleh , sehingga matriks rotasinya adalahw R c = [ c o s ( θ ) 0 s i n ( θ ) 0 1 0 - s i n ( θ ) 0 c o s ( θ ) ]
Parameter kamera adalah: , s_x = s_y = 0,01 mm / px , o_x = 320 px , o_y = 240pxs x = s y = 0,01 m m / p x o x = 320 p x o y = 240 p x
Poin sampel (dalam koordinat dunia):
Saya harus menghitung dan memplot poin dalam koordinat kamera dan dalam koordinat gambar, jadi saya menulis kode berikut dalam Oktaf:
%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()
Dan ini adalah plot yang saya dapatkan dari skrip: Saya berharap mereka agak mirip, tetapi mereka tidak terlihat begitu.
Plot dalam koordinat kamera
Plot dalam koordinat gambar