ORB-SLAM2 análisis de código fuente (monocular) - inicialización de mapa monocular

ORB-SLAM2 análisis de código fuente (monocular) - inicialización de mapa monocular

1. Inicialización Monocular

La inicialización del mapa monocular es diferente de las cámaras RGBD y binoculares. El proceso de inicialización del mapa monocular llevará mucho tiempo. La razón es que el mapa monocular no puede obtener directamente la profundidad como las cámaras RGBD y binoculares, para construir el mapa. puntos. Monocular necesita hacer coincidir los puntos característicos entre dos marcos y luego usar la triangulación para construir puntos de mapa, por lo que monocular tiene ciertos requisitos para los dos marcos iniciales para garantizar que se puedan extraer suficientes puntos característicos y la distancia entre los dos marcos Hay suficientes coincidencias entre ellos, de modo que los puntos del mapa se pueden construir por triangulación

inserte la descripción de la imagen aquí

2. Los puntos característicos de los dos marcos inicializados deben ser mayores que un cierto umbral

inserte la descripción de la imagen aquí

Los puntos de características extraídos del marco de inicialización deben ser mayores que el umbral establecido, de modo que se puedan hacer coincidir suficientes puntos de coincidencia para la coincidencia de características posterior

3. Realice la coincidencia de características entre los dos marcos inicializados, y el punto de coincidencia debe ser mayor que un cierto umbral

inserte la descripción de la imagen aquí

Hay suficientes puntos coincidentes de características para la triangulación posterior, y se pueden generar suficientes puntos de mapa para inicializar el mapa

4. Inicialice la función de coincidencia de puntos característicos entre fotogramas (SearchForInitialization)

inserte la descripción de la imagen aquí

Llame a esta función, ingrese el marco de referencia inicializado y el marco actual, ventana de búsqueda para la búsqueda de reproyección. Devuelve la información de coincidencia del punto de característica correspondiente y el punto de coincidencia.
El código específico se implementa de la siguiente manera:

(1) Construya un histograma de rotación

inserte la descripción de la imagen aquí

Para filtrar los puntos de función de rotación no convencionales en el histograma, porque cuando se rota la imagen, los puntos de píxeles generales se rotarán en una dirección uniforme en un cierto ángulo, por lo que debemos eliminar los ángulos de rotación que no son en la dirección principal.
(2) Atraviese los puntos característicos del marco de referencia, busque la ventana de radio en el marco actual y encuentre los puntos característicos candidatos (GetFeaturesInArea)
inserte la descripción de la imagen aquí

El método de emparejamiento violento no se usa aquí, porque el método de emparejamiento violento consume demasiado tiempo. Las coordenadas del punto característico del marco de referencia se ingresan directamente aquí porque el movimiento entre los dos marcos es relativamente pequeño, por lo que los cambios entre las imágenes no serán muy diferentes, y se desconoce la matriz de transformación entre el marco actual y el marco de referencia, y el seguimiento es generalmente Las coordenadas proyectadas en el marco actual se ingresan a través de la matriz de transformación, por lo que los puntos característicos del marco de referencia se usan como coordenadas para dibujar un círculo en el marco actual, y los puntos candidatos correspondientes de características coincidentes son seleccionado dentro del círculo.
inserte la descripción de la imagen aquí

La implementación interna de GetFeaturesInArea es la siguiente:
1) Calcular el rango de búsqueda de puntos característicos:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Divida la imagen en cuadrículas, tome las coordenadas del punto característico del marco de referencia como el centro del círculo en el marco actual, conecte un cuadrado con un radio de r y obtenga los puntos característicos en el cuadrado como puntos de coincidencia candidatos 2) Obtener los puntos característicos del círculo como
candidatos
inserte la descripción de la imagen aquí

(3) Obtenga el descriptor del punto característico del marco de referencia, calcule la distancia con el descriptor del punto característico candidato encontrado previamente y filtre el mejor punto coincidente y el segundo mejor punto coincidente
inserte la descripción de la imagen aquí

Seleccione los puntos característicos candidatos por distancia de Hamming, seleccione el mejor punto característico y el segundo mejor punto característico
(4) Compruebe el mejor punto coincidente seleccionado y el segundo mejor par coincidente
inserte la descripción de la imagen aquí

Incluso si calculamos la distancia del mejor descriptor, esta distancia debería ser inferior a un determinado umbral.
La distancia óptima es más pequeña que la relación establecida que la segunda distancia óptima, por lo que el reconocimiento de puntos característicos es mayor.
Si los puntos de características candidatos encontrados se han emparejado antes, significa que se han producido coincidencias repetidas y la coincidencia original también se elimina
(5) Excluya la parte "no principal" en el histograma de rotación

inserte la descripción de la imagen aquí

5. Obtenga las poses relativas de los dos fotogramas iniciales y obtenga los puntos iniciales del mapa a través de la triangulación (Inicializar)

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Calcule la pose de la cámara actual a través de la información coincidente de los puntos de diagnóstico especiales obtenidos anteriormente, y genere los puntos iniciales del mapa a través de la triangulación. La
implementación específica del código es la siguiente:
(1) Vuelva a registrar la relación coincidente de la característica pares de puntos
inserte la descripción de la imagen aquí

(2) De acuerdo con el número de iteraciones de RANSAC, seleccione aleatoriamente ocho pares de puntos coincidentes para cada iteración
inserte la descripción de la imagen aquí

