Rastreadores ópticos: ASEF y MOSSE

Una de las subtareas importantes de la analítica de video es rastrear objetos en un video. No es tan primitivo que tuve que bajar al nivel de píxel por píxel, pero no es tan complejo como para requerir sin ambigüedad una red neuronal multicapa para la solución. El seguimiento se puede usar como un fin en sí mismo y como parte de otros algoritmos:

  • Contando personas únicas que ingresaron a una determinada zona o cruzaron la frontera en un marco
  • Identificación de rutas típicas de automóviles en un estacionamiento y personas en una tienda.
  • Rotación automática de la cámara de vigilancia cuando el objeto se desplaza

Sin siquiera mirar la literatura, puedo decir con confianza que la mejor manera de resolver el problema es usar redes neuronales. En general, no podría escribir nada más, pero no siempre es posible apresurarse en una tarea con un par de GTX 1080Ti. A quién le importa cómo rastrear objetos en el video en tales casos, por favor, debajo de cat. Trataré no solo de explicar cómo funcionan los rastreadores ASEF y MOSSE, sino de llevarlo a la solución para que las fórmulas parezcan obvias.

Para comenzar, responderemos una pregunta preliminar: ¿por qué inventar algo cuando puedes alimentar una pila de videos de flujo de tensor y dejar la computadora por un par de semanas? Los enfoques de redes neuronales tienen un inconveniente grave: incluso en las tarjetas de video modernas es difícil lograr una buena velocidad de disparo desde las redes. Esto no es un problema si analizamos el video grabado, pero inserta un palo en las ruedas si desea trabajar en tiempo real. Supongamos que queremos procesar video de cinco cámaras a 10 FPS. Incluso con condiciones relativamente leves, una red neuronal debe tener un tiempo de inferencia inferior a  frac10005 times10=$2 milisegundos (en condiciones de completo no paralelismo). A modo de comparación, YoloV3, una red clasificadora con una arquitectura relativamente simple, puede escupir una imagen en 50 milisegundos Además, las soluciones basadas en tarjetas gráficas potentes pueden ser muy costosas.

Este artículo asume que ya ha tratado con el procesamiento de imágenes, está familiarizado con las operaciones básicas de álgebra lineal (convolución, norma, inversión de matriz) y, en general, comprende la transformación de Fourier.

De aquí en adelante:

  • A odotB significa multiplicación matricial por elementos A y B
  • A otimesB denota convolución de matrices A y B
  •  hatA( omega, nu)= mathcalF(A(x,y)) significa que  hatA( omega, nu) - matriz de frecuencia de la transformada rápida de Fourier aplicada a la imagen A .
  •  parallelA parallel2 - indica la suma de los cuadrados de los elementos de la matriz A

Decisión trivial


A primera vista, la tarea de rastrear un tema específico no parece tan complicada.

Podemos tener T fotogramas consecutivos de video It el tamaño w en h píxeles En el cuadro inicial del video I0 un rectángulo se rodea alrededor de algún objeto F0m en n . Es necesario encontrar la ubicación de este cuerpo en todos los demás cuadros. It .

Eliminamos el ruido en las imágenes, luego normalizamos cada una de ellas en el rango de -1 a 1 para que los cambios generales en el brillo no afecten la detección. Tome el primer fotograma del video sin marcado I1 . Si I0 y I1 - cuadros de video vecinos con buen FPS, es poco probable que el objeto deseado esté muy alejado de su posición original. Aprovecha esto. Recortar I1 rectángulo F1 desde el lugar donde se encontraba previamente el cuerpo deseado. "Arrastrar" F0 a través de F1 y en cada punto calculamos el cuadrado de la suma de las diferencias

GL2(i,j)= parallelF1(i,j)F0 parallel2,i in[0,m],j in[0,n]

donde calcular la diferencia en GL2(i,j) necesita combinar el centro F0 con elemento (i,j) en F1 , y los valores faltantes a cero. Después de eso en la matriz GL2 se busca el mínimo; su ubicación menos las coordenadas del centro F1 y será el desplazamiento del objeto deseado por I1 .

Para que una transición aguda a cero no "suene" durante la detección, es mejor tomar inicialmente el rectángulo un poco más de lo necesario y reducir suavemente a cero los valores más cercanos a los bordes F0 y F1 . Para esto, cada uno de F necesita ser multiplicado por la máscara. Para objetos cuadrados, el buen viejo expositor lo hará. A= exp frac(xi)2+(yj)2 sigma2 (donde (x,y) Es el centro de la ventana), pero en el caso general es mejor tomar una ventana Hanning bidimensional.

