ORB-SLAM2 소스코드 분석(단안) - 단안 맵 초기화

ORB-SLAM2 소스코드 분석(단안) - 단안 맵 초기화

1. 단안초기화

단안지도는 RGBD 및 쌍안경 카메라와 달리 초기화 과정이 오래 걸리므로 단안지도는 RGBD 및 쌍안경 카메라와 같이 깊이를 직접 구하지 못하여 지도를 구성한다. 포인트들. Monocular는 두 프레임 사이의 특징점을 일치시킨 다음 삼각 측량을 사용하여 맵 포인트를 구성해야 하므로 Monocular는 충분한 특징점을 추출할 수 있도록 초기 두 프레임에 대한 특정 요구 사항과 두 프레임 사이의 거리가 충분히 일치합니다. 삼각 측량을 통해 맵 포인트를 구성할 수 있도록

여기에 이미지 설명 삽입

2. 초기화된 두 프레임의 특징점은 특정 임계값보다 커야 합니다.

여기에 이미지 설명 삽입

초기화 프레임에서 추출된 특징점은 설정된 임계값보다 커야 후속 특징 매칭을 위해 충분한 일치점을 찾을 수 있습니다.

3. 초기화된 두 프레임 간의 특징 매칭을 수행하며, 매칭 포인트는 특정 임계값보다 커야 합니다.

여기에 이미지 설명 삽입

후속 삼각측량을 위한 충분한 피처 매칭 포인트가 있으며 지도를 초기화하기에 충분한 지도 포인트를 생성할 수 있습니다.

4. 프레임 간 특징점 매칭 기능 초기화(SearchForInitialization)

여기에 이미지 설명 삽입

이 함수를 호출하여 초기화된 기준 좌표계와 현재 좌표계를 입력하고, 재투영 탐색을 위한 탐색창을 입력합니다. 해당 특징점 매칭 정보 및 매칭 포인트 반환
구체적인 코드는 다음과 같이 구현됩니다.

(1) 회전 히스토그램 구축

여기에 이미지 설명 삽입

히스토그램에서 비주류 회전 특징점을 걸러내기 위해서는 이미지가 회전할 때 전체 픽셀점들이 일정한 각도만큼 균일한 방향으로 회전하기 때문에 그렇지 않은 회전각도를 제거해야 합니다. 주류 방향으로.
(2) 기준 프레임의 특징점을 탐색하여 현재 프레임의 반경 창을 검색하여 후보 특징점을 찾습니다(GetFeaturesInArea).
여기에 이미지 설명 삽입

폭력적인 매칭 방법은 시간이 너무 많이 걸리기 때문에 여기서는 폭력적인 매칭 방법을 사용하지 않습니다. 참조 프레임의 특징점 좌표는 두 프레임 간의 움직임이 상대적으로 작기 때문에 여기에 직접 입력되므로 이미지 간의 변화가 크게 다르지 않을 것이며 현재 프레임과 참조 프레임 간의 변환 매트릭스를 알 수 없습니다. 현재 프레임에 투영된 좌표는 변환 행렬을 통해 입력되므로 기준 프레임의 특징점을 현재 프레임에 원을 그리기 위한 좌표로 사용하고 해당 매칭 특징점 후보점은 원 안에서 선택했습니다.
여기에 이미지 설명 삽입

GetFeaturesInArea의 내부 구현은 다음과 같습니다.
1) 특징점 검색 범위를 계산합니다.
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

이미지를 그리드로 분할하고 기준 프레임의 특징점 좌표를 현재 프레임의 원의 중심으로 삼고 반지름이 r인 사각형을 연결하여 사각형 안의 특징점을 후보 정합점으로 획득 2) 원의 특징점을
후보 로 가져오기
여기에 이미지 설명 삽입

(3) 참조 프레임의 특징점 기술자를 구하고, 이전에 찾은 후보 특징점 기술자와의 거리를 계산하여 최적 매칭점과 두 번째로 최적인 매칭점을 필터링한다.
여기에 이미지 설명 삽입

해밍 거리에 따른 후보 특징점 선별, 최적 특징점과 차등 최적 특징점 선택
(4) 선별된 최적 매칭점과 차등 최적 매칭 쌍 확인
여기에 이미지 설명 삽입

최상의 기술자의 거리를 계산하더라도 이 거리는 특정 임계값보다 작아야 합니다.
최적 거리는 두 번째 최적 거리보다 설정된 비율보다 작기 때문에 특징점에 대한 인식이 더 높다.
발견된 후보 특징점이 이전에 매칭된 적이 있다면 반복 매칭이 발생한 것을 의미하며 원래 매칭도 삭제됨
(5) 회전 히스토그램에서 "비주류" 부분을 가려냄

여기에 이미지 설명 삽입

5. 초기 두 프레임의 상대 포즈를 구하고, 삼각 측량을 통해 초기 맵 포인트를 구합니다(Initialize).

여기에 이미지 설명 삽입
여기에 이미지 설명 삽입

위에서 얻은 특수 진단 포인트의 매칭 정보를 통해 현재 카메라의 포즈를 계산하고 삼각 측량을 통해 초기 맵 포인트를 생성합니다. 코드의 구체적인 구현
은 다음과 같습니다.
포인트 쌍
여기에 이미지 설명 삽입

(2) RANSAC 반복 횟수에 따라 각 반복마다 8쌍의 매칭 포인트를 무작위로 선택
여기에 이미지 설명 삽입

