Sie sind auf Seite 1von 5

y, finalmente, calcOpticalFlowFarneback () basado en [10].

El último se considera
uno.
De los mejores métodos para obtener campos de flujo denso. Veamos un ejemplo
de uso
esto para encontrar vectores de movimiento en video (la versión de Lucas-Kanade
es el tema de la próxima
sección).
Intenta ejecutar el siguiente script.
Este ejemplo capturará imágenes de una cámara web y llamará a la estimación del flujo
óptico. en cada par de imágenes consecutivas. Los vectores de flujo de movimiento se
almacenan en el canal de dos canales. flujo de imagen devuelto por
calcOpticalFlowFarneback (). Además de lo anterior cuadro y el cuadro actual, esta
función toma una secuencia de parámetros. Mira Ponlos en la documentación si te
interesa. La función auxiliar draw_flow () traza los vectores de movimiento en puntos de
muestra regularmente en la imagen. Utiliza el OpenCV Las funciones de dibujo de línea ()
y círculo () y el paso variable controlan el espaciado de Las muestras de flujo. El resultado
puede parecerse a las capturas de pantalla en la Figura 10.5. Aquí el Las posiciones de
las muestras de flujo se muestran como una cuadrícula de círculos verdes y los vectores
de flujo. con líneas muestran cómo se mueve cada punto de muestra.

El algoritmo de Lucas-Kanade
El seguimiento es el proceso de seguimiento de objetos a través de una secuencia de
imágenes o video. La forma más básica de seguimiento es seguir los puntos de interés,
como las esquinas. Un famoso El algoritmo para esto es el algoritmo de seguimiento de
Lucas-Kanade, que utiliza una óptica dispersa. algoritmo de flujo. El seguimiento de
Lucas-Kanade se puede aplicar a cualquier tipo de funciones, pero generalmente hace
uso de puntos de esquina similares a los puntos de esquina de Harris en la Sección 2.1.
La función goodFeaturesToTrack () detecta esquinas según un algoritmo de Shi y Tomasi
[33] donde las esquinas son puntos con dos grandes valores propios del tensor de
estructura (Harris matriz) ecuación (2.2) y donde el valor propio más pequeño está por
encima de un umbral. La ecuación de flujo óptico está sub-determinada (lo que significa
que hay demasiados incógnitas por ecuación) si se considera por píxel. Suponiendo que
los píxeles vecinos tienen el mismo movimiento, es posible apilar muchas de estas
ecuaciones

en un sistema de ecuaciones como esta


Para algún barrio de n píxeles. Esto tiene la ventaja de que el sistema ahora tiene Más
ecuaciones que incógnitas y se pueden resolver con métodos de mínimos cuadrados.
Típicamente, la contribución de los píxeles circundantes se ponderó de modo que los
píxeles más alejados lejos tienen menos influencia Una ponderación gaussiana es la opción
más común. Esto gira la matriz de arriba en el tensor de estructura en la ecuación (2.2) y
tenemos la relación.

Este sistema de ecuaciones sobredeterminado se puede resolver en un sentido de mínimos


cuadrados y la vector de movimiento es dado por

Esto es solucionable solo cuando ATA es invertible, que es por construcción si se


aplica en
Los puntos de la esquina de Harris o las "buenas características para rastrear" de
Shi-Tomasi. Así es como el
Los vectores de movimiento se calculan en los algoritmos de seguimiento de
Lucas-Kanade.
El seguimiento estándar de Lucas-Kanade funciona para pequeños
desplazamientos. Para manejar mas grande
Desplazamientos se utiliza un enfoque jerárquico. En este caso se computa el flujo
óptico.
Versiones gruesas a finas de la imagen. Esto es lo que hace la función OpenCV.
calcOpticalFlowPyrLK () hace.
Las funciones de Lucas-Kanade están incluidas en OpenCV. Veamos cómo usar
esos
para construir una clase de seguimiento de Python. Cree un archivo lktrack.py y
agregue la siguiente clase
y constructor.

El objeto de seguimiento se inicializa con una lista de nombres de archivos. Las


variables características y
pistas mantendrán los puntos de la esquina y sus posiciones seguidas. También
utilizamos una variable.
para realizar un seguimiento de la trama actual. Definimos tres diccionarios con
parámetros para
la extracción de características, el seguimiento y el refinamiento de puntos de
subpíxeles.
Ahora, para comenzar a detectar puntos, necesitamos cargar la imagen real, crear
escala de grises
Versión y extraer los puntos "buenas características para rastrear". La función
OpenCV haciendo
El trabajo principal es goodFeaturesToTrack (). Agrega este método detect_points
() a la
clase.

Las ubicaciones de los puntos se refinan utilizando cornerSubPix () y se almacenan en las