Para I2 la ventana F2 tomado de la posición prevista en el marco I1 Y así sucesivamente.

Ejemplo


En cambio L2 se pueden usar normas L1 ( GL1(i,j)=|F1(i,j)F0| ) y menos la correlación cruzada de matrices ( GnCC(i,j)= sumklF1,kl(i,j)F0,kl,k in[0,m],l in[0,n] ) Ambos se consideran un poco más rápidos que L2 pero tienen sus propias características. L1 no diferenciable y menos sensible a grandes diferencias en los valores de píxeles. La correlación cruzada puede producir falsos positivos si la muestra tiene poco contraste y la imagen tiene áreas muy claras o muy oscuras.

L2 -versión de la métrica no tiene tal desventaja:

GL2= sum(F1,kl(i,j)F0,kl)2

= sum(F1,kl(i,j))22F1,kl(i,j)F0,kl+(F0,kl)2

= sum(F1,kl(i,j))2 sum2F1,kl(i,j)F0,kl+ sum(F0,kl)2

=EF1(i,j)+2GnCC(i,j)+EF0

EF1(i,j) , La "energía" del sitio seleccionado en It actúa como un factor de equilibrio ( EF0 , la suma de los cuadrados de los valores de píxeles de la muestra es la misma para todas las posiciones de ventana y no tiene importancia práctica aquí).

Incluso un algoritmo tan primitivo funciona bastante bien en el caso del movimiento lineal de objetos (por ejemplo, una cámara mirando hacia abajo al transportador). Sin embargo, debido a la simplicidad del modelo y la ejecución, este método de seguimiento tiene varias desventajas:

  1. Un movimiento lineal simple de un objeto sin cambios en la naturaleza es raro. Como regla general, los cuerpos en el campo de visión de la cámara pueden sufrir algunas clases de cambios. En orden de complejidad creciente: aumento / disminución de tamaño, giros, transformaciones afines, transformaciones proyectivas, transformaciones no lineales, cambios en un objeto. Incluso si omitimos cambios de objeto y transformaciones no lineales, nos gustaría que el algoritmo pueda recuperarse de rotaciones relativamente simples y cambios de tamaño. Obviamente, el procedimiento anterior no tiene esta propiedad. Probablemente F0 aún dará una respuesta notable en el objeto, pero será difícil determinar la ubicación exacta de la muestra, y la pista será discontinua.

    Ejemplo

  2. Mostramos al algoritmo solo una muestra positiva, es difícil decir qué respuesta dará F0 si otro objeto similar entra en la ventana. Bueno, si el objeto deseado está en contraste y tiene una estructura rara, pero ¿qué pasa si queremos monitorear una máquina en un flujo de otras máquinas? Un rastreador puede saltar de manera impredecible de un automóvil a otro.
  3. En cada cuadro, descartamos toda la historia de fondo. Probablemente, también debería usarse de alguna manera.
  4. Además, aprendemos solo en un punto de la imagen. Será mejor si, cerca de la ubicación correcta del objeto, el rastreador también dará una buena respuesta. Un poco contradictorio, pero piense: si el filtro está en la ubicación exacta del objeto en la imagen (x,y) da el mejor valor, y en (x+1,y+1) - Algo aleatorio, lo que significa que es demasiado sensible a los pequeños detalles que pueden cambiar fácilmente. Por el contrario, si en (x,y) y en (x+1,y+1) aproximadamente los mismos buenos valores, el filtro "enganchado" en signos más grandes y, esperamos, más permanentes.
  5. Con la implementación ingenua del procedimiento de seguimiento, para cada píxel del cuadro, multiplicamos la ventana completa con el elemento seleccionado por la parte correspondiente de este cuadro. La complejidad de esta operación es O(m2n2) . En tales casos, no es muy agradable rastrear incluso objetos de 50 a 50 píxeles. Este problema se resuelve parcialmente reduciendo el tamaño del video, pero cuando se reduce la imagen a menos de 240 píxeles de ancho, incluso grandes detalles significativos comienzan a perderse, lo que hace que el algoritmo carezca de sentido.

ASEF, MOSSE


Enfoque trivial


Enrolle nuestras mangas e intente resolver los problemas anteriores.

