cvbook icon indicating copy to clipboard operation
cvbook copied to clipboard

compute_fundamental()'s A matrix might be reversed

Open drojf opened this issue 5 years ago • 0 comments

I noticed that in sfm_test.py, calls to compute_fundamental() and compute_fundamental_normalized() have their input variables reversed (x2 then x, instead of x then x2):

E = sfm.compute_fundamental(self.x2[:, :8], self.x[:, :8])

E = sfm.compute_fundamental_normalized(self.x2[:, :8], self.x[:, :8])

See sfm_test.py, around line 33

Comparing the definition of A to the one in "Multiple View Geometry in Computer Vision, Second Edition", section 11.1 and the Wikipedia page, it appears that x1 and x2 have been swapped. Reversing the values allows the normal order of arguments to be used.


The original definition of A is:

A[i] = [x1[0, i] * x2[0, i],  x1[0, i] * x2[1, i],  x1[0, i] * x2[2, i],
        x1[1, i] * x2[0, i],  x1[1, i] * x2[1, i],  x1[1, i] * x2[2, i],
        x1[2, i] * x2[0, i],  x1[2, i] * x2[1, i],  x1[2, i] * x2[2, i],
       ]

The fixed definition of A swaps every occurrence of x1 and x2:

A[i] = [x2[0, i] * x1[0, i],  x2[0, i] * x1[1, i],  x2[0, i] * x1[2, i],
        x2[1, i] * x1[0, i],  x2[1, i] * x1[1, i],  x2[1, i] * x1[2, i],
        x2[2, i] * x1[0, i],  x2[2, i] * x1[1, i],  x2[2, i] * x1[2, i],
       ]

drojf avatar Feb 22 '20 12:02 drojf