5
votes

I use two projection matrices P1 and P2 (for example I'm using dinosaur dataset) and I need to compute the fundamental matrix F. So I use two Matlab functions:

  • Peter Kovesi's function: www.csse.uwa.edu.au/~pk/Research/MatlabFns/Projective/fundfromcameras.m
  • Zisserman: www.robots.ox.ac.uk/~vgg/hzbook/code/vgg_multiview/vgg_F_from_P.m

These functions should do the same thing, but I have a different F value! How it's possible? Which is the right functions?

If two points X1 and X2 are "the same" in two different images, X2^T*F*X1 = 0 ... So I found two corresponded points from two rotated images (5 degrees) by using SURF, but X2^T*F*X1 is never equal to zero with this two funtcions. Any ideas?

Instead if I use this function that computes F from matches points:

I have that X2^T*F*X1 = 0 .... Obviously F is different from the two F I had with the other two functions...

2
I'm sure that Peter Kovesi's function is right, it functions correctly! - Roberto Iacono

2 Answers

2
votes

Well for one thing, it's overwhelmingly likely that the points aren't perfectly rotated version of each other. SURF uses a lot of approximations, bi-linear interpolation and a whole slew of things that break true rotational invariance. So there might not exist such a fundamental matrix (if there's no linear relationship between the two sets of points.) Yes, this is true even after you do point matching.

That said, your X2^T*F*X1 should probably be small if the matching is really good, but I'd be surprise if it's ever exactly zero for any real image.

2
votes

The fundamental matrix is unique only up to a scale.

So, even if you have different fundamental matrices, both can be correct for your images.