Search
This homework is split into two weeks.
[N1, N2, N3] = p3p_distances( d12, d23, d31, c12, c23, c31 )
N1, N2, N3 = hw04a.p3p_distances( d12, d23, d31, c12, c23, c31 )
d12
d23
d31
c12
c23
c31
Create the function p3p_distances for computing distances of three spatial points from a center of calibrated camera. The function must return the distances η_i in N1, N2, N3 of the three points. Implement only the case 'A' of the computation. If there are more solutions, the returned variables are row vectors (matlab) or lists (python). If there is no solution by the case 'A', return empty vector/list ([]]). For constructing the fourth order polynomial, there is the p3p_polynom function in the tools repository, that can be used in your code.
p3p_distances
N1
N2
N3
[]
p3p_polynom
The function p3p_distances should return only such solutions, that are consistent with input arguments, i.e., that pass verification using cosine law (see below). Use (relative) threshold 1e-4.
1e-4
e = p3p_dverify( N1, N2, N3, d12, d23, d31, c12, c23, c31 )
e = hw04a.p3p_dverify( N1, N2, N3, d12, d23, d31, c12, c23, c31 )
Create the function p3p_dverify for verification of computed camera-to-point distances using the cosine law. Use this function in p3p_distances. The function returns vector of three errors, one for each equation. Each computed error should be distance (not squared), relative to particular $d_{jk}$, i.e.
p3p_dverify
$e(1) = \frac{\sqrt{\eta_1^2 + \eta_2^2 - 2\eta_1\eta_2c_{12}} - d_{12}}{d_{12}}$
[R C] = p3p_RC( N, u, X, K )
R, C = hw03b.p3p_RC( N, u, X, K )
Create the function p3p_RC for computing calibrated camera centre C and orientation R from three scene-to-image correspondences (X,u), using already computed distances N = [η_1, η_2, η_3].
p3p_RC
C
R
X
u
N = [η_1, η_2, η_3]
The function takes one configuration of η_i and returns a single R and C. Note that R must be ortho-normal with determinant equal to +1.
C=[1,2,-3]T
f=1
K = R = I
X1=[0,0,0]T
X2=[1,0,0]T
X3=[0,1,0]T
P
X1=[1,0,0]T
X2=[0,2,0]T
X3=[0,0,3]T
c12 = 0.9037378393
c23 = 0.8269612542
c31 = 0.9090648231
[4.984934779184205, 4.123105628753765]
[5.172995343542000, 5.099019520925607]
[2.147077467616821, 6.403124241485243]
K
04_distances.pdf
Note: The matrix Q obtained in HW-02 is neither related to this task nor is used in any way.
Q
C = [1,2,-3]T
X1 = [0, 0, 0]T
X2 = [1, 0, 0]T
X3 = [0, 1, 0]T
η
point_sel
[i1, i2, i3]
04_p3p.mat
daliborka_01
x
04_RC_projections_errors.pdf.
04_RC_maxerr.pdf
04_RC_pointerr.pdf
04_scene.pdf
save( '04_p3p.mat', 'R', 'C', 'point_sel' );
sio.savemat( '04_p3p.mat', { 'R':R, 'C':C,
'point_sel': point_sel } )
Note: Use your p3p_distances and plot_csystem from the previous HW.
plot_csystem
Note: The matrix P obtained in HW02 is neither related to this task nor is not used in any way.
Upload two archives containing the following files.
The first part (04a):
p3p_distances.m
p3p_dverify.m
hw04a.m
hw04a.py
The second part (04b):
p3p_RC.m
04_RC_projections_errors.pdf
hw04b.m
hw04b.py
The input entry point scripts hw04a, hw04b should make all required figures, output files and prints without manual intervention.
hw04a
hw04b
Note: The required files must be in the root directory of the archive.