2023. 2. 27. 15:59ㆍDevcorse/Visual SLAM(02.20~3.31)
2D->3D mapping: depth를 모르니 기본적으로 단일 이미지로 불가능하다.
-> 2장이상의 이미지로, depth카메라로 추정 가
Epipolar geometry
동일 3d object를 바라보는 2개 이미지를 2-view geometry라고 한다.
- monocamera, stereocamera 둘다가능
이를 epipolar geometry라고 하겠음
3d object가 2d image로 project 될때 하나의 3d point cloud는 2d에서 한개의 점으로 표현되며, 역으로 2d의 한 픽셀은 3d에서 직선으로 추정 가능함 -> ray
즉 camera1에서는 1개의 점으로 보이는게 camera2에서는 다수의 objects로 보일 수 있다.
이떄 camera1의 ray가 camera2에 reproejct 될때 그 직선을 epipolar line이라고 한다.
이는 image1에 3개의 픽셀 혹은 object가 image2에서 3개의 epipolar line이라는 것과 같다.
이때 image1의 3개의 ray는 optical center1 을 지나고 optical center1 또한 image2에 project된다.
-> optical center가 다른 image에 project되는 점을 epipole이라고 한다.
만약 하나의 epipole이 다른 image안에 있다면 그 반대도 반드시 존재한다.
특별한 카메라 위치에 따른 분석
카메라 위치가 가로로 평행할때 (stereo camera)
cemara1의 ray가 camera2 에서 가로로 선이 투영된다. (epipole은 맺힐 수 없다)
correspondense를 찾기 쉽다.
카메라 위치가 세로로 평행할때 (monocular camera의 직진간 사진 2번찍기)
cemara1의 ray가 camera2 에서 선이 투영된다. -> 이때 ray는 epipole을 가로지르는 직선으로 나타난다.
이 경우 분석 필요없이 motion 센서를 사용한다면 바로 위치를 찾을수 있다.
일반적인 카메라 위치

c, c'을 지나는 선을 baseline이라고 한다. 이때 각 epipole은 baseline 위에 있다.
X가 y축 방향으로 이동하면 epipolar plane은 baseline을 축으로 회전을 한다.
geometrycal constraint or epipolar constraint
1. 3D point X는 epipolar plane 위에 있어야한다.
2. 모든 epipolar line은 epipole을 지나야 한다.
3. 모든 basline은 epipole을 지나야 하며, 모든 epiploar plane은 baseline을 포함해야 한다.
Essential / Fundametal matrix
Essential matrix
essential matrix는 x', x의 geometrycal constraint를 만들어준다.
E = [tx]R = t x R
$x'^{T}Ex=0$
SVD를 사용하면 t와 R로 분해가능
E(3x3)는 각 카메라간 회전과 이동변환을 담고 있다.
Fundamental matrix
변환을 하기전 normalized image plane(NIP)의 x,y는 float임으로 pixcel location(PL)으로 바꿔줘야한다.
즉 PL -> NIP -> E -> NIP -> PL 이라는 것인데 이때 intrinsic matrix(K)가 필요하다.
$F = (K'^{-1})^{T}EK^{-1}$
$F=(K'^{-1})^{T}[tx]RK^{-1}$
$x'^{T}Fx = 0$
Epipolar line
x -> l'의 변환을 정리하면 아래와 같다.
l' = Fx
$x'^{T}Fx = 0$
$x'^{T}l' = 0$
즉$ x'^{T}$ 와 l'의 곱이 가장 작은게 위치가 되는것
Solves for Matrix
essential matrix -> 5-point algorithm
5 degrees of freedom: tx, ty, tz, rx, ry, rz + scale을 무시하여 -1
fundamental matrix -> 8-point algorithm
7 degrees of freedom tx, ty, tz, rx, ry, rz + focal_length, centor_point + scale 무시하여 -1
-> 7면 충분하나 성능이 좀 떨어지고, 조건이 있어 8 point 사용
n개의 point를 알면 matrix를 알수 있다.
AF=error 가 최소가 되는 F로 설정
essential matrix, fundametal matrix 유도 강의 한번씩은 보자
cv::findFUndamentalMat(InputArray points1, InputArray point2, int method, double ransacReprojThreshold, double confidence, int matIters, outputArray amsk=noArray())
cconfidence가 feature간 distance이다.
cv::recorverPose(InputArray E, InputArray points1, InputArray point2, InputArray cameraMatrhix, OutputArray R, OutputArray t, InputOutputArray mask = noArray())
'Devcorse > Visual SLAM(02.20~3.31)' 카테고리의 다른 글
| Triangulation (0) | 2023.02.27 |
|---|---|
| RANSAC (0) | 2023.02.27 |
| TDD (0) | 2023.02.24 |
| ORB paper (0) | 2023.02.23 |
| BRIEF paper (0) | 2023.02.23 |