Aumentar la imagen original. Le aplicamos varias transformaciones afines leves. También puede agregar ruido o cambiar la gamma. Por lo tanto, en lugar de una sola imagen, un conjunto de microdatos de P fotos. Había muchas imágenes, pero quedaba una ventana. Así que ahora no solo cortaremos un rectángulo de la imagen, sino que buscaremos algún filtro W lo que dará una buena respuesta para todos Ip . Transformamos el problema en un problema de minimización:

W: minW parallelFpW parallel2,p in[1,P]

donde  parallelFpW parallel2 - la suma de los cuadrados de las diferencias de píxeles entre W y la sección correspondiente de la ubicación exacta del objeto en p esa imagen sintética creada a partir de un marco que tiene un marcado real.

Además, puede muestrear rectángulos lejos de la ubicación del objeto rastreado y maximizar la diferencia que se muestra arriba.

Es más difícil sugerir que el filtro dé una buena respuesta en puntos cercanos a la ubicación exacta del objeto. Sabemos que en (x,y) aplicación de filtro con L2 -metric debería dar 0, siguiente - más, lejos - aún más. Además, no tenemos ninguna dirección preferida, la respuesta debe ser centralmente simétrica con respecto a (x,y) . ¡Parece que podemos expresar matemáticamente cómo debería ser la respuesta de un filtro aplicado a las imágenes de referencia! La apariencia exacta puede variar según la función de atenuación de respuesta específica, pero ¿a todos les encantan los gaussianos? Por lo tanto, suponemos que W aplicado a Fp idealmente debería dar un resultado Gp=1 exp frac(xi)2+(yj)2 sigma2 . Por lo tanto, el problema de minimización se convierte en:

Dp(i,j)= paraleloFp(i,j)W paralelo2

W: minW paraleloDp(i,j)Gp(i,j) parallel2,p in[1,P]

Ahora no minimizamos la respuesta en un punto, sino que minimizamos la desviación de la respuesta de la deseada.

Espera un segundo ... lo hicimos P vecesm vecesn ecuaciones con m vecesn variables para minimizar. Parece que lo exageramos. Volvamos un poco.

Truco principal


De todos los problemas, la mayor dificultad es la complejidad. O(m2n2) . ¿Es posible encontrar algo además de la división difícil de un cuadro de búsqueda en varios pequeños o buscar en la imagen en pequeña resolución y afinar la precisión?

Resulta que puedes! El matanálisis nos dice que el plegamiento de funciones en el espacio ordinario es una multiplicación de sus imágenes de Fourier. Podemos aplicar la transformación rápida de Fourier a las imágenes, multiplicar sus frecuencias elemento por elemento y luego convertir el resultado nuevamente en una matriz para O(mn logmn) , que es mucho más rápido que minimizar la matriz honestamente. Fourier! ¡Quién lo hubiera pensado! En la era del tensorflow, todavía puede ayudarnos con la visión por computadora.

(Esto, por cierto, demuestra el principio matemático general: si no quieres resolver el problema en el espacio X moverlo al espacio Y , decida allí y transfiera la decisión nuevamente. La solución es a menudo más corta que la directa).

Como se muestra arriba, podemos usar la correlación cruzada para localizar la muestra en la imagen. Pero la correlación cruzada es una convolución con reflejo horizontal y vertical W . El matanálisis sugiere que en este caso será necesario multiplicar las frecuencias. F en una matriz compleja conjugada a una matriz de frecuencia W :

 hatW( omega, nu)= mathcalF(W(x,y))

 hatF( omega, nu)= mathcalF(F(x,y))

 hatGconv( omega, nu)= mathcalF(Gconv(x,y))

Gconv=F otimesW rightarrow hatGconv= hatF odot hatW

donde Gconv= exp frac(xi)2+(yj)2 sigma2 - Función de respuesta perfecta en la imagen de referencia. Tenga en cuenta que L2 Minimizamos la métrica y maximizamos la métrica de convolución, por lo que ahora, cuanto mayor sea la respuesta, mejor.

Si tuviéramos una imagen, encontraríamos la matriz de frecuencia de filtro exacta:

 hatW= frac hatGconv hatF

