Bundle Adjustment - University of Minnesotahspark/CSci5980/Lec17_Supp...v Bob Alice X 1 P bob P...

Post on 09-Nov-2020

1 views 0 download

Transcript of Bundle Adjustment - University of Minnesotahspark/CSci5980/Lec17_Supp...v Bob Alice X 1 P bob P...

Bundle Adjustment

v

Bob Alice

X

bobP aliceP

u

pp

X

1

2

geom

2

2

3

2

3

u

P X P X

P X X

u

P

E

x y

Black: given variables Red: unknowns

Camera & Point Jacobian

v

Bob Alice

X

bobP aliceP

u

pp

X

1

2

geom

2

2

3

2

3

u

P X P X

P X X

u

P

E

x y

Black: given variables Red: unknowns

( )

p,X

u

v

w

f w

Camera & Point Jacobian

v

Bob Alice

X

bobP aliceP

u

pp

X

1

2

geom

2

2

3

2

3

u

P X P X

P X X

u

P

E

x y

Black: given variables Red: unknowns

( )

p,X

u

v

w

f w 2

2

( )

p pp,X

p p

p p

u ww u

u

w w

v u wv v

w

w

f

Camera & Point Jacobian

v

Bob Alice

X

bobP aliceP

u

pp

X

1

2

geom

2

2

3

2

3

u

P X P X

P X X

u

P

E

x y

Black: given variables Red: unknowns

( )

p,X

u

v

w

f w 2

2

( )

p pp,X

p p

p p

u ww u

u

w w

v u wv v

w

w

f

2

2

( )

X Xp,X

X X

X X

u ww u

u

w w

v u wv v

ww

f

Camera & Point Jacobian

Bob

1X

bobP

u

p

X

Black: given variables Red: unknowns

Camera & Point Jacobian ( ) ( )

p X

p ,X p ,XJ J J

p Xj i j i

ij ij ij

j i

f f

v

Bob Alice

1X

bobP aliceP

u

pp

X

Black: given variables Red: unknowns

Camera & Point Jacobian ( ) ( )

p X

p ,X p ,XJ J J

p Xj i j i

ij ij ij

j i

f f

J1,bobpJ 2 70 1,bobXJ

1,aliceXJ1,alicepJ2 70

v

Bob Alice

1X

bobP aliceP

u

pp

X

Black: given variables Red: unknowns

Camera & Point Jacobian ( ) ( )

p X

p ,X p ,XJ J J

p Xj i j i

ij ij ij

j i

f f

J1,bobpJ 2 70 1,bobXJ

1,aliceXJ1,alicepJ2 70

2X

2,bobpJ 2 70 2,bobXJ

2,aliceXJ2,alicepJ2 70

2 30

2 30

2 30

2 30

J =

Cam 1 Pt 1 Pt 4

# of unknowns: 3x7+4x3 # of projections: 3x4

Cam 2 Cam 3 Pt 2 Pt 3

Pt 1

Pt 2

Pt 3

Pt 4

Camera 1

Camera 2 Camera 3

J =

Cam 1 Pt 1 Pt 4

# of unknowns: 3x7+4x3 # of projections: 9 (not all points are visible from cameras)

Cam 2 Cam 3 Pt 2 Pt 3

Pt 1

Pt 2

Pt 3

Pt 4

Camera 1

Camera 2 Camera 3

J =

J = pJXJ

Camera 3D point

p XJ J J

J J =T

p XJ J JT T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

p XJ J JT T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

p XJ J JT T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

T T T

T T T- ( )

p p p X p p

X p X X X X

J J J J J epb X

XJ J J J J ef

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

T T

T T

p p p X p

X p X X X

J J I J J ep

XJ J J J I eor

T

p

X

eA B p

B D X eor

T T T

T T T- ( )

p p p X p p

X p X X X X

J J J J J epb X

XJ J J J J ef

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

or

or

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T T T

T T T- ( )

p p p X p p

X p X X X X

J J J J J epb X

XJ J J J J ef

T T

T T

p p p X p

X p X X X

J J I J J ep

XJ J J J I e

T

p

X

eA B p

B D X e

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T

p

X

eA B p

B D X e

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T

p

X

eA B p

B D X e

-1 -1

T

- -

p

X

eA B pI BD I BD

B D X0 I 0 I e

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T

p

X

eA B p

B D X e

-1 -1

T

- -

p

X

eA B pI BD I BD

B D X0 I 0 I e

-1-1 T

T

--

p X

X

e BD epA BD B 0

XB D e

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

