2012-05-26 8 views
10

En todas partes en features2D clases veo los términos query y train. Por ejemplo, matches tienen trainIdx y queryIdx, y Matchers tienen el método train().¿Qué es `query` y` train` en openCV features2D

Sé la definición de las palabras train y query en inglés, pero no puedo entender el significado de estas propiedades o métodos.

P.S. Entiendo que es una pregunta muy tonta, pero tal vez es porque el inglés no es mi lengua materna.

Respuesta

11

Para completar la respuesta de Sansuiso, supongo que la razón de la elección de estos nombres debe ser que en alguna aplicación que tenemos un conjunto de imágenes (imágenes de entrenamiento) de antemano, por ejemplo, 10 imágenes tomadas en el interior de su oficina. Las características se pueden extraer y los descriptores de características se pueden calcular para estas imágenes. Y en tiempo de ejecución, se le da una imagen al sistema para consultar la base de datos entrenada. Por lo tanto, la imagen de consulta se refiere a esta imagen. Realmente no me gusta la forma en que han nombrado estos parámetros. Si tiene un par de imágenes estéreo y desea hacer coincidir las características, estos nombres no tienen sentido, pero debe elegir una convención, por ejemplo, llamar siempre la imagen izquierda a la imagen de consulta y la imagen derecha a la imagen de entrenamiento. Hice mi doctorado en visión artificial y algunas convenciones de nombres en OpenCV me parecen realmente confusas/tontas. Entonces, si encuentras estos confusos o tontos, no estás solo.

+5

Para ponerlo aún más simple, train es la imagen que aprendiste (funciones extraídas) de antemano, la consulta es la imagen que intentas emparejar con los entrenados. –

+0

Solía ​​llamar a estas cosas antes de otra manera: llamé 'train' como' ethalon' y 'query' como' sample'. –

+1

@Shambool, tengo una pregunta, parece una tontería, pero me confundió mucho. si pongo 2 trainDescripters trainA y trainB en flanker matcher for train. luego viene la consulta de consulta queryC, ¿se ejecutará el algoritmo de coincidencia para trainA y trainB con queryC? –

10
  • train: esta función construye el estado interior clasificador con el fin de hacerla operativa. Por ejemplo, piense en entrenando un SVM, o construyendo un kd-tree a partir de los datos de referencia. Quizás esté confundido porque este paso se conoce como y se aprende en en la literatura.

  • query es la acción de encontrar los vecinos más cercanos a un conjunto de puntos y, por extensión, también se refiere a todo el conjunto de puntos para los que desea un vecino más cercano. Recuerde que puede pedir a los vecinos de 1 punto o mucho en la misma llamada de función (al apilar los puntos de característica en una matriz).

  • trainIdx y queryIdx se refieren al índice de una pinta en la referencia/consulta establecido, respectivamente, es decir, le pide al matcher para el punto más cercano (almacenado en la posición de trainIdx) a algún otro punto (almacenado en la posición de queryIdx) . Por supuesto, se conoce trainIdx después de la llamada a la función. Si sus puntos se almacenan en una matriz, el índice será la línea de la característica considerada.

+1

Esta respuesta deja en claro que trainIdx y queryIdx se refieren a los conjuntos primero y segundo (descriptor/punto clave), respectivamente. –

+1

@GregKramida Creo que es al revés. Cuando las coincidencias se obtienen con 'matcher.match (descriptors1, descriptors2, matches)', entonces 'queryIdx' se indexará en' keypoints1' y 'trainIdx' en' keypoints2'. c.f. http://stackoverflow.com/a/13320083/2397253 – oarfish

+0

@oarfish, sí, tienes razón. Me pregunto si debería eliminar el comentario para que no confunda a nadie. –

3

entiendo "consulta" y "tren" de una manera muy ingenua, pero útil: "tren": un conjunto de datos o imagen es preprocesado para obtener una base de datos "consulta": un conjunto de datos de entrada o imagen que se pueden consultar en la base de datos que entrenamos antes. Espero que te ayude también.

+0

Eso no es ingenuo, eso es lo que es. O lo que debería ser ... Significa que un solo punto de tren puede asignarse a más de un punto de consulta, por un lado. Y también puede asignar todos los puntos de consulta, pero es posible que nunca se asignen algunos puntos de tren. – dividebyzero