donde el lado derecho se refiere a la división de elementos sabios. Pero un poco antes generamos P imágenes de la fuente. Podemos aplicarlos con el enfoque de Fourier. No existe un filtro con tales frecuencias que satisfaga idealmente todas las imágenes, pero puede obtener algo lo suficientemente bueno. Hay dos formas de resolver el problema:

  1. Puede encontrar un conjunto de filtros ideales y luego promediarlos en uno. Esta es la forma en que los autores de Promedio de filtros exactos sintéticos (ASEF) van:

     hatW= frac1P sumPp=1 hatWp= frac1P sumPp=1 frac hatGp hatFp

    Aquí usamos la propiedad de linealidad de las imágenes de Fourier. Agregando frecuencias, como se muestra arriba, parece que promediamos varios pesos de filtro.
  2. Puede encontrar frecuencias de filtro que satisfacen todas las imágenes en promedio, aproximadamente como para L2 :

     hatW: min hatW sumPp=1 parallel hatFp odot hatW hatGp parallel2

    Para encontrar el mínimo, debe tomar la derivada de los elementos de filtro:

     frac delta delta hatW sumPp=1 parallel hatFp odot hatW sombreroGp parallel2=0

    Se puede encontrar una captura honesta de esta derivada en el seguimiento de objetos visuales utilizando filtros de correlación adaptativos , que ofrece filtros de suma mínima de salida de error cuadrado (filtros MOSSE). El resultado es este:

     hatW= frac sumPp=1 hatGp odot hatFp sumPp=1 hatFp odot hatFp


Hmm, como si elementos similares estuvieran involucrados en las fórmulas. En P=1 Las fórmulas para ASEF y MOSSE son exactamente las mismas.  hatW para una imagen se puede representar como

 hatW= frac hatGp hatFp= frac hatGp odot hatFp hatFp odot hatFp

Sustituya en la fórmula ASEF y obtenga

 hatW= sumPp=1 frac hatGp odot hatFp hatFp odot hatFp

Si! ¡Ahora es mucho mejor ver que ASEF y MOSSE difieren solo en el método de promedio de filtros! Se argumenta que MOSSE produce mejores filtros que ASEF. Suena lógico: ajustarse a todo el paquete de imágenes en su conjunto es mejor que promediar filtros.

Después de que tenemos  hatW , calculamos la respuesta en el dominio de frecuencia  hatGconv= hatF odot hatW , luego lo traducimos al dominio espacial y buscamos el máximo en la matriz resultante G . Donde está el máximo, está la nueva posición del objeto.

Puntos adicionales


  • Los términos en los denominadores de las fórmulas tienen un significado físico interesante.  hatFp odot hatFp Es el espectro de energía de un rectángulo con p esa imagen
  • Presta atención a la simetría interesante. Era necesario multiplicar las frecuencias del filtro por las frecuencias de la imagen para obtener una respuesta. Ahora necesita multiplicar las frecuencias de respuesta por las frecuencias de imagen (y normalizar) para obtener las frecuencias de filtro.
  • En la vida real, la división por elementos puede causar división por cero, por lo que generalmente se agrega una constante de regularización al denominador  epsilon . Se argumenta que dicha regularización hace que el filtro preste más atención a las bajas frecuencias, lo que mejora la capacidad de generalización.
  • Al procesar video real, generalmente desea guardar información sobre el objeto rastreado obtenido de cuadros anteriores. Al pasar al siguiente cuadro, no puede calcular  hatW desde cero, y actualice la anterior. Fórmula de actualización para ASEF:

     hatWi= frac etaP sumPp=1 frac hatGp hatFp+(1 eta) hatWi1

    Para MOSSE, debe acumular el numerador y el denominador por separado:

    Ai= eta sumPp=1 hatGp odot hatFp+(1 eta)Ai1

    Bi= eta sumPp=1 hatFp odot hatFp+(1 eta)Bi1

     hatWi= fracAiBi

    donde  eta - velocidad de aprendizaje.
  • Es importante recordar que la transformación de Fourier no es exactamente lo mismo que el cálculo G Honestamente, como se describe al principio del artículo. Al calcular la FFT, los elementos que faltan no desaparecen, sino que se sustituyen en el reverso, como si la imagen estuviera en bucle de derecha a izquierda y de abajo hacia arriba. Pero al comienzo del artículo, ya decidimos oscurecer los bordes F , por lo que este problema no tendrá un efecto notable.
  • Como se mencionó anteriormente, la correlación cruzada tiene una característica desagradable: en general, un filtro de luz puede dar una respuesta fuerte en las áreas blancas de la imagen, incluso si no coinciden en las áreas de contraste. Los problemas no se limitan a esto. Incluso un píxel coincidente con un valor muy positivo o muy negativo puede interferir con el filtro si la muestra en su conjunto tiene bajo contraste. Para suavizar este efecto, la transformación no lineal de píxeles de la imagen debe incluirse en el preprocesamiento, que "presionará" secciones demasiado claras y demasiado oscuras en el medio. Debido a esto, la coincidencia de estas áreas contrastantes hace una contribución más fuerte a la métrica. Los artículos ASEF y MOSSE usan el logaritmo:

    I= logI+1

    donde estan los pixeles I de 0 a 255. En mi opinión, esto es demasiado duro e ignora el problema de la fuerte respuesta del filtro oscuro en las áreas negras . Tal esquema funciona mejor:

    I=signo(I127) sqrt|I127|

    Luego viene la normalización, y resulta que la mayoría de los elementos están centrados alrededor de cero.
  • ¿Cómo puede tal algoritmo determinar que el objeto rastreado ha desaparecido del marco? Un análisis más detallado de la respuesta recibida del siguiente marco ayudará aquí. Los creadores de MOSSE ofrecen un indicador PSR: relación pico a lóbulo lateral. Dejar gmax - elemento máximo G correspondiente a la nueva posición del objeto (x,y) . Excluimos el cuadrado de la consideración 11 veces11 alrededor de este máximo. Calculamos el promedio y la desviación estándar para los píxeles restantes (  musl, sigmasl ) Entonces

    PSR= fracgmax musl sigmasl

    Si este valor está por encima de cierto umbral, la detección se considera exitosa. El umbral generalmente se toma en la región entre 3 y 10. Para detecciones seguras, el PSR generalmente se mantiene por encima de 20.

    (tenga en cuenta que aquí PSR no significa en absoluto lo que generalmente significa en la teoría del procesamiento de señales; así que no lo busque en Google, no saldrá nada bueno)
  • El algoritmo es extremadamente simple. El procedimiento de seguimiento en Core-i7 en imágenes con 320x400 usando la implementación de OpenCV toma de 0.5 a 2 milisegundos, dependiendo del tamaño del objeto rastreado.

