CS计算机代考程序代写 matlab algorithm Multiple View Geometry: Exercise Sheet 5

Multiple View Geometry: Exercise Sheet 5
Prof. Dr. Florian Bernard, Florian Hofherr, Tarun Yenamandra
Computer Vision Group, TU Munich
Link Zoom Room , Password: 307238

Exercise: May 26th, 2020

Part I: Theory

1. The Lucas-Kanade method

The weighted Lucas-Kanade energy E(v) is defined as

E(v) =


W (x)

G(x− x′)
∥∥∥∇I(x′, t)>v + ∂tI(x′, t)∥∥∥2 dx′ .

Assume that the weighting function G is chosen such that G(x− x′) = 0 for any x′ /∈W (x).
In the following, we note It = ∂tI and (Ix1 , Ix2)

> = ∇I .

(a) Prove that the minimizer b of E(v) can be written as

b = −M−1q

where the entries of M and q are given by

mij = G ∗
(
Ixi · Ixj

)
and qi = G ∗ (Ixi · It)

(b) Show that if the gradient direction is constant in W (x), i.e. ∇I(x′, t) = α(x′, t)u for a
scalar function α and a 2D vector u, M is not invertible.
Explain how this observation is related to the aperture problem.

(c) Write down explicit expressions for the two components b1 and b2 of the minimizer in
terms of mij and qi.

Note: G ∗A denotes the convolution of image A with a kernel G : R2 → R and is defined as

G ∗A =

R2
G(x− x′)A(x′)dx′ .

2. The Reconstruction Problem

The bundle adjustment (re-)projection error for N points X1,…,XN is

E(R,T,X1, …,XN ) =
N∑
j=1

(
‖xj1 − π(Xj)‖

2 + ‖xj2 − π(RXj +T)‖
2
)

(a) What dimension does the space of unknown variables have if …

– … R is restricted to a rotation about the camera’s y-axis?
– … the camera is only rotated, not translated?
– … the points Xj are known to all lie on one plane?

1

https://tum-conf.zoom.us/s/62772800235?pwd=SUpZN2QrV0JpeXJyR2R1TWx5cHEwdz09

In contrast to the projection error, the 8-point algorithm decouples the rigid body motion from
the coordinates Xj .

(b) Which constrained optimization problem does the 8-point algorithm solve? Write down a
cost function E8-pt(R,T) and according constraints using x

j
1, x

j
2, R and T.

(c) Can the 8-point algorithm be used if …

– … R is restricted to a rotation about the camera’s y-axis?
– … the camera is only rotated, not translated?
– … the points Xj are known to all lie on one plane?

2

Part II: Practical Exercises

1. The Structure Tensor

In order to be able to detect corners in an image and compute optical flow, the structure tensor
M shall be computed in this exercise. Write a function [M11, M12, M22] = getM(I,
sigma) that computes the entries of the structure tensor M (see Theory, Ex.1(a)) for every
pixel (x, y) of an image I . Proceed as follows:

(a) Compute the image gradients Ix and Iy using central differences.

(b) As weighting function use a two-dimensional Gaussian Kernel with a standard deviation σ
(see Exercise Sheet 1). Use a kernel size (and hence integration window size) k = 2·2σ+1.

(c) Use the result from Theory, Ex.1(a) and the Matlab function conv2 to compute M11, M12
and M22. Why is it not necessary to compute M21?

2. Corner Detection

In this exercise you will implement the Harris corner detector. Download ex5.zip and extract
its content.

(a) Fill in the first missing part in getHarrisCorners.m: compute the scoring function
C := det(M)− κ trace2(M) for each pixel (x, y).

(b) Fill in the second part: visualize the scoring function. It is a good idea to display a non-
linearly transformed scoring function, e.g. sign(C) · |C|

1
4 .

(c) Complete getHarrisCorners.m: find all pixels (x, y) for which C(x, y) > θ, and
which are a local maximum of the scoring function, i.e. all four adjacent pixel have a
lower score (non-maximum suppression).

(d) Run getHarrisCorners for img1.png with σ = 2, κ = 0.05 and θ = 10−7.
Display the found corners using the provided function drawPts.

(e) Try different values for σ. What do you observe?

3. Optical Flow

In this exercise you will implement the Lucas-Kanade method to compute optical flow. To this
end, complete the missing parts in getFlow.m.

(a) Write a function [M11, M12, M22, q1, q2] = getMq(I1, I2, sigma) that
computes the entries of the structure tensorM as well as the vector q for every pixel (x, y).
The easiest way to do this is to copy getM.m and modify it accordingly.

(b) Compute the local velocity (vx, vy) of each pixel using the formula derived in Theory,
Ex.1(a). Use the results from Theory Ex.1(c) to avoid loops and thus make your code
efficient.

(c) Run getFlow for the two images img1.png and img2.png and σ = 2.

(d) Create a figure with three subplots. Visualize the two velocities separately using imagesc.
In the third subplot, display a quiver plot of the velocities. Use help quiver if you do
not know the syntax.

(e) Again, try different values for σ. What do you observe now?

3