variables miembro Características y pistas. Tenga en cuenta que la ejecución de esta función borra
el historial de seguimiento. Ahora que podemos detectar los puntos, también necesitamos
rastrearlos. Primero necesitamos para obtener el siguiente fotograma, luego aplique la función
OpenCV calcOpticalFlowPyrLK () que descubre dónde se movieron los puntos y elimina y limpia las
listas de puntos rastreados.
Este método salta a un cuadro dado o simplemente al siguiente si no se da ningún argumento.
Finalmente, también queremos poder dibujar el resultado usando ventanas OpenCV y funciones de
dibujo. Agregue este método draw () a la clase LKTracker.

Ahora tenemos un completo sistema de seguimiento autónomo que utiliza funciones OpenCV.
Uso del rastreador
Vamos a unirlo todo usando esta clase de rastreador en un seguimiento real guión. El siguiente
script inicializará un objeto de seguimiento, detectará y rastreará Señala a través de la secuencia y
dibuja el resultado.

El dibujo es un cuadro a la vez y muestra los puntos seguidos actualmente. Prensado cualquier
tecla se moverá a la siguiente imagen en la secuencia. Las ventanas de figuras resultantes. para
las primeras cuatro imágenes de la secuencia del corredor de Oxford (una de las vistas múltiples
de Oxford conjuntos de datos disponibles en http://www.robots.ox.ac.uk/~vgg/data/data-
mview.html) como en la figura 10.6.
Usando generadores
Agregue el siguiente método a la clase LKTracker

Esto crea un generador que facilita el paso a través de una secuencia y obtener pistas y las
imágenes como matrices RGB para que sea fácil trazar el resultado. Para usarlo en la secuencia
clásica del "dinosaurio" de Oxford (de la misma página de dataset de múltiples vistas que la
corredor arriba) y trazar los puntos y sus pistas, el código se ve así:

Este generador hace que sea realmente fácil de usar la clase de rastreador y oculta
completamente la Funciones OpenCV del usuario. El ejemplo genera una trama como la
que se muestra en Figura 10.7 y la parte inferior derecha de la Figura 10.6.

10.5 Más ejemplos


Con OpenCV viene una serie de ejemplos útiles de cómo usar python. interfaz. Estos se
encuentran en el sub-directorio de muestras / python2 / y son una buena manera de
familiarizarse con OpenCV. Aquí hay algunos ejemplos seleccionados para ilustrar otros
Capacidades de OpenCV.

Pintando
La reconstrucción de partes perdidas o deterioradas de las imágenes se llama
pintura. Esta
cubre ambos algoritmos para recuperar partes perdidas o dañadas de datos de
imagen para restauración
fines, así como la eliminación de ojos rojos u objetos en aplicaciones de edición de
fotos. Típicamente
una región de la imagen está marcada como "corrupta" y se debe rellenar con los
datos
Del resto de la imagen.
Pruebe el siguiente comando:

Esto abrirá una ventana interactiva donde puede dibujar regiones para pintar. los los
resultados se muestran en una ventana separada. Un ejemplo se muestra en la Figura 10.8.

Segmentación con la transformación de cuenca. La cuenca hidrográfica es una técnica de


procesamiento de imágenes que se puede utilizar para la segmentación. UN (Graylevel) la
imagen se trata como un paisaje topológico que se "inunda" de un número de las regiones
de semillas. Por lo general, se utiliza una imagen de gradiente de magnitud, ya que tiene
crestas en bordes fuertes y hará que la segmentación se detenga en los bordes de la
imagen.

Se abrirá una ventana interactiva donde podrá dibujar las regiones de semilla que desee.
El algoritmo para utilizar como entrada. Los resultados se muestran en una segunda
ventana con colores. representando regiones superpuestas en una versión en escala de
grises de la imagen de entrada. Detección de línea con una transformada de Hough. La
transformada de Hough (http://en.wikipedia.org/wiki/Hough_transform) es un método Para
encontrar formas en imágenes. Funciona mediante un procedimiento de votación en el
parámetro. Espacio de las formas. El uso más común es encontrar estructuras de líneas en
imágenes. En eso Los bordes del caso y los segmentos de línea se pueden agrupar por
ellos votando por el mismo Parámetros de línea en el espacio de parámetros 2D de líneas.
El ejemplo de OpenCV detecta líneas utilizando este enfoque2. Pruebe el siguiente
comando:

Esto da dos ventanas como las que se muestran en la Figura 10.10. Una ventana muestra
el imagen de origen en escala de grises, la otra muestra el mapa de borde utilizado junto
con las líneas Detectado como aquellos con más votos en el espacio de parámetros. Tenga
en cuenta que las líneas son siempre infinito, si desea encontrar los puntos finales de los
segmentos de línea en la imagen que puede usar El mapa de borde para tratar de
encontrarlos.

Das könnte Ihnen auch gefallen