Algoritmo MOSSE


Poniendo todo junto.

Estado general:

Matriz de frecuencia de filtro:  hatW
Matrices auxiliares para calcular frecuencias de filtro: A,B
Matriz de frecuencia de la respuesta ideal deseada:  hatG
Velocidad de entrenamiento durante el seguimiento:  eta
El rectángulo de la posición actual del objeto: R
Número de transformaciones: P
Umbral de respuesta: PSRthr

Función auxiliar: entrenamiento . Entrada: imagen I velocidad de aprendizaje actual  etaactual

  1. Anuevo:=0,Bnuevo:=0
  2. Hasta que lo tengo P transformaciones:
    1. Aplique una pequeña transformación afín aleatoria centrada en el centro de la imagen. R
    2. Cortar de imagen rectangular con objeto F
    3. Aplique una máscara para anular suavemente los bordes
    4. Traducir F en el dominio de frecuencia:  hatF
    5. Anew=Anew+ hatG odot hatF
    6. Bnew=Bnew+ hatF odot hatF

  3. Si  etaactual geq1.0 luego reemplazar A y B en Anuevo y Bnuevo . De lo contrario:

    B:= etaBnuevo+(1 eta)B

    A:= etaAnuevo+(1 eta)A

  4. Calcular frecuencias de filtro:

     hatW= fracAB


Inicializacion . Entrada: imagen I rectángulo alrededor de la posición del objeto Rinit

  1. R:=Rinit
  2. Prepara la respuesta deseada G . Por lo general, esta es una matriz completamente cero con un pequeño gaussiano en el centro.
  3. Entrenamiento : I , 1.0
  4. Traducir G en el dominio de frecuencia:  hatG

Seguimiento : Entrada: Imagen I

  1. Cortar rectángulo F de I para la posición previa existente del objeto R
  2. Aplique una máscara para anular suavemente los bordes
  3. Traducir F en el dominio de frecuencia:  hatF
  4.  hatGrespuesta= hatW odot hatF
  5. Traducir  hatGrespuesta al dominio espacial: Grespuesta
  6. Encuentra el máximo en Grespuesta : gmax,(x,y)
  7. Calcular potencia de respuesta PSR:= fracgmax musl sigmasl
  8. Si PSR<PSRthr salida falla
  9. Actualizar posición R . Ajuste R si va más allá de la imagen, o si se decidió que el objeto aumentó / disminuyó.
  10. Entrenamiento : I ,  eta
  11. Volver R

Los detalles de implementación pueden variar. Por ejemplo

  • Solo puede preprocesar F , no toda la imagen.
  • G se puede recrear para cada transformación de imagen con diferentes funciones y ancho de respuesta.
  • Puede entrenar varios filtros diferentes al mismo tiempo en varias escalas del objeto para detectar movimientos en la distancia y en las proximidades.

