[37] | 1 | % T = vgg_T_from_P(P) Trifocal tensor from 3 camera matrices.
|
---|
| 2 | %
|
---|
| 3 | % P ... cell (3), camera matrices
|
---|
| 4 | % T ... double (3,3,3)
|
---|
| 5 | %
|
---|
| 6 | % For 3 corresponding lines l1..l3 (each of size (1,3)) in cameras P1..P3 it is
|
---|
| 7 | % for i=1:3, l1(1,i) = l2*T(:,:,i)*l3'; end
|
---|
| 8 | % up to scale.
|
---|
| 9 | %
|
---|
| 10 | % T is obtained by with unique absolute scale. In detail, for any cameras P{1:3} and
|
---|
| 11 | % scene line L (4-by-4 Pluecker matrix, L+L'=0, vgg_contreps(L)*L=0), if
|
---|
| 12 | %
|
---|
| 13 | % for i=1:3, l{i} = vgg_contreps(P{i}*L*P{i}'); end
|
---|
| 14 | % T = vgg_T_from_P(P);
|
---|
| 15 | % for i=1:3, l1(1,i) = l{2}*T(:,:,i)*l{3}'; end
|
---|
| 16 | %
|
---|
| 17 | % then
|
---|
| 18 | %
|
---|
| 19 | % l1 == l{1}*(l{3}*e32) == -l{1}*(l{2}*e23)
|
---|
| 20 | %
|
---|
| 21 | % where e32 = P{3}*vgg_C_from_P(P{2}), e23 = P{2}*vgg_C_from_P(P{3}) are epipoles.
|
---|
| 22 |
|
---|
| 23 | function T = vgg_T_from_P(P)
|
---|
| 24 |
|
---|
| 25 | T(:,:,1) = P{2}*vgg_contreps(P{1}(2,:)'*P{1}(3,:)-P{1}(3,:)'*P{1}(2,:))*P{3}';
|
---|
| 26 | T(:,:,2) = P{2}*vgg_contreps(P{1}(3,:)'*P{1}(1,:)-P{1}(1,:)'*P{1}(3,:))*P{3}';
|
---|
| 27 | T(:,:,3) = P{2}*vgg_contreps(P{1}(1,:)'*P{1}(2,:)-P{1}(2,:)'*P{1}(1,:))*P{3}';
|
---|
| 28 |
|
---|
| 29 | return |
---|