Estoy haciendo un proyecto para encontrar la velocidad de un vehículo a partir de las imágenes. Estamos tomando estas imágenes desde el interior del vehículo. Marcaremos un objeto de la primera imagen como referencia. Usando las propiedades del mismo objeto en la siguiente imagen, debemos calcular la velocidad del vehículo en movimiento. ¿¿¿Me puede ayudar alguien??? Estoy usando python opencv. He tenido éxito hasta encontrar el pixel marcado en la 2da imagen usando el método de flujo óptico. ¿Alguien puede ayudarme con el resto?Buscar la velocidad del vehículo a partir de las imágenes
Respuesta
Conociendo la frecuencia de adquisición, ahora debe encontrar la distancia entre las posiciones sucesivas del marcador.
Para encontrar esta distancia, le sugiero que calcule el pose del marcador para cada imagen. En términos generales, la "pose" es la matriz de transformación que expresa las coordenadas de un objeto con respecto a una cámara. Una vez que tenga esas coordenadas sucesivas, puede calcular la distancia y luego la velocidad.
La estimación de la posición es el proceso de calcular la posición y orientación de un objeto conocido 3D en relación con una cámara 2D. La pose resultante es la matriz de transformación que describe el referencial del objeto en el referencial de la cámara.
OpenCV implementa un algoritmo de estimación de pose: Posit. El doc dice:
dado algunos puntos 3D (en objeto sistema de coordenadas) del objeto, en menos cuatro puntos no coplanares, su proyecciones 2D en la imagen de la , y la longitud focal de la correspondiente cámara, el algoritmo es capaz de estimar la pose del objeto.
Esto significa:
- Debe conocer la longitud focal de la cámara
- Debe conocer la geometría de su marcador
- Debe ser capaz de igualar cuatro saben puntos de su marcador en la imagen 2D
Puede que tenga que calcular la distancia focal de la cámara utilizando el calibration routines proporcionado por OpenCV. Creo que tienes los otros dos datos requeridos.
Editar:
// Algorithm example
MarkerCoords = {Four coordinates of know 3D points}
I1 = take 1st image
F1 = focal(I1)
MarkerPixels1 = {Matching pixels in I1}
Pose1 = posit(MarkerCoords, MarkerPixels1, F1)
I2 = take 2nd image
F2 = focal(I2)
MarkerPixels2 = {Matching pixels in I2 by optical flow}
Pose2 = posit(MarkerCoords, MarkerPixels2, F2)
o1 = origin_of_camera * Pose1 // Origin of camera is
o2 = origin_of_camera * Pose2 // typically [0,0,0]
dist = euclidean_distance(o1, o2)
speed = dist/frequency
Edición 2: "¿Cuál es la frecuencia de adquisición" (Respuestas a los comentarios)
Calcular la velocidad de su vehículo equivale a calcular la velocidad del marcador. (En el primer caso, el referencial es el marcador conectado a la tierra, en el segundo caso, el referencial es la cámara conectada al vehículo.) Esto se expresa por la siguiente ecuación:
speed = D/(t2-t1)
Con:
D
la distancia[o1 o2]
o1
la posición del marcador en el momentot1
o2
la posición del marcador en timet2
Puede recuperar el tiempo transcurrido extrayendo t1
y t2
desde los metadatos de sus fotos, o desde la adquisición de frecuencia de su dispositivo de imágenes: t2-t1 = T = 1/F
.
"¿No será mejor marcar cosas simples como carteles? ¿Y si lo hacemos no podemos considerarlo como un objeto 2d?"
Esto no es posible con el algoritmo Posit (o con cualquier otro algoritmo de estimación de pose por lo que yo sé): requiere cuatro no coplanares puntos. Esto significa que no puede elegir un objeto 2D incrustado en un espacio tridimensional, debe elegir un objeto con cierta profundidad.
Por otro lado, puede usar una forma simple realmente, siempre que se trate de un volumen. (Un cubo, por ejemplo).
Tengo una seria duda. Ya que tendremos la libertad de marcar objetos por nuestra cuenta, ¿no sería mejor marcar cosas simples como carteles (principalmente rectángulos en forma)? Y si lo hace, ¿podemos considerarlo como un objeto 2d? ¿Y cuál es la frecuencia de adquisición? Soy un poco nuevo en ese tipo de términos. –
Y gracias por su valiosa respuesta. :) –
- 1. Vehículo 2 Preguntas de comunicación del vehículo
- 2. Continuación - Detección de la matrícula del vehículo
- 3. Buscar caché de JQuery a partir del CDN
- 4. UIToolBar personalizado a partir de imágenes
- 5. Mejorando la velocidad de procesamiento de imágenes
- 6. Crear video a partir de imágenes
- 7. Python, XPath: Buscar todos los enlaces a las imágenes
- 8. cuarzo: Obtención de las imágenes del diff de dos imágenes
- 9. Buscar imágenes de color similar
- 10. Magento: obtenga las reglas de precios a partir del pedido
- 11. autonumber ImageMagick a partir del 1
- 12. Android: hacer animación a partir de imágenes estáticas
- 13. Creación de videos a partir de series de imágenes?
- 14. imágenes de slow ffmpeg por segundo al crear video a partir de imágenes
- 15. Velocidad de acceso de archivos frente a la velocidad de acceso a la base de datos
- 16. ¿Fórmula para controlar el movimiento de un vehículo tipo tanque?
- 17. Cómo buscar texto en las imágenes con el control del navegador + F
- 18. Agregar borde a las imágenes
- 19. La mejor manera de cargar imágenes a partir paquete de aplicaciones
- 20. ¿Cómo impide Flickr a las personas descargar imágenes del sitio?
- 21. Crear una máscara a partir de la diferencia entre dos imágenes (iPhone)
- 22. ¿La velocidad de navegación depende del navegador?
- 23. fósforo o BUSCARV a partir del extremo de la gama
- 24. ¿Cómo puedo aumentar la velocidad del cursor en la terminal?
- 25. Controle la velocidad del mouse con JS
- 26. Estimar la velocidad del motor del navegador JS para deshabilitar las animaciones de forma condicional
- 27. reconstrucción 3D a partir de 2 imágenes sin información sobre la cámara
- 28. Obtener edad a partir del nacimiento
- 29. Buscar todas las funciones existentes para las dependencias del paquete?
- 30. ¿Cómo puedo buscar datos sobre un libro a partir de su número de código de barras?
¿No sería esto también altamente dependiente de la cámara utilizada para tomar imágenes? La velocidad del obturador también debe ser considerada. – darioo
hay mucho que considerar: p. la distancia perpendicular del objeto marcado desde la línea de movimiento de su automóvil, el tiempo entre las 2 imágenes – mauris
, probablemente debería proporcionar algún código para mostrar su proceso. Sin eso, será difícil para cualquier persona responder. –