최근 포토로그


Essential/fundamental matrix accuracy and decomposition

Robin Hewitt.
http://www.robinhewitt.com

UCSD 석사 출신인 거 같은데, 저번에 내 문제도 도와줬고, 괜찮은 사람인 거 같다.
Computer Vision 가지고 개인 컨설팅을 하는 거 같은데.....
알고 보니까 "Seeing With OpenCV"도 얘가 쓴 거다....  후덜덜...



Re: essential/fundamental matrix accuracy and decomposition


Computing F is often difficult in practice. If you're at all close to a
degeneracy, F becomes unstable (i.e., small precision errors in the locations of
points give large errors in F). LMedS does seem to minimize that problem, so I
presume it's using a more robust statistic. I've also found that using Sampson
distance as the error measure minimizes this problem. You might also want to
enforce the rank 2 constraint, as Zhang suggests:
http://research.microsoft.com/en-us/um/people/zhang/papers/ijcv-review.pdf

RANSAC is worthless if there are many points that are close to coplanar because
it will find lots of inliers to an arbitrary degeneracy. In addition, F is a
weak constraint (it only maps points to lines). Therefore false matches can
become Ransac inliers with higher probability.

Another thing to be aware of is that point matching algorithms such as SURF
exacerbate exactly these problems because the correct point pairs they find
often tend to be close to coplanar. From your images, I think that may be the
case for you.

One trick I've used is to look for two independent planes and compute F from
those:
http://www.dcs.warwick.ac.uk/bmvc2007/proceedings/CD-ROM/papers/paper-305.pdf

HTH,
Robin




--- In OpenCV@yahoogroups.com, "newobsorder" <attwad@...> wrote:
>
> Hello everyone.
>
> I have a program which match automatically SURF features from 2
> undistorded images, then I compute the fundamental matrix using RANSAC
> and then I try to get R and T from E (my images have been undistorded so
> the fundamental matrix F is equal to the essential matrix E in this case
> I believe).
>
> To get R and T I simply follow the method explained in many books, using
> the SVD of E, getting the epipole as the last row column of V and so
> on... this method is described in wikipedia too:
> http://en.wikipedia.org/wiki/Essential_matrix
>
> Well, so far, so good.
> but I have really strange behavior concerning the fundamental matrix I
> get.
> My feature matching is not perfect but when I use the ransac method I
> expect it to find at least 8 points which are correct with a probability
> of 0.99! (and there ARE at least 8 points correct, from displaying the
> matches I know it).
>
>
> Let me put an example, screenshot and all to make it clear if someone is
> kind enough to help me:
>
> The screenshot of the matched points is here:
> http://img17.imageshack.us/img17/3275/matches.png
> <http://img17.imageshack.us/img17/3275/matches.png>
> The epipoles are displayed in this screenshot:
> http://img11.imageshack.us/img11/3821/epilines.png
> <http://img11.imageshack.us/img11/3821/epilines.png>
>
> and here is the output from my console:
> found 268 putative correspondences
> final number of correspondences after clearing outliers
> with the fundamental matrix got using RANSAC: 14
>
> E=F=fundamental matrix:
> [[ -1.17957825e-05 4.38445015e-04 -5.43820346e-03]
> [ -3.48026661e-04 2.45962001e-04 -4.51950310e-03]
> [ -6.65613916e-04 -8.16155747e-02 1.00000000e+00]]
>
> reprojection error equals to:-0.056750
> (this is the sum of: "transpose(pts2)*E*pts1" which should be equals to
> 0)
>
> Now trying to get R and t from E.......
>
> U, sigma, V = sdv(E):
> U:
> [[ 0.00543762 -0.04384693 -0.99902344]
> [ 0.00450919 -0.99902701 0.04387163]
> [-0.99997503 -0.00474335 -0.00523461]]
> sigma:
> [ 1.00335026e+00 3.72140668e-04 1.01946012e-12]
> V:
> [[ 6.61746832e-04 8.13445076e-02 -9.96685803e-01]
> [ 9.44165766e-01 3.28327447e-01 2.74233185e-02]
> [ 3.29470038e-01 -9.41054821e-01 -7.65854269e-02]]
> e=t= last column vector of U:
> [[-0.99902344]
> [ 0.04387163]
> [-0.00523461]]
> Rotation is:
> [[ 0.99524114 -0.07058063 0.06718149]
> [-0.04475413 -0.94352449 -0.328266 ]
> [ 0.0865566 0.32369719 -0.94219321]]
> denormalized translation vector:
> [[190.84946, -8.3810606]]
>
>
> So my two questions are:
>
> - When doing the SVD of E, sigma should contains 2 identical values and
> one equals to 0, which is not the case! Why?
>
> - If I use LMEDS instead of RANSAC, almost all the putative
> correspondences are maintained, but with ransac this number decreases
> drastically, are they so different??
>
> Many thanks to anyone who could answer me!

덧글

  • 궁금궁금 2009/07/08 23:22 # 삭제 답글

    좋은 자료 잘 보고 갑니다.
    한가지 궁금한게 있습니다.

    Two view 에서 Essential Matrix를 분해하여 카메라의 상대적인 자세를 구하는데
    맨 아래에 denormalized translation vector가 있네요?
    denormalized translation vector는 어떻게 구하는지요?
    혹시 K(Intrinsic Parameter) 와 관련이 있는가요?
    도움 바랍니다. ^^
  • kyuhyoung 2009/07/11 13:31 # 답글

    저도 사실 잘 모르겠네요... 좀 들여다 봐야 겠네요.
댓글 입력 영역