matchfeatures feature c++ opencv computer-vision feature-detection orb

c++ - feature - Encontrar una buena homografía desde diferentes puntos de vista de los objetos?



orb opencv c++ (3)

Estoy haciendo la detección de objetos usando la extracción de características (tamizar, orb).

Quiero extraer la característica ORB desde un punto de vista diferente del objeto (imágenes del tren) y luego hacer coincidir todas ellas con una imagen de consulta.

El problema al que me enfrento es: ¿cómo puedo crear una buena homografía desde el punto clave desde un punto de vista diferente de la imagen que tiene, por supuesto, diferentes tamaños?

Editar

Estaba pensando en crear una homografía para cada imagen de tren que obtuviera, digamos, 3-4 coincidencias y luego calcular una homografía "mala" ...

El problema surge cuando, por ejemplo, dices solo 1-2 coincidencias de cada imagen de tren, en ese punto no puedes crear ni siquiera 1 homografía

Código para crear homografía

//> For each train images with at least some good matches ?? H = findHomography( train, scene, CV_RANSAC ); perspectiveTransform( trainCorners, sceneCorners, H);


Para encontrar una buena homografía necesitas concordancias precisas de tus puntos clave. Necesitas 4 coincidencias.

El methos más común es DLT combinado con RANSAC. DLT es una transformación lineal que encuentra la matriz de homoximetría 3x3 que proyecta tus puntos clave en la escena. RANSAC encuentra el mejor conjunto de inliers / outliers que satisfaga el modelo matemático, por lo que encontrará los mejores 4 puntos como entrada de DLT.

EDITAR

Necesita encontrar puntos clave robustos. Se supone que SIFT hace eso, escala y perspectiva invariante. No creo que necesites entrenar con diferentes imágenes. Encontrar una homografía mala no tiene sentido. Necesitas encontrar una única homografía para un objeto detectado, y esa homografía será la transformación entre el marcador y el objeto detectado. La homografía es precisa, no tiene sentido encontrar un medio.


¿Has probado el enfoque de obtener puntos clave a partir de las vistas del objeto: train_kps_1, train_kps_2 ... luego unir esas matrices con la escena, luego selecciona las mejores coincidencias de esas varias matrices que resultan en una única matriz de buenas coincidencias. Y finalmente use ese resultado para encontrar la homografía como el ''tren''.

La clave aquí es cómo seleccionar las mejores coincidencias, que es una pregunta diferente, en la que puede encontrar un buen guión aquí:

http://answers.opencv.org/question/15/how-to-get-good-matches-from-the-orb-feature/

Y tal vez aquí:

http://answers.opencv.org/question/2493/best-matches/


Creo que no tiene sentido hacer eso, ya que un par de imágenes A y B no tienen nada que ver con un par de imágenes B y C cuando hablas de homografía. Obtendrás diferentes conjuntos de buenas coincidencias y diferentes homografías, pero las homografías no estarán relacionadas y ninguna minimización de errores tendría sentido.

Toda minimización tiene que estar dentro de las coincidencias, puntos clave y descripciones considerando solo el par de imágenes.

Hay una idea similar a lo que preguntas en el descriptor FREAK. Puede entrenar los pares seleccionados con un conjunto de imágenes. Eso significa que FREAK decidirá el mejor patrón para extraer descriptores basándose en un conjunto de imágenes. Después de este entrenamiento se supone que debes encontrar mathces más robustos que te den una mejor homografía.