-1 T-A BD BNote: is Schur complement of D

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T

p

X

eA B p

B D X e

-1 -1

T

- -

p

X

eA B pI BD I BD

B D X0 I 0 I e

-1-1 T

T

--

p X

X

e BD epA BD B 0

XB D e

-1-1 T -1

-1 T

- -

-

p X

X

p A BD B e BD e

X D e B p

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

-1 T-A BD BNote: is Schur complement of D

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

Small size matrix

T

p

X

eA B p

B D X e

-1 -1

T

- -

p

X

eA B pI BD I BD

B D X0 I 0 I e

-1-1 T -1

-1 T

- -

-

p X

X

p A BD B e BD e

X D e B p

-1-1 T

T

--

p X

X

e BD epA BD B 0

XB D e

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

-1

1

-1

-1

d

D

dM

d = d I

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

T

T- ( )

p p

X X

J eb X

J ef

-1

1

-1

-1

d

D

dM

d = d I

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

T

T- ( )

p p

X X

J eb X

J ef

T T

T T T

p p p X

X p X X

J J I J JA B

B D J J J J I

-1

1

-1

-1

d

D

dM

d = d I

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

T

T- ( )

p p

X X

J eb X

J ef

-1-1 T -1

-1 T

- -

-

p X

X

p A BD B e BD e

X D e B p

T T

T T T

p p p X

X p X X

J J I J JA B

B D J J J J I

-1

1

-1

-1

d

D

dM

d = d I

1D Camera Bundle Adjustment

Camera pose

2D points

nPoints = 5; nCameras = 3; X = rand(nPoints, 2) + 2; c = rand(nCameras,2); for i = 1 : nCameras m = X-ones(nPoints,1)*c(i,:); theta = atan2(m(:,2), m(:,1)); theta = mean(theta); C(i).c = c(i,:)'; theta = theta; C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; u = C(i).R*[eye(2) -C(i).c] * [X'; ones(1,nPoints)]; C(i).m = u(1,:)./u(2,:); C(i).c = c(i,:)'+0.3*randn(2,1); theta = theta + 0.3*randn(1,1); C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end X = X + 0.3*randn(size(X)); [C X] = BA(C, X);

BundleAdjustment1D.m

c

X

Data generation

1D Camera Bundle Adjustment

Camera pose

2D points

nPoints = 5; nCameras = 3; X = rand(nPoints, 2) + 2; c = rand(nCameras,2); for i = 1 : nCameras m = X-ones(nPoints,1)*c(i,:); theta = atan2(m(:,2), m(:,1)); theta = mean(theta); C(i).c = c(i,:)'; theta = theta; C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; u = C(i).R*[eye(2) -C(i).c] * [X'; ones(1,nPoints)]; C(i).m = u(1,:)./u(2,:); C(i).c = c(i,:)'+0.3*randn(2,1); theta = theta + 0.3*randn(1,1); C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end X = X + 0.3*randn(size(X)); [C X] = BA(C, X);

BundleAdjustment1D.m

Data generation

Ground truth projection

c

X

1D Camera Bundle Adjustment

Camera pose

2D points

nPoints = 5; nCameras = 3; X = rand(nPoints, 2) + 2; c = rand(nCameras,2); for i = 1 : nCameras m = X-ones(nPoints,1)*c(i,:); theta = atan2(m(:,2), m(:,1)); theta = mean(theta); C(i).c = c(i,:)'; theta = theta; C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; u = C(i).R*[eye(2) -C(i).c] * [X'; ones(1,nPoints)]; C(i).m = u(1,:)./u(2,:); C(i).c = c(i,:)'+0.3*randn(2,1); theta = theta + 0.3*randn(1,1); C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end X = X + 0.3*randn(size(X)); [C X] = BA(C, X);

BundleAdjustment1D.m

Data generation

Ground truth projection

c

X

Add noise

1D Camera Bundle Adjustment

Camera pose

2D points

nPoints = 5; nCameras = 3; X = rand(nPoints, 2) + 2; c = rand(nCameras,2); for i = 1 : nCameras m = X-ones(nPoints,1)*c(i,:); theta = atan2(m(:,2), m(:,1)); theta = mean(theta); C(i).c = c(i,:)'; theta = theta; C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; u = C(i).R*[eye(2) -C(i).c] * [X'; ones(1,nPoints)]; C(i).m = u(1,:)./u(2,:); C(i).c = c(i,:)'+0.3*randn(2,1); theta = theta + 0.3*randn(1,1); C(i).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end X = X + 0.3*randn(size(X)); [C X] = BA(C, X);

