해당 이미지의 모션을 기반으로 새 카메라 위치를 계산하려고합니다. 이미지는 핀홀 카메라 모델을 따릅니다.해당 이미지에서 카메라 모션
실제로 유용한 결과를 얻지 못하므로 절차를 설명하고 누군가가 나를 도울 수 있기를 바랍니다.
SIFT를 사용하여 해당 이미지의 기능을 일치시키고 OpenCV의 FlannBasedMatcher와 일치시키고 OpenCV의 findFundamentalMat (메소드 RANSAC)를 사용하여 기본 매트릭스를 계산합니다. 내가하려고 그런
SVD decomp = SVD(E);
Matx33d W(0,-1,0,
1,0,0,
0,0,1);
Matx33d Wt(0,1,0,
-1,0,0,
0,0,1);
R1 = decomp.u * Mat(W) * decomp.vt;
R2 = decomp.u * Mat(Wt) * decomp.vt;
t1 = decomp.u.col(2); //u3
t2 = -decomp.u.col(2); //u3
:
Mat E = K.t() * F * K;
내가 회전 및 번역 특이 값 분해로하는 필수 매트릭스를 분해 :
은 그 때 나는 카메라 고유 행렬 (K)에 의해 필수 행렬을 계산 삼각 측량에 의해 올바른 해결책을 찾으십시오. (이 부분은
http://www.morethantechnical.com/2012/01/04/simple-triangulation-with-opencv-from-harley-zisserman-w-code/입니다. 그래서 나는 그것이 올바르게 작동해야한다고 생각합니다.) new_pos & old_pos은 벡터 (3 ×)이다
new_pos = old_pos + -R.t()*t;
는 R 회전 행렬 (× 3)하고 번역 벡터 (3 ×)을 T :
새로운 위치
이어서 계산된다.유감스럽게도 유용한 결과가 없으므로 잘못된 정보가있을 수 있습니다. 여기
는 (단지의 경우 누군가가 그 중 하나는 확실히 잘못된 것을 확인할 수) 몇 가지 결과입니다 모든F = [8.093827077399547e-07, 1.102681999632987e-06, -0.0007939604310854831;
1.29246107737264e-06, 1.492629957878578e-06, -0.001211264339006535;
-0.001052930954975217, -0.001278667878010564, 1]
K = [150, 0, 300;
0, 150, 400;
0, 0, 1]
E = [0.01821111092414898, 0.02481034499174221, -0.01651092283654529;
0.02908037424088439, 0.03358417405226801, -0.03397110489649674;
-0.04396975675562629, -0.05262169424538553, 0.04904210357279387]
t = [0.2970648246214448; 0.7352053067682792; 0.6092828956013705]
R = [0.2048034356172475, 0.4709818957303019, -0.858039396912323;
-0.8690270040802598, -0.3158728880490416, -0.3808101689488421;
-0.4503860776474556, 0.8236506374002566, 0.3446041331317597]
계산에 한 가지 더 실수가 있습니다. 'SVD decomp = SVD (E);'는 괜찮지 만 새로운'newE = U * diag (1,1,0) * Vt'를 계산해야만하고 다시'SVD decomp2 = SVD (newE) ;'. – who9vy
흥미 롭습니다. 나는 그것에 대해 읽지 않았다. 그래서 저는 decomp2로 R과 t를 계산합니까? btw : 귀하의 자세한 답변 주셔서 감사합니다. 나는 모든 것을 점검하고 최대한 빨리 대응할 것입니다. – 3x14159265
예, decomp2로 R과 t를 계산해야합니다. 자세한 설명은 여기 (pp 257-260) http://www.robots.ox.ac.uk/~vgg/hzbook/hzbook2/HZepipolar.pdf – who9vy