8포인트 방법을 사용하여 호모그래피 행렬과 기본 행렬을 계산하고 점수가 높은 행렬을 사용하여 카메라 포즈를 복원합니다. 따라서 각 반복은 서로 다른 8쌍의 점을 사용하여 고득점 행렬
(3)을 계산합니다. 8개의 매칭 쌍을 통해 호모그래피 행렬(H)과 기본 행렬(F)의 점수를 계산합니다.
여기에 이미지 설명 삽입

두 개의 스레드를 열고 호모그래피 행렬(H)과 기본 행렬(F)을 동시에 계산하고 두 행렬의 점수를 구한 다음 점수를 비교하여 포즈를 초기화하는 데 사용할 행렬을 판단합니다.
(4) 계산된 호모그래피 행렬과 기본 행렬의 점수에 따라 어떤 행렬을 사용하여 포즈를 초기화할지 결정
여기에 이미지 설명 삽입

호모그래피 행렬의 점수가 높을수록 초기화 프레임의 이미지가 평면 쪽으로 편향되어 있음을 나타내고,
기본 행렬의 점수가 높을수록 초기화 프레임의 이미지가 비평면 쪽으로 편향되어 있음을 나타냅니다.
(5) 호모그래피 매트릭스(H)로 얻은 포즈를 이용하여 맵 포인트 초기화(ReconstructH)
여기에 이미지 설명 삽입

8개 그룹의 솔루션을 계산할 수 있으며 이 8개 그룹을 검증하고 카메라 앞에서 가장 많은 3D 포인트를 생성하는 솔루션을 최적 솔루션으로 선택합니다(CheckRT 기능을 통해 확인하여 3D 포인트 생성) (6) 기본 행렬 사용 (F)
포즈를 찾고 맵 포인트를 초기화합니다(ReconstructF).
여기에 이미지 설명 삽입

Essential Matrix에서 2개의 R해와 2개의 t해를 풀고 총 4개의 해를 구하여
R과 t의 4가지 조합을 검증하고 최적의 조합을 선택한다. 숫자가 가장 크면 이 조합이 가장 좋은 조합입니다. (CheckRT 함수로 검증)
(7) 구한 포즈(R, T)와 초기화 프레임의 매칭 포인트를 삼각 측량하여 내부 포인트(CheckRT)를 구합니다.
여기에 이미지 설명 삽입

주어진 특징점 쌍과 그 R t 에 대해 cheirality 검사 1이라고도 하는 삼각분할을 통해 솔루션의 유효성을 확인합니다.
두 프레임 사이의 투영 행렬을 계산하고 초기화합니다.
여기에 이미지 설명 삽입

맵이 초기화되면 초기화 프레임의 첫 번째 프레임을 세계 좌표계로 사용하고 카메라의 광학 중심을 원점으로 합니다.
2. 일치하는 모든 점을 탐색하고 투영 행렬을 통해 삼각 측량하고 삼각 측량 후 3D 점을 얻습니다.
여기에 이미지 설명 삽입

3. 삼각 측량된 3D 점 좌표가 유효한지(무한이 아님) 확인
여기에 이미지 설명 삽입

4. 두 카메라의 3D point의 depth 값과 optical center의 parallax angle의 양수와 음수를 통해 적법한지 확인
여기에 이미지 설명 삽입

5. 기준 프레임과 현재 프레임의 공간점 재투영 오차를 계산하고 임계값보다 크면 폐기
여기에 이미지 설명 삽입

계산된 3D 포인트는 포즈 R, T 및 카메라 내부 매개 변수를 통해 픽셀 좌표에 투영되고 재투영 오류는 이미지의 특징점 좌표로 계산되며 오류는 임계값을 초과할 수 없습니다. 임계값을 초과하지 않는 포인트를 내부 포인트라고 하고 임계값을 초과하는 포인트를 외부 포인트라고 합니다.
6. 테스트한 3D 포인트의 수를 세고 3D 포인트의 시차각을 기록합니다.
여기에 이미지 설명 삽입

7. 3D 포인트에서 더 작은 시차 각도를 가져와 각도 시스템 표현으로 변환합니다.
여기에 이미지 설명 삽입

(8) 초기화 프레임의 포즈 정보 기록
여기에 이미지 설명 삽입

(9) 맵 포인트 초기화(CreateInitialMapMonocular)
여기에 이미지 설명 삽입

코드는 다음과 같이 구현됩니다.
1. 초기화된 기준값과 현재 프레임이 키 프레임이고, 이 두 키 프레임을 초기화하여 맵에 삽입합니다.
여기에 이미지 설명 삽입

2. 삼각 측량으로 얻은 3D 포인트를 사용하여 맵 포인트 생성 MapPoints
여기에 이미지 설명 삽입

3. 키 프레임 간의 연결 관계 업데이트
여기에 이미지 설명 삽입

맵 포인트와 키 프레임 사이에 에지를 생성하고 각 에지는 가중치를 가지며 에지의 가중치는 키 프레임과 현재 프레임 사이의 공통 3D 포인트 수입니다. 4. 글로벌 BA 최적화, 모든 포즈 및 3D 최적화 동시에
포인트
여기에 이미지 설명 삽입

5. 스케일 정규화를 위해 장면의 중간 깊이를 취합니다.
여기에 이미지 설명 삽입

6. 두 프레임 간의 변환을 평균 깊이 1의 배율로 정규화합니다.
여기에 이미지 설명 삽입

7. 3D 포인트의 스케일을 1로 정규화
여기에 이미지 설명 삽입

8. 로컬 맵에 키 프레임을 삽입하고 정규화된 포즈와 로컬 맵 포인트를 업데이트합니다.

여기에 이미지 설명 삽입

추천

출처blog.csdn.net/weixin_43391596/article/details/129692273