<correspondence search>

using SIFT, 주어진 이미지별로 key point들을 찾고, 그들의 descriptor를 구한다.

→ 서로 다른 이미지인데, 같은 keypoint를 보유한 것들을 pair로 묶는다. 더 정확히는 128개의 수치에 대해 유클리디언 거리를 계산하고, 이것이 가장 작은 값, 그 다음으로 작은 값의 ratio가 0.8이상인 것에 대해서 진행함. 그 이하인 것은 버림. 이 경우에 진짜는 5%만 버리게 되며, 잘못된 매칭은 90% 버릴 수 있었다고 함.

→ 이 pair로 묶은 것이 잘못됐을 수 있다(예를 들어, 같은 이미지가 박스 앞면, 오른쪽 면에 있어서, 다른 부분임에도 같은 패턴으로 인식돼, 같은 keypoint로 묶임). 그래서 geometric verification을 거친다. ransac 알고리즘과 epipolar geometry에서 fundamental matrix를 추정해, Epipolar Constraint를 만족하지 않는 outlier들을 제거해준다.(위 경우, 같은 이미지들에 해당했던 keypoint들은 사라지고, 박스의 edge 부분만 keypoint에서 남게 되는 식.)

<incremental Reconstruction>

keypoint들이 많이 matching되고, 동시에 대상을 찍은 두 카메라 사이의 각도가 넓은(좁을 시에, depth estimation에서 너무 깊어보이게 될 수도 있음.) image pair를 바탕으로, 초기 점들을 생성해낸다. 이것에 사용된 camera pose는 geometric verification에서 쓰인, relative하게 추정한 pose가 absolute로서 사용되게 된다.

→ 초기에 사용된 이미지들과 pair로 묶인 다른 이미지를 사용하려 한다. 사용하려는 다른 이미지의 absolute한 camera pose를 알기 위해서, PnP 알고리즘을 사용한다.

→ 이를 통해 추정된 absolute camera pose를 사용하고, triangulation을 통해 해당 이미지의 다른 점들도 3d에 올린다.

→ 3d에 올리면서 사용한 c2w matrix(estimated camera pose)가 부정확할 수 있다. 따라서, 이미 찍힌 3d 점들을 사용했던 absolute camera pose를 사용해서 2d에 다시 projection을 시킨다. 이렇게 project된 점들과 기존 이미지가 갖고 있는 점들의 오차를 계산해서, absolute camera pose와 3d point들의 위치를 동시에(jointly) 수정한다.(Bundle Adjustment).

→ 이를 통해 알게 된 점들 중, outlier로 판명된 점들이 있다면, 제거해준다.

→ 위 과정을 모든 이미지 pair들에 대해 진행하고, 종료되면, point cloud를 결과로 내놓게 된다.

triangulation에는 시점 이동이 필요함.

monocular한 환경에서 생기는 scale ambiguity