Análisis de código fuente ORB-SLAM2 (monocular) - extracción de puntos característicos

Análisis de código fuente ORB-SLAM2 (monocular) - extracción de puntos característicos

Primero, convierta la imagen en una imagen en escala de grises.

inserte la descripción de la imagen aquí

2. Extraer características de la imagen

inserte la descripción de la imagen aquí

Si este cuadro de imagen es una imagen de inicialización, extraiga el doble de puntos característicos para la inicialización posterior

3. Constructor de monturas monoculares (Frame)

inserte la descripción de la imagen aquí

4. Lee los parámetros de la pirámide de imágenes.

inserte la descripción de la imagen aquí

Cinco, extracción de puntos característicos (ExtractORB)

inserte la descripción de la imagen aquí

El uso interno de funciones afines es similar a las llamadas a funciones.La
función de llamada específica:
inserte la descripción de la imagen aquí

El flujo de código de implementación específico:
(1) Construir una pirámide de imágenes (ComputePyramid)
inserte la descripción de la imagen aquí

1. Calcule el tamaño de cada capa de la imagen de la pirámide y el número de puntos característicos extraídos
inserte la descripción de la imagen aquí

2. Escale la imagen para que se convierta en el tamaño de imagen de la pirámide en este nivel
inserte la descripción de la imagen aquí

3. Rellene cada capa de la imagen de la pirámide (copyMakeBorder)
inserte la descripción de la imagen aquí

¿Por qué acolchado?
Debido a que usamos el método FAST para extraer los puntos característicos del ORB, necesitamos llenar el límite para que se puedan extraer los puntos de esquina de los puntos límite y, en la extracción posterior del descriptor, primero debemos realizar el desenfoque gaussiano en el image y luego extraiga el descriptor, por lo que la imagen también se llena,

(2) Los puntos característicos (ComputeKeyPointsOctTree) de la imagen extraída homogéneamente
son diferentes de los puntos característicos extraídos por Opencv. Los puntos característicos extraídos por Opencv se extraen de toda el área de la imagen, por lo que los puntos característicos extraídos pueden concentrarse en ciertas áreas. Y esperamos que cada área de la imagen tenga puntos característicos correspondientes, y que los puntos característicos uniformes puedan mejorar la precisión de nuestro cálculo de pose.
inserte la descripción de la imagen aquí

1. Divida cada capa de imagen piramidal en bloques, cada 30*30 en un bloque, y divida la imagen en muchos bloques
inserte la descripción de la imagen aquí

Luego realizamos la extracción de puntos de características en estos bloques en lugar de extraer toda la imagen
2. Calcular el área efectiva de extracción de características de la imagen, porque la imagen se llenó previamente
inserte la descripción de la imagen aquí

El llenado previo de la imagen es necesario para el llenado único del algoritmo subsiguiente, pero no necesitamos llenar tanto para la extracción de puntos característicos aquí, por lo que necesitamos interceptar algunas áreas de llenado no válidas y mantener el área de la imagen donde queremos. extraiga los puntos de las esquinas Después de obtener el área de extracción de puntos característicos efectivos, la imagen se divide en bloques y la imagen se divide en cuadrículas de bloques
3. Extraiga puntos característicos para cada bloque de cuadrícula de la imagen
inserte la descripción de la imagen aquí

4. Utilice el umbral de esquina predeterminado para extraer puntos de esquina. Si no se extraen puntos de esquina, baje el umbral para extraer
inserte la descripción de la imagen aquí

Transforme las coordenadas, debido a que los puntos característicos extraídos en la cuadrícula son relativos a la cuadrícula, necesitamos transformar el sistema de coordenadas en la imagen.
5. Use quadtree para filtrar puntos característicos (DistributeOctTree)
inserte la descripción de la imagen aquí

El número de características extraídas supera el umbral de puntos característicos que establecimos, por lo que debemos filtrar los puntos característicos. El quadtree divide la imagen en el número de puntos característicos que queremos extraer y selecciona uno de estas áreas divididas. Los mejores puntos característicos servir como representantes
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

6. Calcule los descriptores de los puntos característicos.
Cuente todos los puntos característicos y construya la matriz de descriptores de puntos característicos.
inserte la descripción de la imagen aquí

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

El desenfoque gaussiano se realiza aquí para eliminar puntos de ruido en la imagen, mejorando así la precisión del descriptor, y no usamos el modo gaussiano antes de extraer los puntos característicos. Se debe a que el modo gaussiano eliminará la información de los bordes de la imagen, lo que afectará nuestra extracción de puntos característicos.

Calcule el descriptor del punto característico y asigne las coordenadas del punto característico extraídas de la pirámide de la imagen a la imagen original
inserte la descripción de la imagen aquí

6. Use la función de corrección de OpenCV y la referencia interna para corregir los puntos de características extraídos (UndistortKeyPoints)

Debido a la lente, la imagen que obtenemos estará distorsionada.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

7. Calcule el límite de la imagen después de eliminar la distorsión (ComputeImageBounds)

Nuestra imagen estará distorsionada, por lo que debemos corregir la imagen. Después de que la imagen esté distorsionada, la imagen original tendrá un borde. Es necesario reposicionar las esquinas superior izquierda e inferior derecha de la imagen y reposicionar el borde de la imagen. .

inserte la descripción de la imagen aquí

8. Asigne los puntos de características a la cuadrícula de imágenes y luego use la cuadrícula de imágenes para la coincidencia de imágenes (AssignFeaturesToGrid)

inserte la descripción de la imagen aquí

Supongo que te gusta

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