Moritz Schmidt
Moritz Schmidt

Reputation: 2823

Python homogeneous to inhomogeneous plot line

I found an article which is about epipolar geometry.

I calculated the fundamental matrix. Now Iam trying to find the line on which a corresponding point lays as described in the article:

s

I calculated the line which is in homogeneous coordinates. How could I plot this line into the picture like in the example? I thought about transforming the line from homogeneous to inhomogeneous coordinates. I think this can be achieved by dividing x and y by z

For example, homogeneous:

x=0.0295
y=0.9996
z=-265.1531

to inhomogeneous:

x=0.0295/-265.1531
y=0.9996/-265.1531

so:

x=-0.0001112564778612809
y=0.0037698974667842843

Those numbers seem wrong to me, because theyre so small. Is this the correct approach? How could I plot my result into an image?

Upvotes: 2

Views: 1470

Answers (1)

Sam Mason
Sam Mason

Reputation: 16214

the x, y and z you have are the parameters of the "Epipolar Lines" equation that appear under the "line in the image" formula in the slides, but labelled a, b and c respectively, i.e:

au + bv + c = 0

solutions to this are points on the line. e.g. in Python I'd define a as some points on the picture's x-axis, and solve for b:

import numpy as np

F = np.array([
    [-0.00310695, -0.0025646,  2.96584],
    [-0.028094,   -0.00771621, 56.3813],
    [13.1905,    -29.2007,  -9999.79],
])

p_l = np.array([
    [343.53],
    [221.70],
    [  1.0],
])

lt = F @ p_l

# if you want to normalise
lt /= np.sqrt(sum(lt[:2] ** 2))

# should give your values [0.0295, 0.9996, -265.2]
print(lt)

a, b, c = lt.ravel()

x = np.array([0, 400])
y = -(x*a + c) / b

and then just draw a line between these points

Upvotes: 3

Related Questions