Sé que puede calcular las homografías de la imagen al plano de la cámara utilizando puntos de correspondencia entre un "modelo perfecto" y los puntos de la imagen.
Lo estoy haciendo para un campo / campo de fútbol, y he usado la detección de bordes para encontrar las líneas blancas en el campo.
Pero la cámara no (siempre) cubre todo el campo, por lo que no puedo ver todas las esquinas ... y solo las esquinas son puntos 100% conocidos en el modelo (no hay otros puntos distinguidos).
Entonces, el problema es que, a menos que la línea se cruce con otra línea y forme una esquina, solo conozco los puntos de imagen de la línea, no sus correspondientes coordenadas "perfecto / mundo real" en el modelo.
¿Hay alguna forma en que pueda usar las líneas detectadas para calcular una homografía, o incluso solo un conjunto de homografías candidatas , incluso si las líneas detectadas no se cruzan entre sí y crean una esquina?
Imagen de ejemplo, que muestra el campo, nuestro campo de visión y los puntos del campo donde puedo conocer las coordenadas correspondientes del mundo real / modelo (círculos verdes), y un ejemplo de 2 líneas que podrían ser completamente inútiles desde nuestro campo de visión , No tengo ni idea exactamente en qué punto comienzan o se detienen en el mundo real / modelo correspondiente de la cancha:
Las líneas rojas son ejemplos de líneas que me gustaría usar, pero no conozco sus coordenadas del mundo real, y es difícil estimarlas porque dependiendo de la pose de la cámara, los puntos correspondientes podrían estar "en cualquier lugar".
fuente
Respuestas:
Explicaré dos enfoques para esto:
1) Un enfoque requeriría un algoritmo de coincidencia de línea. Después de hacer coincidir las líneas, simplemente puede usar los puntos finales de las líneas para calcular la homografía. Para lograr eso, los descriptores basados en EDLine o LSD se han propuesto recientemente en OpenCV. Además, también se implementan el hash y la coincidencia rápida de ellos. Mira los videos aquí:
http://www.youtube.com/watch?v=MqMjvSkM39k
http://www.youtube.com/watch?v=naSWTlbg3To
El reciente repositorio de opencv_contrib contiene el código fuente de estos métodos.
En el caso de que los puntos finales de la línea sean ruidosos, puede utilizar directamente las líneas para calcular las homografías. Dichos documentos luego leerían:
2) Aquí hay un método específico para los campos:
y
La idea es la siguiente: cualquier línea, parametrizada por sus coeficientes asigna a en la otra imagen usando:li=(u,v,1)T l′i=(x,y,1)T
De esta forma, la ecuación se puede conectar directamente al método DLT:
La única diferencia es la normalización, que encontrará en las referencias anteriores.
Adición de elipses: cualquier punto encuentra en la sección cónica si . Esto da lugar a la relación de transformación:x C xTCx=0
Las referencias anteriores también explican cómo insertar esta restricción en el algoritmo DLT.
Usando elipses y líneas, es posible derivar una relación proyectiva robusta.
fuente
Si las líneas no son paralelas, puede calcular el punto de su intersección y usarlo como punto de referencia. En su pintura, también puede usar los puntos morados:
Por cierto, la intersección de las líneas no necesita estar en la imagen. Mientras las líneas sean paralelas
Si las líneas son paralelas, puede usarlas para obtener restricciones adicionales. Por ejemplo, si tiene N <4 puntos y K líneas, puede estimar la transformación
Recordemos que la ecuación de transformación proyectiva es:
Su objetivo es encontrar los coeficientesa11,a12,a13,a21,a22,a23,a31,a32
Por lo tanto, si hay una línea que se asigna a , entonces:ax+by+c=0 Ax′+By′+C
Se puede reescribir como:
( x , y ) a x + b y + c = 0A,B,C son valores conocidos, porque calculaste las ecuaciones de las líneas. Puede ingresar cualquier punto para el cual , y obtener una restricción adicional. Combínelos con las restricciones que obtiene de los puntos, y podría obtener información adicional. Tenga en cuenta que no obtendrá más información de más de dos puntos, ya que cualquier tercer punto agregará líneas lineales dependientes a la matriz de restricciones.(x,y) ax+by+c=0
Referencias adicionales " Estimación de la homografía por Elan Dubrovsky " - Ver parte 2.3.1, estimación de la homografía a partir de líneas.
fuente