Como se ve


Para empezar, algunos ejemplos de la transformada de Fourier bidimensional.

Algunos ejemplos simples
Permítame recordarle que el resultado de la transformación tiene un valor complejo. Las imágenes a continuación muestran los grupos "imagen - valores absolutos del dominio de frecuencia en una escala normal - valores absolutos del dominio de frecuencia en una escala logarítmica".

Lineas verticales:





La imagen cambia de izquierda a derecha igual para cualquier posición vertical. Además, el cambio es periódico, con un período claro y un patrón claro. Por lo tanto, en las imágenes de frecuencias solo se ven frecuencias a lo largo del eje. x=0 .

Jaula:





Tenga en cuenta que hay como se espera una serie de frecuencias a lo largo de los ejes x=0 y y=0 y extrañas frecuencias espurias. Aparecieron debido al hecho de que, en primer lugar, la imagen es finita, mientras que la imagen de Fourier se descompone en una hermosa cantidad solo para una señal periódica infinita. En segundo lugar, puede ver que la imagen no forma un período exacto en los bordes.

Líneas inclinadas:





Nuevamente, ambas frecuencias correspondientes a la dirección principal y las frecuencias espurias son visibles.

Líneas inclinadas más distorsión:





La imagen de las frecuencias muestra varias direcciones características, pero ya se está volviendo difícil presentar intuitivamente una imagen en ellas.

Para las imágenes del mundo real, es aún más difícil imaginar una imagen en la cabeza por sus frecuencias:





(las frecuencias en el centro están cerradas para que no "iluminen" el resto del espectro)

Ahora pasemos a un ejemplo de trabajo real:

Pack de fotos
Imagen con objeto marcado:



Objeto cortado y preprocesado, su espectro en la escala habitual y logarítmica ( F,| hatF|, log| hatF| ):





Respuesta deseada ( G ):



Filtrar frecuencias en una escala regular y logarítmica ( W,| hatW| ):




Pesos de filtro explícitos (sin transformaciones) F ):



Tenga en cuenta que no participan en el algoritmo en ninguna parte, solo pueden contarse por interés. También tenga en cuenta que el filtro se ve como el infierno de eso . Uno esperaría que el filtro fuera algo similar a la imagen original, pero esto no es siempre cierto. Un filtro similar a la imagen en sí difícilmente daría la respuesta gaussiana deseada.

La respuesta del siguiente cuadro:



Aunque no es tan limpio como la respuesta deseada, es fácil determinar el máximo.

El mismo ejemplo con una respuesta deseada más estrecha:

Pack de fotos
Ya:


W :


Más ya:


W :


Con un máximo muy estrecho en el filtro, en lugar de una mancha negra, el ojo se vuelve claramente visible.

W para los tres casos anteriores G cuando se usa para entrenar 16 transformaciones de la imagen de entrada:

Otro montón de fotos
Máximo ancho:



Máximo promedio:



Máximo estrecho:



Cuantas más transformaciones, menos se aferra el filtro a elementos aleatorios. Es especialmente claramente visible que las manchas aleatorias en blanco y negro del medio desaparecieron W . Por otro lado, para un gaussiano estrecho, el entrenamiento en varias imágenes puede jugar un signo negativo: mira el "timbre" formado en el filtro alrededor del ojo.

Si desea ver cómo se ve en vivo, descargue desde aquí mi repositorio de prueba con la implementación de MOSSE con la salida de imágenes de depuración. Puedes encontrar más opciones de MOSSE en el github. Además, está en OpenCV .

Conclusión


Gracias por su atención, Habrovsk. El seguimiento MOSSE y ASEF no son los algoritmos más complejos del mundo. Cuanto más fácil es no solo aplicarlos de manera efectiva, sino también comprender cómo se guiaron sus creadores. Espero que mi explicación te haya ayudado a meterte en la cabeza de los investigadores, a seguir el curso de sus pensamientos. Esto puede ser útil: el aprendizaje automático no es un campo de conocimiento estático; hay un lugar para la creatividad y la investigación. Intente profundizar en algún algoritmo establecido: elimine las extremidades innecesarias para la aceleración o agregue un par para que funcione mejor en su caso particular. Te gustará!

Este artículo fue escrito con el apoyo de DSSL.

Source: https://habr.com/ru/post/es421285/


All Articles