BundleAdjustment1D.m

Data generation

Ground truth projection

c

X

Add noise

1D bundle adjustment

1D Camera Bundle Adjustment

Camera pose

2D points

function [C X] = BA(C, X) lambda = 0.5; nIters = 100; xp = []; for i = 1 : length(C) theta=atan2(C(i).R(2,2), C(i).R(2,1)); xp = [xp; C(i).c; theta]; end xx = []; for i = 1 : size(X,1) xx = [xx; X(i,:)']; end

c

X

BundleAdjustment1D.m

for j = 1 : nIters Jp = []; Jx = []; D_inv = []; err = []; for iPoint = 1 : size(X,1) X1 = xx(2*(iPoint-1)+1:2*iPoint); d = zeros(2,2); for iC = 1 : length(C) c = xp(3*(iC-1)+1:3*(iC-1)+2); theta = xp(3*(iC-1)+3); R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; df_dc = JacobianC1D(R, c, X1); df_dR = JacobianR1D(R, c, X1)*JacobianQ1D(theta); df_dx = JacobianX1D(R, c, X1); j1 = zeros(1,3*length(C)); j1(:,3*(iC-1)+1:3*iC) = [df_dc df_dR]; j2 = zeros(1,2*size(X,1)); j2(:,2*(iPoint-1)+1:2*iPoint) = df_dx; Jp = [Jp; j1]; Jx = [Jx; j2]; d = d + df_dx'*df_dx; u = R * [eye(2) -c] * [X1;1]; u = u/u(2); u1 = C(iC).m; e = [u1(iPoint) - u(1)]; err = [err; e]; end d = d + lambda*eye(2); D_inv = blkdiag(D_inv, inv(d)); end ep = Jp' * err; ex = Jx' * err; A = Jp'*Jp + lambda*eye(3*length(C)); B = Jp'*Jx; delta_p = inv(A-B*D_inv*B') * (ep-B*D_inv*ex); delta_x = D_inv * (ex-B'*delta_p); xp = xp + delta_p; xx = xx + delta_x; end

BundleAdjustment1D.m

for iC = 1 : length(C) C(iC).c = xp(3*(iC-1)+1:3*(iC-1)+2); theta = xp(3*(iC-1)+3); C(iC).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end for iX = 1 : size(X,1) X(iX,:) = xx(2*(iX-1)+1:2*iX); end

BundleAdjustment1D.m

Model update

for iC = 1 : length(C) C(iC).c = xp(3*(iC-1)+1:3*(iC-1)+2); theta = xp(3*(iC-1)+3); C(iC).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end for iX = 1 : size(X,1) X(iX,:) = xx(2*(iX-1)+1:2*iX); end

BundleAdjustment1D.m

Model update

mean_delta_X = 0.0265 mean_delta_p = 0.2648

Why camera and point error do not converge to zero while reprojection error converges?

for iC = 1 : length(C) C(iC).c = xp(3*(iC-1)+1:3*(iC-1)+2); theta = xp(3*(iC-1)+3); C(iC).R = [sin(theta) -cos(theta); cos(theta) sin(theta)]; end for iX = 1 : size(X,1) X(iX,:) = xx(2*(iX-1)+1:2*iX); end

BundleAdjustment1D.m

Model update

mean_delta_X = 0.0265 mean_delta_p = 0.2648

Why camera and point error do not converge to zero while reprojection error converges?

Because the bundle adjustment is still up to scale and orietation.

Data Capture

• Enough baseline between images • Share common 3D structure • Multiple planes

Reference image

• An image in the middle may be a good choice of reference image because you can find many matches across all images.

Reference Image Selection

Matching Ref. with other images

Reference image

i j

,f ju,f i

u

,f iu ,f j

u1u = K u

Indicator of no match

In addition to Mx and My, you may want to have an indicator matrix for visibility.

Camera Pose Estimation

Choose an initial pair of images to compute camera pose • Have enough number of matches •

1i 2i

Camera Pose Estimation

1i 2i

Find Next Best Image

1i 2i

Reconstructed image index

i

Find the image that has maximum number of 3D-2D matches

u

X

3D-2D correspondence: u X

= P K R t (3)R SOwhere

11

12

13

14x x x x1 1 1 1 1 1 1

21y y y y1 1 1 1 1 1 1

22

23x x x x

24y y y y

31

32

33

34

1

1

1

1

m m m m m m m

m m m m m m m

p

p

p

pX Y Z -u X -u Y -u Z -u

pX Y Z -u X -u Y -u Z -u

p

pX Y Z -u X -u Y -u Z -u

pX Y Z -u X -u Y -u Z -u

p

p

p

p

0

0

0

0

x 11 12 13 14

31 32 33 34

+ +

+ +

p X p Y p Z pu

p X p Y p Z py 21 22 23 24

31 32 33 34

+ +

+ +

p X p Y p Z pu

p X p Y p Z p

2mx12

A x 0

Camera Registration

u

X

If K is given,

= P K R t (3)R SOwhere

1 2 3

K R t p p p p

-11 2 3= R K p p p

11

-1 T1 2 3 22

33

K p p p U V

d

d

d

11 d

TR UV : SVD cleanup

-14

11

=K p

t d

: Translation and scale recovery

Camera Registration

Camera Registration

Camera Registration

Reprojection error:

X

bobP

uu

p

Black: given variables Red: unknowns

X CK -R

u

v

w

where

2 2

geom

Ev

wx y

u

w

-KC

R

u

v

w

=

Cp

q

3+4 parameters

R

q R q

u u

v v

w w

p C q

u u u

v v v

w w w

( )

pf

u

w

v

w

2

2

( )

p pp

p p

p p

u ww u

u

w w

v u wv v

w

w

f

Camera Registration

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff

Camera Registration

Camera Registration

Triangulation of Unreconstructed Points

1i 2i

i

This is a point that is not reconstructed yet while it matches with reconstructed images.

v

Bob Alice

X

bobP aliceP

u

Baseline

General camera pose

1 bob=1 1

u XP

Two 3D vectors are parallel.

bob1 1

u XP 0

bob1 1

u XP 0 : Knowns

: Unknowns

alice1

vP

mikeP

mike1

wP

Point Triangulation

v

Bob Alice

X

bobP aliceP

u

2

bob bob bob

bob bob bob

geom

alice alice alice

alice alice alice

/

/

/

/

u w x

v w yE

u w x

v w y

Black: given variables Red: unknowns

2

2

( )

X XX

X X

X X

u ww u

u

w w

v u wv v

ww

f

-1

T T( ) ( ) ( )( )

x x xx b x

x x x

f f ff

Nonlinear Point Triangulation

Nonlinear Point Triangulation

-1

T T( ) ( ) ( )( )

x x xx b x

x x x

f f ff

2

2

( )

X XX

X X

X X

u ww u

u

w w

v u wv v

ww

f

Damping factor (Levenberg-Marquardt algorithm)

-1

T T( ) ( ) ( )( )

x x xx I b x

x x x

f f ff

v

Bob Alice

X

bobP aliceP

u

pp

X

1

2

geom

2

2

3

2

3

u

P X P X

P X X

u

P

E

x y

Black: given variables Red: unknowns

( )

p,X

u

v

w

f w 2

2

( )

p pp,X

p p

p p

u ww u

u

w w

v u wv v

w

w

f

2

2

( )

X Xp,X

X X

X X

u ww u

u

w w

v u wv v

ww

f

Bundle Adjustment

J =

Cam 1 Pt 1 Pt 4

# of unknowns: 3x7+4x3 # of projections: 9 (not all points are visible from cameras)

Cam 2 Cam 3 Pt 2 Pt 3

Pt 1

Pt 2

Pt 3

Pt 4

Camera 1

Camera 2 Camera 3

Visibility Reasoning

T T

T

TT T

p p p X

X p X X

J J J J A BJ J

B DJ J J J

J J =T

T T - ( )

pJ J J b X

Xf

Normal equation:

-1 T-A BD BNote: is Schur complement of D

1

d

D

dM

-1

1

-1

-1

d

D

dM

Inversion of block diagonal matrix can be efficiently computed.

T

p

X

eA B p

B D X e

-1 -1

T

- -

p

X

eA B pI BD I BD

B D X0 I 0 I e

-1-1 T

T

--

p X

X

e BD epA BD B 0

XB D e

-1-1 T -1

-1 T

- -

-

p X

X

p A BD B e BD e

X D e B p

Jacobian Sparsity

-1

T T( ) ( ) ( )( )

p p pp I b p

p p p

f f ff p XJ J J

-1

1

-1

-1

d

D

dM# of points

# of images if visible

pJ

XJ

d

( )b pf

T

T- ( )

p p

X X

J eb X

J ef

-1-1 T -1

-1 T

- -

-

p X

X

p A BD B e BD e

X D e B p

T T

T T T

p p p X

X p X X

J J I J JA B

B D J J J J I

-1

1

-1

-1

d

D

dM

d = d I