Usaremos el método de ocho puntos para calcular la matriz de homografía y la matriz fundamental, y usaremos la matriz con un puntaje alto para restaurar la pose de la cámara. Entonces, cada iteración usa ocho pares de puntos diferentes para calcular la matriz de puntaje alto
(3) A través de ocho pares coincidentes, calcule el puntaje de la matriz homográfica (H) y la matriz fundamental (F)
inserte la descripción de la imagen aquí

Abra dos hilos, calcule la matriz homográfica (H) y la matriz fundamental (F) al mismo tiempo, obtenga las puntuaciones de las dos matrices y luego juzgue qué matriz usar para inicializar la pose comparando las puntuaciones.
(4) De acuerdo con el puntaje calculado de la matriz de homografía y la matriz básica, determine qué matriz se usa para inicializar la pose
inserte la descripción de la imagen aquí

Una puntuación más alta de la matriz de homografía indica que la imagen del cuadro de inicialización está sesgada hacia la planaridad, y
una puntuación más alta de la matriz fundamental indica que la imagen del cuadro de inicialización está sesgada hacia la no planaridad.
(5) Utilice la pose obtenida por la matriz de homografía (H) e inicialice el punto del mapa (ReconstruirH)
inserte la descripción de la imagen aquí

Puede calcular 8 grupos de soluciones, verificamos estos 8 grupos y seleccionamos la solución que genera la mayor cantidad de puntos 3D frente a la cámara como la solución óptima (verificar a través de la función CheckRT para generar puntos 3D) (6) Usar la matriz fundamental (F) para
encontrar la pose e inicializar el punto del mapa (ReconstruirF)
inserte la descripción de la imagen aquí

Resuelva dos soluciones R y dos soluciones t de la matriz esencial, un total de cuatro conjuntos de soluciones
para verificar las cuatro combinaciones de R y t, y seleccione la mejor combinación.Si una cierta combinación hace que el punto 3D recuperado frente a la cámara El número es el más grande, entonces esta combinación es la mejor combinación (verificado por la función CheckRT)
(7) Triangular los puntos coincidentes entre la pose obtenida (R, T) y el cuadro de inicialización, y obtener el punto interior (CheckRT)
inserte la descripción de la imagen aquí

Para el par de puntos característicos dado y su R t , verifique la validez de la solución por triangulación, también conocida como verificación de quiralidad
1. Calcule e inicialice la matriz de proyección entre dos marcos:
inserte la descripción de la imagen aquí

Cuando se inicialice el mapa, utilizaremos el primer cuadro del cuadro de inicialización como nuestro sistema de coordenadas mundiales, con el centro óptico de la cámara como origen.
2. Atraviese todos los puntos coincidentes, triangule a través de la matriz de proyección y obtenga los puntos 3D después de la triangulación
inserte la descripción de la imagen aquí

3. Compruebe si las coordenadas del punto 3D triangulado son legales (no infinitas)
inserte la descripción de la imagen aquí

4. Verifique si es legal a través del positivo y negativo del valor de profundidad del punto 3D y el ángulo de paralaje del centro óptico de las dos cámaras.
inserte la descripción de la imagen aquí

5. Calcular el error de reproyección del punto espacial en el marco de referencia y el marco actual, y descartarlo si es mayor que el umbral
inserte la descripción de la imagen aquí

El punto 3D calculado se proyecta en las coordenadas del píxel a través de la pose R, T y los parámetros internos de la cámara, y el error de reproyección se calcula con las coordenadas del punto característico en la imagen. El error no puede exceder nuestro umbral. Llamamos puntos internos a los puntos que no superan el valor umbral, y puntos externos a los puntos que superan el valor umbral
6. Cuente el número de puntos 3D probados y registre el ángulo de paralaje de los puntos 3D
inserte la descripción de la imagen aquí

7. Obtenga el ángulo de paralaje más pequeño en el punto 3D y conviértalo en una representación del sistema de ángulos
inserte la descripción de la imagen aquí

(8) Grabe la información de pose del marco de inicialización
inserte la descripción de la imagen aquí

(9) Inicializar puntos del mapa (CreateInitialMapMonocular)
inserte la descripción de la imagen aquí

El código se implementa de la siguiente manera:
1. El valor de referencia inicializado y el cuadro actual son cuadros clave, inicialice estos dos cuadros clave e insértelos en el mapa
inserte la descripción de la imagen aquí

2. Utilizar los puntos 3D obtenidos por triangulación para generar puntos del mapa MapPoints
inserte la descripción de la imagen aquí

3. Actualizar la relación de conexión entre fotogramas clave
inserte la descripción de la imagen aquí

Cree un borde entre el punto del mapa y el cuadro clave, cada borde tiene un peso, y el peso del borde es el número de puntos 3D comunes entre el cuadro clave y el cuadro actual 4. Optimización BA global, optimizar todas las poses y 3D puntos al mismo
tiempo
inserte la descripción de la imagen aquí

5. Tome la profundidad media de la escena para la normalización de la escala
inserte la descripción de la imagen aquí

6. Normalizar la transformación entre dos fotogramas a una escala de profundidad media 1
inserte la descripción de la imagen aquí

7. Normaliza la escala de puntos 3D a 1
inserte la descripción de la imagen aquí

8. Inserte el cuadro clave en el mapa local y actualice la pose normalizada y los puntos del mapa local

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_43391596/article/details/129692273
Recomendado
Clasificación