Pespective dönüşümü kullanarak bazı noktaları hesaplamak ve çizmek zorunda olduğum bir ödevim var, ancak kamera koordinatlarını kullanan 3d arsa görüntü koordinatlarını kullanarak 2d arsadan çok farklı göründüğü için sonuçlarımın doğru olduğundan emin değilim. . Neyin yanlış olduğunu anlamama yardım eder misin?
Bu verilen: Kamera dünya koordinatlarında (metre cinsinden) belirtilen W T C = [ - 1 , 1 , 5 ] T noktasında . Kamera koordinat sistemi Y çevresinde döndürülür dünya referans eksenine θ = 160 o 's rotasyon matrisi yani, ağırlık R c = [ c o s ( θ ) 0 s i n ( θ ) 0 1 0 - s i n (
Kamera parametresi: , , ,
Örnek noktalar (dünya koordinatlarında):
Kamera koordinatlarındaki ve görüntü koordinatlarındaki noktaları hesaplamalı ve çizmeliyim, bu yüzden aşağıdaki kodu Octave dilinde yazdım:
%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()
Ve bunlar senaryodan aldığım grafikler: Biraz daha benzer olmalarını bekliyordum ama öyle görünmüyorlardı.
Kamera koordinatlarında arsa
Görüntü koordinatlarında arsa