# Detección de primer plano

La detección de primer plano es una de las grandes tareas en el ámbito de la visión por computador que tiene como objetivo principal detectar cambios en secuencias de imágenes. Muchas aplicaciones no necesitan conocer toda la evolución del movimiento en una secuencia de video, sino que solo precisan de la información de los cambios en la escena.
La detección de primer plano intenta separar estos cambios que se producen en el primer plano del fondo. Se trata de un conjunto de técnicas que, normalmente, analizan las secuencias de video en tiempo real y que son tomadas con una cámara estacionaria.

## Descripción

Todas las técnicas de detección de primero se basan en modelar primeramente el fondo de la imagen. Es decir, definir el fondo y luego ver qué cambios se producen en este. Definirlo puede ser una tarea muy difícil cuando contiene formas, sombras, y objetos que se mueven. A la hora de definirlo, se asume que consiste en objetos estacionarios que pueden tener variaciones de color e intensidad en función del tiempo.
Los escenarios donde se aplican estas técnicas suelen ser muy diversos. Pueden ser secuencias muy variables, imágenes con una iluminación muy diferente, interiores, exteriores, más calidad o menos y así hasta un número muy elevado de posibilidades. Se necesita un sistema que, aparte de poder procesar en tiempo real, sea capaz de adaptarse a todas estas variaciones.
Un muy buen sistema de detección de primer plano debe ser capaz de:
* Obtener el fondo (estimación) tanto si es variable como si es estático.
* Ser robusto ante cambios de iluminación, movimientos repetitivos en el fondo (hojas, ondas, sombras), cambios a largo plazo (ej. Un coche que llega y aparca).

## Técnicas

La detección de primer plano ha sido un problema muy estudiado desde hace tiempo en el campo de la visión por computador. Hay muchas técnicas que tratan este problema, todas basadas en la dualidad de fondo estacionario y dinámico a la vez.

### Filtro de mediana temporal

Es un método que fue propuesto por El y Velastin. Este sistema estima el modelo de fondo a partir de la mediana de todos los píxeles de un cierto número de imágenes anteriores. El sistema utiliza una memoria intermedia con los valores de los píxeles de las últimas tramas para actualizar la mediana para cada imagen.
Para modelar el fondo, el sistema estudia todas las imágenes de un periodo de tiempo determinado llamado tiempo de entrenamiento. En este tiempo solo se visualizarán imágenes del fondo y se calculará la mediana, píxel por píxel, de todas las tramas de fondo de este tiempo.
Después del periodo de entrenamiento, para cada trama nueva, cada valor de píxel de entrada se compara con su valor de fondo calculado previamente. Si el píxel de entrada está dentro de un umbral establecido, se considera que el píxel coincide con el fondo modelo y su valor se incluye en la memoria intermedia de píxeles. En caso contrario, si el valor de píxel está fuera de este umbral, se clasifica como de primer plano, y no se incluirá en la memoria intermedia.
No se puede considerar este método muy eficiente ya que no presenta una base estadística rigurosa y precisa de una memoria intermedia que tiene un coste computacionalmente elevado.

### Running Gaussian average

La idea principal de este método es modelar el fondo de una manera más probabilística basada en la distribución gaussiana.
Cada píxel cuenta con su distribución de probabilidad gaussiana caracterizada por una media y una varianza. Como para cada trama el fondo puede ir cambiando, la media y la varianza se tienen que ir actualizando. Para ello, siguen las siguientes ecuaciones:
Donde $I_{t}$ es el valor del píxel de la imagen a analizar, $\mu _{t}$ y $\sigma _{t}^{2}$ son respectivamente la media y la varianza de la distribución gaussiana, $\rho$ es el parámetro que define la velocidad de actualización (normalmente $\rho =0.01$ y $d$ es la distancia euclídea entre la media y el valor del píxel.
Aparte de actualizar en cada píxel las distribuciones gaussianas, se clasificará el píxel a analizar: fondo o primer plano. Para ello, tenemos que comprobar si el píxel analizado pertenece a la gaussiana definida para el modelo de fondo de aquel valor de píxel. Lo hacemos siguiendo la ecuación:
$|(I_{t}-\mu _{t})|<k\sigma _{t}\longrightarrow {\mathit {Primerplano}}$
$|(I_{t}-\mu _{t})|\not <k\sigma _{t}\longrightarrow {\mathit {Fondo}}$
donde el parámetro $k$ es un umbral a especificar (normalmente $k=2.5$ ).
Cuando la desigualdad es satisfecha, el píxel es considerado de primer plano. En caso contrario, se considerará fondo.
Una variante del método propone que la actualización de las variables solo debería hacerse cuando el píxel a analizar se considere como fondo, ya que si se considera como primer plano el modelo de fondo de aquel píxel no debería haber cambiado. Por tanto, esta variante del método especifica una actualización diferente para la variable $\mu _{t}$. Actualiza según la ecuación:
Donde $M=1$ cuando $I_{t}$ es considerado de primer plano (foreground) y $M=0$ en el caso contrario. Así pues, cuando $M=1$ , es decir, cuando el píxel sea detectado como primer plano, la media no actualizará ya que el producto dará como resultado 0.
Este método, además de estimar un modelo de fondo más parecido a la realidad, precisa de menos memoria que el anterior ya que solo tienen que ir variando la media y la varianza.

### Gaussian Mixture Model

Es el método propuesto por Stauffer and Grimson y probablemente el más importante en cuanto a esta tarea. Aprovecha la idea de modelar el fondo con funciones gaussianas, pero en lugar de utilizar solo una por cada píxel y variarla, considera que cada píxel puede tener diferentes estados en función del tiempo. Por ejemplo, en un cielo de color azul podemos tener nubes blancas que van pasando variablemente. Los píxeles azules, aparte de ser azules y variar ese color, también pueden ser blancos en una imagen consecutiva. El método de múltiple gaussianas proporciona para cada píxel una serie de gaussianas que corresponden a los estados posibles.
Para cada píxel:
* Diferentes gaussianas modelan diferentes estados (colores) de la escena.
* Cada gaussiana puede representar un modelo de fondo o de primer plano.
El algoritmo a seguir tiene diferentes pasos:

#### Distribución de cada píxel (K gaussianas)

La distribución de cada píxel en una imagen viene definida por la expresión:
Donde $k$ es el número de guassianas utilizadas para modelar cada píxel (normalmente entre 3 y 5), $\omega _{i,t}$ es el peso de cada gaussiana y $\eta (I_{t},\mu _{i,t},\sum i,t)$ es la definició de la gaussiana con media ($\mu _{i,t}$) y matriz de covariancia ($\sum i,t$).

#### Elección del modelo de fondo (B gaussianas)

El fondo para un píxel se modelará con las B gaussianas con más peso y con menos varianza:
Donde $T$ és un umbral de decisión (normalmente 0.6) y $B$ el número mínimo de gaussianas para cada píxel.
* Para elegir las B funciones del fondo, las $k$ gaussianas de cada píxel se ordenan por factor de peso $\omega _{i,t}$ y se eligen las $B$ primas. El peso en una gaussiana representa los golpes que aparece, para cada píxel, ese estado. Cuanto más aparezca un estado, la gaussiana irá aumentando el peso. Por ejemplo, si un coche llega a un aparcamiento y aparca, al comienzo, el color (estado) de este coche no tendrá demasiado peso en el conjunto de gaussianas ya que no aparece mucho. Pero cuando se avanza en el tiempo, el peso de este estado en la distribución del píxel aumentará ya que el coche ha quedado estático y aparece siempre.
* También influye la varianza de las gaussianas en el orden.

#### Decisión fondo o primer plano

Una vez tenemos todos los píxeles modelados podemos elegir si el píxel a analizar corresponde al fondo o no.
* Un píxel será de fondo si su valor corresponde con ALGUNA de las B gaussianas ya que se considerará que su valor ha aparecido muchas veces anteriormente.
* Un píxel será de primer plano si su valor NO corresponde con NINGUNA de las B gaussianas ya que se considerará que su valor ha aparecido muchas veces anteriormente.
Es decir:
Donde $I_{t}$ es el píxel a analizar, $\mu _{i,t}$ y $\sigma _{i,t}$ la media y la variancia, respectivamente, de la gaussiana a comparar y $L$ un umbral a especificar (normalmente $L=2.5$).
Si un píxel no pertenece a ninguna de las $K$ gaussianas del modelo se creará una nueva. Normalmente, un píxel así será considerado a primera vista primer plano, pero, si esta gaussiana nueva creada va aumentando su peso $\ omega$ significa que se convertirá en una de las gaussianas del fondo y este se habrá convertido en un objeto estático. El número de gaussianas del fondo ($B$) siempre es constante. Si esta nueva gaussiana creada se convirtiera en fondo debido a un aumento de su peso, entonces otra gaussiana sería eliminada del modelo de fondo.

#### Actualización del fondo

Finalmente, tal como hemos visto en la técnica anterior, se hará una actualización del fondo cuando uno de los píxeles corresponda con una de las $K$ gaussianas del modelo probabilístico.
Actualizaciones:

### Eigenbackgrounds

La idea de este método es construir un fondo mediante los autovectores de este, es decir, crearemos una imagen de fondo modélica. Dado que una imagen contiene su información de una manera matricial, en este método se utilizan los autovectores y los autovalores que se van obteniendo. Un autovector (o vector propio) es aquel que no se ve afectado por las transformaciones lineales y que en cualquier caso no varía su dirección a pesar de ser multiplicado por un escalar. Asimismo, un autovalor (o valor propio) será aquel escalar por el que se multiplica el autovector asociado. Este entorno es conocido como un autoespacio. Se obtiene, imagen a imagen, aquella matriz donde se delimita un autoespacio. Cabe señalar que la mayor parte del peso de una imagen está contenida en pocos autovalores, de modo que los de menor peso serán desechables.
Este método, al contrario que el métodos anteriores que se basan en datos estadísticos del píxel, se basa en datos estadísticos de la escala de grises sobre el tiempo.
* Elegimos un número $N$ de imágenes y calculamos la media $\mu _{b}$ y la matriz de covarianza $Cb_{b}$.
* Diagonalizamos la matriz de covarianza $Cb_{b}$ para encontrar la matriz de autovectores $\phi _{b}$.
* Reducimos esta matriz de autovectores para elegir solo aquellos que tienen más peso en la imagen. Debemos tener una matriz de autovectores con M autovectores $\phi _{Mb}$.
* Modelamos el fondo con $Bt=X_{t}\phi _{Mb}$ donde $X_{t}$ es la diferencia entre la imagen y la media calculada ($X_{t}=I_{t}-\mu _{b}$) .
* Detectamos si una imagen es primer plano con la desigualdad: $|(I_{t}-B_{t})|>t$ donde $t$ es un umbral a especificar. Si la desigualdad se cumple podemos decir que la imagen tiene un primer plano.
Es una técnica más sencilla y rápida pero pierde precisión y es dificultoso trabajar con datos en tiempo real dado el alto coste computacional del algoritmo.

### Otras técnicas

La mayoría de métodos actuales utilizan las diferentes técnicas mencionadas anteriormente combinadas. Algunas técnicas de estas son:
* Wren
* Zivkovic

## Aplicaciones

La detección de primer plano tiene múltiples aplicaciones actualmente.

### Seguridad

En el ámbito de la seguridad, la detección de primer plano puede:
* Avisar a los humanos de presencias diferentes a las esperadas en espacios grabados por cámaras.
* Reducir la posibilidad de pasar por alto algún peligro.
Para detectar la presencia de una persona no es necesario conocer la forma de esta ni la trayectoria. Con una variación de cambios en el espacio podemos detectar presencias inesperadas.

### Tráfico

Múltiples aplicaciones en el ámbito de la seguridad vial y el tráfico en general. La detección de primer plano puede:
* Contar vehículos, con lo cual detectar donde hay más tráfico.
* Evitar colisiones.
* Seguimiento de vehículos.

### Reconstrucción 3D

Podemos reconstruir en 3D objetos a partir de diferentes puntos de vista de estos. Segmentando las imágenes de cada punto de vista y juntando todos estos planos podemos hacer una reconstrucción 3D del objeto deseado. Antes de eso, sin embargo, tendremos que detectar el primer plano de las imágenes que queremos reconstruir.

### Detección de actividad

Estos últimos años se ha hecho mucha investigación en el ámbito de la detección de actividad humana. Hay múltiples aplicaciones relacionadas con este tópico, aunque la que más destaca es el reconocimiento de gestos ya que permite una interacción con máquinas y un enfoque a la vivienda inteligente.

### Codificación

En la compresión de datos y más concreto en este caso, la codificación de imagen y video es común tratar codificar con más bits aquellas regiones de una imagen que son más importantes para la visión humana. Esta parte de la imagen se llama 'región de interés' y muy a menudo corresponde con el primer plano de la imagen. Muchos codificadores de imagen están aplicando mucho la codificación basada en el contenido de la imagen. Uno de ellos es el JPEG 2000. Es una técnica muy utilizada también en el ámbito de la medicina ya que muchas veces interesa fijar toda la atención en una región de la imagen