Sistema que permite la aplicación de efectos visuales en objetos o
sujetos estáticos o en movimiento en tiempo real sin necesidad de
marcas
s Sector de la técnica
Implementaciones en ordenador. Visión por computador.
Introducción
El presente documento describe un sistema de interacción entre objetos o sujetos
10 y determinados efectos visuales preprogramados que son proyectados en el propio
objeto o sujeto simulando el funcionamiento de un espejo. El usuario puede apreciar en
tiempo real dichos efectos visuales proyectados sobre cuerpos estáticos o en
movimiento.
Este sistema está compuesto por un escenario con luces y fondo controlado,
15 sensores de entrada como puede ser una cámara de vídeo, una CPU, como puede ser un
ordenador, una serie de filtros de detección y proyección basados en visión por
computador, así como un dispositivo de salida que puede ser un proyector, una
televisión, una pantalla de ordenador, etc.
La ventaja fundamental del sistema se basa en la detección del movimiento del
20 sujeto u objeto sin la necesidad de marcas como colores especiales, sensores, etc. en
dicho cuerpo, ni de condiciones especiales de entrenamiento en comportamientos o en
movimientos predeterminados.
Tanto la detección del movimiento como la proyección de determinados efectos
visuales sobre un sujeto u objeto se realizan mediante una serie de filtros
25 implementados en computador utilizando técnicas de visión por computador y análisis y
tratamiento de imágenes en tiempo real. La solución presentada trabaja con estos filtros
identificando zonas de análisis y zonas de aplicación de dichos efectos visuales.
Asimismo, el sistema permite el reconocimiento de acciones o eventos predefinidos y la
aplicación de filtros diseñados y relacionados a los mismos.
30
Estado de la técnica
Existen dispositivos y procesos para la generación de contenido, animaciones o
efectos visuales en el contorno interior delimitado por la silueta de un objeto o sujeto.
5 Estos dispositivos y procesos permiten que el usuario conozca, por ejemplo, la
apariencia que tiene ese objeto o sujeto cuando se le cambian determinadas condiciones.
Son utilizados en moda, de tal forma que un sujeto puede comprobar cómo le
sientan, por ejemplo, unas determinadas gafas sin necesidad de disponer fisicamente de
las mismas, sino que se muestra en una pantalla el aspecto que tendría si las utilizase.
1º De igual forma, se utilizan para la interacción con distintos tipos de peinado, o de
prendas de vestir. La utilización de este tipo de sistemas tiene usos diversos, en
automoción, por ejemplo, para observar la apariencia externa o interna de un vehículo,
color, tapizado, disponiendo sólo de un único elemento fisico, etc.
Sin embargo, estos dispositivos presentan el inconveniente que los efectos
15 visuales mostrados o bien no se ajustan a sujetos u objetos cuando estos se encuentran
en movimiento o bien para la detección del movimiento es necesario que el sujeto u
objeto disponga de determinadas marcas como prendas de un color determinado,
sensores en el cuerpo, etc.
Se conocen algunos documentos donde se describen procedimientos o sistemas
20 que tratan de abordar esta cuestión.
En el documento US200212609Al se tiene como objetivo la navegación en la
pantalla a través de un cursor dependiendo del estado de un objeto detectado por una
cámara. El sistema de control controla en movimiento del cursor en la pantalla y
determina cuando este cursor fue seleccionado mediante el estado de un objeto. De esa
25 forma se pretende mover el cursor y navegar en un rango de movimientos equiparac!os a
acciones del ratón. Sin embargo, solo se aplica a una parte detectada como objeto,
cogen un punto de referencia y fijan los límites, y desde ahí calculan el movimiento
realizando proyecciones basadas en los puntos de referencia. No aplican efectos
especiales ni utilizan la técnica del análisis y procesamiento de imágenes con filtros de
30 optimización en tiempo real, como ocurre en US5986660A, donde se describe un
sistema de este tipo pero que tampoco trabaja en tiempo real, realizando las operaciones
sobre datos pregrabados. En esta caso se utilizan 3, 4 o más dimensiones y las convierten
a distintas perspectivas dimensionales.
Por otro lado, otros sistemas que utilizan las mencionadas marcas de referencia
se observan en US2003076293Al, donde se describe un sistema que utiliza marcas de
referencia activas y pasivas por identificadores como guates, pintar el cuerpo. Además,
5 los movimientos detectados se realizan con respecto al punto de referencia en matrices
de 4x4 dimensiones utilizando varias cámaras de entrada y reconociendo los
movimientos con una base de datos de gestos.
De forma similar en W0200497612A2 se describe un dispositivo que utiliza
1º para la detección del movimiento al menos 2 imágenes provenientes desde distintos
ángulos para determinar las posiciones en 3D del cuerpo de una persona y se realiza
una representación de su volumen. La estructura de la solución implica la utilización de
contendido 3D en los sensores, la adquisición, procesamiento, modelado, extracción de
parámetros, calibración, etc. La solución propuesta en el presente documento es una
15 solución 2D que requiere únicamente un solo dispositivo de entrada.
En otros campos de la técnica se conocen sistemas como el descrito en
US2006184003A donde se remite a una base de datos de imágenes provenientes de
resonancia magnética que proveen de los puntos de referencia asociadas al sujeto. Se
20 describe la utilización de dispositivos externos como marcas al sujeto que permiten
identificar la zona donde se actuará. Se utiliza para la visualización de intervenciones,
mediante el empleo de realidad aumentada. En este caso, además de la visión
estereoscópica se necesita un pre-procesamiento de las imágenes de referencia y
nuevamente las marcas sobre el objeto o sujeto para el reconocimiento del movimiento.
25
Respecto a la proyección de los efectos visuales se conoce el sistema descrito en
JP2001034381 que utiliza dibujos asociados a movimientos del cuerpo humano, que a
su vez son empleados con el fin de controlar la interacción con el sistema. La diferencia
principal con la propuesta actual es que en este caso se plantea la posibilidad de
30 disparar y calcular los efectos visuales sobre la imagen del usuario objeto o usuario
detectado por el dispositivo de entrada calculando su posición y utilizando máscaras
como parámetros de referencia.
5 1º Finalmente, se conoce el sistema descrito en JP2005339100 que pretende el análisis de movimiento del cuerpo humano y plantea un método para realizar este análisis. De las imágenes detectadas por el dispositivo de entrada se extrae el cuerpo y esta silueta se transforma en un esqueleto. La diferencia entre el citado documento y la presente invención se sitúa en que el procesamiento de la identificación del movimiento se realiza a partir de este esqueleto, no sobre las imágenes o silueta detectada. Dado que pretende analizar el ritmo del movimiento plantea la separación en partes de ese esqueleto y el análisis de la cantidad y frecuencia de movimiento que existe en cada parte. Para lograrlo se crea un vector que analiza la cantidad de movimiento mediante la utilización de técnicas como la transformación lineal de Hough, filtro de Kalman para el seguimiento del tiempo, transformada de Fourier para la extracción de las caracterís~icas del movimiento y frecuencia, etc., difiriendo conceptos y planteamiento con nuestra invención.
15 Descripción de la invención
20 La presente invención se basa en un sistema que permite la aplicación de efectos visuales en objetos o sujetos estáticos o en movimiento en tiempo real sin necesidad de marcas, logrando una interacción natural entre el objeto o el sujeto ylos dispositivos de entrada y de salida para lo que se utilizan técnicas de visión por computador.
El sistema comprende:
25 30 -Un dispositivo de entrada que permita la captura de imágenes, en cualquier formato y en tiempo real, que disponga de una interfaz de acceso al flujo de datos capturado. Dependiendo del tipo de dispositivo, se puede controlar y realizar ajustes en tiempo real sobre el flujo de datos capturado, tales como: resolución, tamaño y calidad de la entrada, así como propiedades como, brillo, contraste, saturación, etc. -Un escenario configurado de tal forma que la iluminación y el fondo estén controlados. El escenario debe contener la iluminación y el fondo que serán utilizados para la configuración de los parámetros iniciales de los filtros de procesamiento de imágenes. Este escenario no debe contener "falsos" objetos en el fondo, es decir,
sombras u objetos en movimiento diferentes de aquél en el que queremos aplicar los efectos visuales.
-Un módulo de procesamiento de imágenes en tiempo real y detección de movimiento a través de filtros. El módulo de procesamiento de imágenes contendrá los filtros que se utilizarán para detectar, analizar y aplicar los distintos efectos visuales en las imágenes en tiempo real.
-Un dispositivo de salida donde se proyectan las imágenes procesadas. El dispositivo de salida puede ser cualquier visualizador de imágenes: pantallas de ordenador, proyector, televisión, etc.
Como ventaja técnica se debe mencionar que la interacción entre el objeto o sujeto y los dispositivos de entrada y salida, se realiza sin marcas en el objeto o sujeto, por lo que es no invasiva y no intrusiva. De esta forma el objeto o el sujeto interactúa con su propio cuerpo y con sus movimientos naturales si este se encuentra en movimiento.
Esta tecnología puede aplicarse para generar contenidos visuales donde un observador externo, o el propio objeto o sujeto aprecien cómo actúan agentes externos o acciones realizadas en/con/sobre el cuerpo. Por ejemplo se pueden generar efectos visuales relacionados con las prendas, de tal forma que un sujeto aprecie el aspecto de una prenda sobre su figura y cómo estas prendas se ajustan al movimiento que el sujeto realiza. También pueden mostrarse aspectos relacionados con el cabello, con la anatomía interior del cuerpo humano o cualquier otro evento, efecto gráfico o animación que se desee. Dichos eventos, efectos gráficos o animaciones son aplicados en el cuerpo en tiempo real.
Para el funcionamiento del sistema se necesita la aplicación de diferentes algoritmos que forman parte de cada uno de los filtros implementados en el módulo de procesamiento de imágenes en tiempo real y detección de movimiento. Se tienen dos tipos de filtros fundamentales: filtros de detección y filtros de proyección. Donde:
Los filtros de "detección" consisten : o
-Un filtro de movimiento que permite la detección de movimientos/acciones del sujeto.
Los filtros de proyección considerados consisten, por ejemplo, en: -Efecto halo -Efecto desaturado -Efecto reproducción animación en zona dentro del objeto o sujeto y
seguimiento de movimiento.
Los términos que se manejan se definen de la forma siguiente:
-Fotograma: Definiremos como Fi al fotograma capturado en el instante de tiempo i -Escenario: Espacio fisico de dimensión variable, donde se situará el individuo u objeto sobre el que se realizará el estudio.
-Fotograma clave B: fotograma de referencia con el que se comparan los fotogramas del flujo de datos capturados con el objetivo de encontrar diferencias en atributos de color respecto al el mismo.
-Fotograma máscara Mi. Imagen que contiene la máscara para el instante de tiempo i, que determina que parte del fotograma Pi es parte del sujeto u objeto.
-Máscara es una matriz de valores reales entre O y 1, que se corresponden a un píxel de la imagen obtenida por la cámara o dispositivo de entrada. En este caso los almacenamos como valores de gris. La máscara se utiliza en los filtros de detección y proyección. En los filtros de detección se genera la máscara. En los filtros de proyección lo utilizamos para el cálculo de aplicación de efectos visuales.
Cada uno de los filtros tiene el siguiente funcionamiento:
-Filtro objeto.
Se utiliza para determinar, en primer lugar, a través del estudio del flujo de datos de entrada del dispositivo de captura el espacio ocupado por el sujeto u objeto dentro del escenano utilizado. El segundo paso consiste en comparar de manera sucesiva y en tiempo real, el fotograma actual capturado y el fotograma clave. La operación de comparación entre fotograma actual y fotograma entrenado, consiste en restar, a nivel de píxel, el fotograma actual menos el entrenado. El resultado obtenido de esta operación, conformará el "fotograma máscara", que consiste en una imagen en la que se muestra el espacio ocupado por el objeto o sujeto en color blanco y el resto de la imagen en color negro, logrando la acotación de la región de la imagen sobre la que se aplicarán los demás efectos. Se utilizan los valores máximos y mínimos de las tres componentes de color R, G, B para aplicar los filtros. El blanco es un vector (1.0, 1.0, 1.0) compuesto de los valores máximos de las tres componentes de color. El negro es un vector (0.0, 0.0, 0.0) compuesto por los valores mínimos de las tres componentes. Además, se utilizan cualquiera de los tres componentes como factor de mezcla, donde
1.0 significa aplicar el efecto completamente y 0.0 significa no aplicarlo.
La detección se produce en dos pasos, el primero consiste en el estudio de un conjunto de fotogramas. El resultado de este estudio generará fotograma clave y lo denotaremos como B. Se tomarán tantos fotogramas como sean necesarios hasta eliminar el ruido en el fotograma clave. El ruido de los fotogramas capturados dependerá del tipo de sensor utilizado, de las condiciones de iluminación y de los ajustes internos de la cámara o sensor (autoiluminación, balance de blanco, ganancia, etc.) , del escenario sin ningún sujeto u objeto en pantalla, etc. A este proceso se denomina "Entrenamiento". Una vez finalizado obtenemos el "fotograma entrenado". El fotograma entrenado se compone de varias capturas realizadas en la inicialización y que contiene el fondo original.
Calculamos el fotograma clave Bi paran fotogramas como:
Bi =Average ( Fi-u, Fi- (u-1) , ... , Fi-1)
A continuación, para conseguir aislar la silueta del sujeto del resto de la imagen capturada nos ayudamos del fotograma clave Bi. El objetivo es determinar que zona del fotograma actual capturado (Fi) ha cambiado con respecto al fotograma clave Bi al introducir un elemento sobre el mismo.
Para determinar que píxeles de la imagen capturada han cambiado con respecto al fondo original, procesamos cada píxel del fotograma Fi con su correspondiente píxel en fotograma clave Bi de la siguiente manera:
Sean FiR, FiG, FiB las componentes R G y B del fotograma capturado en el instante i.
Sean BiR, BiG, BiB las componentes R G y B del fotograma clave.
Sean 8R, 8G, 8B los umbrales de aceptación de cada componente RGB.
Calculamos la máscara del sujeto para el instante i como:
1.0 si 1 BiR-FiRI > 8R ó 1 BiG-FiGI > 8G ó 1 BiB -FiBI > 8B Mi =0.0 en caso contrario.
Siendo la entrada:
A: Píxel de la imagen capturada B: Píxel correspondiente en la imagen original. Salida:
C: Píxel que determina si el píxel actual ha cambiado:
Dado que el procesamiento se realiza fotograma a fotograma y una imagen estática no tiene movimiento, determinamos que hay movimiento en las zonas que no son comunes entre el fotograma clave y el fotograma capturado en un cualquier instante. De esta forma queda definido el movimiento en un fotograma con respecto al fotograma clave como negro en las zonas comunes y manchas blancas en las zonas que son diferentes entre ambos.
Hay que tener en cuenta el umbral de aceptación para cada componente del espacio de color. Por ejemplo si el espacio es RGB, necesitaremos umbrales para las componentes: Rth, Gth, Bth.
Por lo tanto, para cada componente del espacio de color se hace la diferencia de los píxeles de las componentes significativas y se toma la mayor de las diferencias que dependen del espacio de color utilizado. En este caso se ilustra el procedimiento con el
RGB donde se hace la diferencia entre las tres componentes, ya que todas proporcionan la misma cantidad de información sobre el color.
Luego, para calcular la citada diferencia:
lB -Al
A continuación, se compara cada diferencia con el umbral correspondiente a su componente, previamente definido, y determinado según el grado de aceptación que queramos sobre las manchas generadas al hacer las diferencias.
Si alguna de las diferencias es mayor que su umbral de aceptación:
e= Sujeto.
O si no, e =Fondo.
-Filtro movimiento
La implementación de este filtro permite detectar el movimiento del objeto o sujeto y asociar este movimiento a una acción predeterminada e interpretada por el sistema.
El reconocimiento de la acción disparará el efecto de reproducción de la animación dentro del objeto o sujeto y el seguimiento del movimiento del objeto o sujeto.
Para reconocer una acción se debe detectar un movimiento continuo en una determinada dirección y a una velocidad determinada entre dos o más posiciones de la Imagen.
El procedimiento es el siguiente:
En primer lugar calcularíamos la velocidad del desplazamiento, que puede ser en distintos sentidos, y en vertical u horizontal entre dos fotogramas entre los instantes i e i+ l. Por ejemplo, en el caso del desplazamiento vertical se calcula de la siguiente forma:
Yi+l-Yi Vi= ti+ 1 -ti
Siendo Yi la altura detectada en el instante i y siendo t el tiempo.
Por otro lado, se calcula el desplazamiento (h) entre dos fotogramas entre los instantes i e i+ 1 como:
hi = ICi+1 -Cil
Se define una zona de captura sobre la imagen para realizar el cálculo del movimiento, de esta manera, se aíslan "falsos movimientos" que pueda realizar el objeto o sujeto y que no tengan relación con la acción que estamos detectando en una zona determinada de interés. La zona de captura depende del tamaño del objeto o sujeto a realizar el movimiento, por tanto, se deben definir en tiempo real una serie de parámetros, tales como origen y final, velocidad y distancia.
Las acciones también se han de definir. Por ejemplo, puede implementarse la acción de beber que consiste en que el sujeto levanta un objeto desde la cintura hasta la mitad de la cabeza. Esta acción se describirá posteriormente.
El filtro actuaría inicializando los siguientes parámetros a partir del objeto o sujeto detectado: -Posición inicial: coordenadas de origen donde comenzará a detectarse el movimiento. -Posición final: coordenadas de destino donde se dará por concluido el movimiento.
Una vez detectado que se inicia un movimiento, se debe calcular el centro de la zona capturada donde se esta detectando el movimiento o acción. Para ello obtenemos el rectángulo que lo contiene y calculamos su centro. El valor obtenido será considerado el centro del objeto en movimiento.
Se calcula, a continuación, la distancia medida en píxeles entre dos fotogramas consecutivos, valor que indica el desplazamiento que se ha realizado en línea recta entre los centros del movimiento de dos fotogramas consecutivos. Con este valor podemos estimar la velocidad con la que se mueve el objeto.
Para ilustrar el funcionamiento de este filtro se explica el funcionamiento de la detección una acción específica del sujeto: beber.
Suponiendo que se desea conocer si el sujeto capturado por la cámara está bebiendo, se debe detectar entonces un movimiento continuo y ascendente y a una velocidad adecuada entre dos posiciones de la imagen.
La implementación será de la forma siguiente:
Para determinar en que zona de la imagen capturada hay movimiento, realizamos una diferencia del fotograma actual con el fotograma anterior, almacenado en una imagen auxiliar. De esta manera, la zona que en ambas imágenes es similar quedará negra y la zona con diferencias notables en colores claros. Dado que la diferencia entre los fotogramas contendrá un número elevado de píxeles claros aislados debido a movimientos leves e inevitables, se procesa cada píxel de la imagen generada por la diferencia de fotogramas de la siguiente manera:
Entrada: Imagen generada a partir de la diferencia entre dos fotogramas Salida: Máscara que determina en que zona de la imagen hay movimiento.
Parámetros: Umbral de aceptación para cada componente del espacio de color.
Distancia: Distancia a la que se encuentran los píxeles cercanos.
A continuación se compara cada componente con su correspondiente umbral de aceptación. Este umbral de aceptación es dependiente de las condiciones externas de iluminación, cantidad de colores que hay en cada momento en la imagen, precisión que se desee obtener y el ajuste que se desee entre el objeto que se mueve y la zona de movimiento que se dese capturar. Con esto se consigue despreciar los movimientos que no nos interesan.
Para los píxeles en los que se haya detectado movimiento se debe analizar sin una zona contiene píxeles de movimiento:
Para ello, se comprueba si los píxeles que se encuentran a cierta distancia (1 a n píxeles) del píxel en el que se detectó el movimiento, también son de movimiento.
Si todos los píxeles comprobados son de movimiento: se considera definitivamente de movimiento.
En caso contrario no se considera movimiento en ese píxel.
La implementación de este código puede realizarse por ejemplo en Adobe Píxel
Blender Toolkit.
Partiendo de una imagen generada a partir de la diferencia entre dos fotogramas consecutivos, se procesa cada píxel de la siguiente manera:
void evaluatePíxel () { float threshold = 0.1; float2 coord = outCoord () ; float2 hOffsetx = float2 (píxe1Size (forelmage) .x, 0.0) ; float2 hOffsety = float2 (0.0, píxelSize (forelmage) .y) ;
float4 forePíxel = sampleNearest (forelmage, outCoord () ) ;
Asignamos a la variable WhiteColor un valor 1.0 si las tres 11 componentes superan el umbral de color y 0.0 si no es así. float whiteColor = (forePíxel.r > thresold && forePíxel.g > thresold && forePíxel.b > thresold) ? 1.0: 0.0; 11 Si la variable es mayor que cero tomamos el valor de los píxeles 11 Qe se encuentran exactamente en un radio de 5 píxeles. 11 En este caso, utilizamos solo los píxeles que se encuentran en la// horizontal y en la vertical del píxel que estamos estudiando. if (whiteColor > 0.0) { píxel4 up = sampleNearest (forelmage, coord-5.0 *hOffsety) ; píxel4 down = sampleNearest (forelmage, coord + 5.0 * hOffsety) ; píxel4left = sampleNearest (forelmage, coord-5.0 *hOffsetx) ; píxel4 right =sampleNearest (forelmage, coord +5.0 *hOffsetx) ; 11 Volvemos a asginarle a la variable whiteColor el valor 1.0 //o 0.0 si las componentes de los 4 píxeles estudiados superan 11 el umbral establecido. whiteColor = ( up.r > threshold && up.g > threshold && up.b > threshold
&& down.r > threshold && down.g > threshold && down.b >
threshold
&& left.r > threshold && left.g > threshold && left.b > threshold
&& right.r > threshold && right.g > threshold && right.b >
threshold)
? 1.0: 0.0; } 11 Finalmente asignamos a las componentes del píxel de destino el
valor de la variable whiteColor dst = float4 (whiteColor, whiteColor, whiteColor, 1.0) ; }
De esta forma se obtiene una máscara que determina donde hay movimiento en alguna zona de la imagen.
A continuación inicializamos las siguientes variables:
-Ultima_Posición: altura donde queremos capturar el comienzo del movimiento ascendente.
-Máximo_Tamaño_Rectángulo: Dimensiones máximas que debe tener el rectángulo para considerar el movimiento y evitar realizar cálculos sobre movimientos de todo el cuerpo. Se utiliza un rectángulo dado que nos proporciona los valores de alto, ancho y posición horizontal y vertical de una de sus esquinas. Esta figura es la más simple para el cálculo computacional de la detección del movimiento.
-Posición_ Actual: Altura actual del rectángulo.
-Altura_ Inferior, Altura _Superior: Alturas origen y destino del movimiento.
-Distancia_ Máxima: Se utiliza para limitar la velocidad del movimiento.
Seguidamente obtenemos el rectángulo que contiene a la zona blanca de esta máscara mediante la función Bounding Box, una función que nos devuelve el rectángulo más pequeño que contendría a todos los píxeles de determinadas características dentro de una imagen. Particularmente todos los de un color determinado. En este caso buscamos el que contenga a los píxeles de color blanco.
En cada fotograma tomamos el borde superior (coordenada Y de la esquina superior derecha) del rectángulo: Posición_Actual.
Si se cumplen las siguientes condiciones,
- Tamaño del rectángulo es menor a Máximo_ Tamaño_ Rectángulo. -Posición Actual < Ultima Posición -Posición Actual< Altura Inferior -Última_Posición-Posición_Actual y< Distancia_Máxima.
Entonces se realizan lo siguiente:
-Se almacena el valor de Posición Actual en Ultima Posición.
-Si Posición Actual > Altura_ Superior entonces la persona está
bebiendo.
Un ejemplo de la implementación del filtro podría ser el siguiente:
public function detectMovement (mixLevel: Number) : void { 11 Obtenemos la parte superior de la silueta del sujeto: Calculamos el rectángulo //que contiene su silueta y obtenemos la coordenada y del mismo. 11 A partir de este valor definimos la altura donde comineza y termina el 11 movimiento. var top: int = subjectMask.getColorBoundsRect (OxFFFFFF, OxFFFFFF, true) .y + 40; var bottom: int = top + 90; 11 Obtenemos la diferencia entre el fotograma actual y el anterior. lastFrame.draw (_src, , , BlendMode.SUBTRACT) ; 11 Aplicamos el filtro que elimina los píxeles aislados. lastFrame.applyFilter (lastFrame, imageRect, new Point () ,
detectMovementShaderFilter) ; 11 Obtenemos el rectangulo que contiene la zona de la imagen donde hay movimiento. movementRectangle = lastFrame.getColorBoundsRect (OxFFFFFFFF, OxFFFFFFFF,
true) ; 11 Primeros requisitos del rectangulo: 11 Utilizamos las dimensiones del rectangulo obtenido para determinar si hay 11 movimiento en la imagen y también para rechazar imágenes con movimientos de 11 objetos mayores al que se quiere detectar if ( (movementRectangle.width >O) && (movementRectangle.width < 100) ) { 11 Segundos requisitos del rectángulo 11 Comprobamos que la altura del rectánculo esté entre las alturas 11 previamente calculadas, y que la altura en el fotograma actual es mayor
que la detectada en el fotograma anterior. Con esto limitamos la 11 detección a un movimiento ascendente.
También comprobamos que la difencia entre la altura del rectángulo del
fotograma actual y el anterior (en píxeles) no supere cierto valor.
En este caso lo hemos ajustado a 50 píxeles.
if ( (movementRectangle.height < 120)
&& (movementRectangle.y < lastArmPosition)
&& (movementRectangle.y < bottom)
&& (lastArmPosition-movementRectangle.y <50) ) {
//Dado que este fotogramas cumple con los requisitos de un 11 Movimiento correcto (Condiciones anteriores) , Iniciamos a O el
contador de fotogramas con fallo. frameCount = O;
Actualizamos la altura anterior con la actual. lastArmPosition = movementRectangle.y;
Si hemos alcanzado la altura final, consideramos que hemos 11 detectado el movimiento if (lastArmPosition < top)
bebiendo = true; 11 Para los fotogramas que cumplen los primeros requisitos (hay movimiento 11 y de dimensiones adecuadas) pero no los segundos (no se realiza 11 movimiento a la velocidad y en el sentido adecuados, incrementamos el 11 Contador de fotogramas con fallo. } else { frameCount++; } } 11 Al superar el numero de fotogramas con fallo reponemos el contador y asigamos a 11 la posicione anterior del brazo la posición inicial. if ( frameCount > 15) { lastArmPosition = bottom; frameCount = O; } }
Descritos los filtros de detección, pasemos a describir los filtros de proyección.
-Filtro Halo
Se utiliza para proyectar la superposición de un "halo" coloreado alrededor del contorno del sujeto u objeto. Este efecto añade a la imagen original un efecto luminoso del color deseado alrededor de la figura de un sujeto u objeto mostrado ante la cámara o dispositivo de entrada. Se emplea la mascara con la silueta del sujeto, generada en etapas anteriores, para dibujar el halo en la zona definida como fondo (negro) más próxima al sujeto.
El funcionamiento del mismo consiste en (véase Figura 1) :
Aplicar, en pnrner lugar, a la máscara del sujeto u objeto un efecto de difuminado que agregará un degradado de blanco a negro entre la silueta del sujeto u objeto y el fondo, generando una nueva máscara en diferentes niveles de gris. El efecto de difuminado se consigue asignando a cada píxel el valor promedio de todos los píxeles contenidos dentro de una ventana de n x n píxeles teniendo en su centro al píxel que querernos modificar. La distancia de separación con respecto al píxel determinará la intensidad del difuminado.
Se considera zona válida para dibujar el halo a aquella zona externa a la silueta del sujeto pero que no sea negra en la máscara difuminada.
A continuación, se mezcla la imagen original con el color deseado en la proporción determinada por la intensidad de gris de la zona válida.
La descripción algorítmica es la siguiente (véase Figura2) :
Primero: Sea A la máscara del sujeto, realizamos una copia B de la misma.
Segundo: Aplicarnos sobre A un efecto de difuminado.
Tercero: Para todos los píxeles (i, j) de A, Si B (i, j) = 1.0, A (i, j) = 0.0, o lo que es lo mismo, se procede a eliminar la zona ocupada por el sujeto. Cuarto: Para todos los píxeles (i, j) de A, A (i, j) = A (i, j) * 2.0; o lo que es lo mismo, se procede a duplicar la intensidad del efecto.
5. Quinto: Aplicarnos sobre A un efecto de difuminado.
- Filtro desaturado
5 Permite eliminar la diferencia entre las componentes de la imagen en la zona determinada por la máscara de sujeto, creando un efecto "Blanco y Negro" sobre el sujeto detectado.
1º El funcionamiento del mismo consiste en que para cada píxel de la imagen se calcula su valor desaturado realizando la media entre sus componentes R, G y B. Esto es, para cada píxel de la imagen, obtenemos el valor de sus tres componentes como R =B = G = (Roriginal + Goriginal + Boriginal) 13.0;
15 A continuación, la imagen desaturada resultante se mezclará con la original según los niveles de la mascara del sujeto de la forma siguiente: R = Roriginal * (1-valor de la máscara) + Rdesaturado* Valor de la máscara G = Goriginal * (1 -valor de la máscara) + Gdesaturado* Valor de la máscara B =Boriginal * (1-valor de la máscara) + Bdesaturado* Valor de la máscara
20 25 Para conseguir un suavizado entre la zona saturada y el fondo se puede aplicar también un efecto de difuminado de la intensidad deseada, definiendo niveles intermedios entre el blanco y el negro de la máscara. Esto es así, dado que la máscara obtenida del sujeto solo contiene valores 1.0 o 0.0 por lo que los contornos presentan los denominados "dientes de sierra". Aplicar un efecto de difuminado suaviza los contornos proporcionando un aspecto mas suave y natural.
30 Para cada par de píxeles correspondientes entre la imagen original y la imagen resultado se tiene como entrada A: Píxel de la imagen original. B: Píxel de la máscara. Valores comprendidos entre O y l.
Y como salida: S: Píxel de la imagen resultado.
A continuación se calcula:
C = Píxel desaturado a partir del píxel de la imagen original.
Donde, por ejemplo, para RGB se calcula como (R+G+B) 13
Para HSV, un espacio de color en el que las componentes son: tonalidad (una de las frecuencias del espectro lumínico) , intensidad de iluminación y saturación (cantidad
de color respecto de su valor de iluminación) se calcula haciendo la componente S = O
(Saturación = 0) , aunque como alternativa, es suficiente multiplicar la componente de saturación por B.
Finalmente se aplica la máscara (B) para determinar que cantidad de A y C se almacenará en S.
Lo mencionado equivale a aplicar si se trabaja en el espacio RGB, a cada componente de color: S= A* (1 -B) + C * B, mientras que para HSV se multiplica la componente de saturación por B, por lo que no es necesario calcular C (Píxel
desaturado) .
Como ejemplo de código implementado se tiene:
Evalución de cada píxel en lenguaje Adobe Píxel Blender Toolkit.
void evaluatePíxel () {
Obtención de los valores del píxel de ambas máscaras float4 frontPíxel = sampleNearest (frontimage, outeoord () ) ;
float4 maskPíxel = sampleNearest (masklmage, outeoord () ) ;
Obtención de la componente r de cada píxel.
float B = frontPíxel.r;
float A = maskPíxel.r;
Definimos el valor inicial a partir de los valores 11 anteriores float e= 2.0 * (1.0-A) * B;
Asignamos el valor obtenido a todas las componentes 11 del píxel de destino (Mascara compuesta resultante)
Obteniendo una imagen es diferentes niveles de gris.
dst = float4 (e, e, e, 1.0) ;
}
-Filtro de reproducción animación en zona dentro del objeto sujeto y seguimiento de movimiento.
En este filtro se reproduce una animación dentro de una zona del sujeto u objeto detectado (zona en máscara objeto) , realizándose tanto el procesamiento como la reproducción por cada frame analizado de tal forma que se sigue el movimiento del objeto o sujeto.
El funcionamiento de este filtro consiste en aplicar para cada frame saturado las siguientes etapas:
En primer lugar, generar la máscara con el contorno del sujeto u objeto.
A continuación, tomar el rectángulo mínimo que contiene al sujeto u objeto en la máscara. Este rectángulo definirá la posición y dimensiones del sujeto u objeto dentro del fotograma actual, por lo que se dispone del ancho, alto y la posición horizontal y vertical de uno de sus vértices.
Acto seguido se fijan las coordenadas donde desea reproducir el vídeo, efecto visual o animación deseada, así como su tamaño en posiciones y dimensiones relativas al rectángulo detectado.
Finalmente se realizan las operaciones aritméticas sobre los valores de posición y tamaño, tanto del rectángulo como de la imagen a superponer, para calcular la posición y tamaño finales de la imagen a reproducir.
Suponiendo que se desea reproducir una animación en el centro del sujeto, se procedería de la forma siguiente:
Primero se define: Xr, Yr, Wr, Hr: Posicion horizontal, posición vertical ancho y alto del rectángulo. Xv, Yv, Wv, Hv: Posicion horizontal, posición vertical ancho y alto del vídeo.
Segundo se define un factor de escala, compuesto por un número entero que indica la escala del video con respecto al tamaño original
Tercero se calcula: Xv = Xr + (Wr 12) + (Wv 12) Yv = Yr + (Hr 12) + (Hv /2) Hv =Hr *Factor de escala. Wv = Wr * Factor de escala.
En cuarto y último lugar, se proyecta y reproduce la animación que se desee.
De forma general este sistema que permite la aplicación de efectos visuales en objetos o sujetos estáticos o en movimiento en tiempo real sin necesidad de marcas funcionaría de la siguiente forma (véase Figura 2) :
Un sujeto u objeto entra en el escenario controlado y se posiciona frente al dispositivo de entrada, por ejemplo, una cámara estática a una distancia mínima que permita su visualización de su cuerpo entero o parte del cuerpo que desee verse en el dispositivo de salida.
El sujeto no necesita llevar ropas, guantes, ni ningún objeto o color que para su identificación, detección y o tratamiento por el sistema, es decir, no necesita ninguna marca.
El fondo y la iluminación deben estar controlados, evitando las sombras sobre el fondo o sujeto. Se puede seleccionar por ejemplo:
-Fondo: color pnmano, uniforme y mate, cubriendo todo el angular de la cámara. -Iluminación: tipo de iluminación "luz de día", iluminando fondo y sujeto sin proyección de sombra en el angular de la cámara ni iluminación directa.
El dispositivo de visualización o de salida se ubica frente al sujeto, de forma que simule un espejo, aunque este dispositivo también podrá ubicarse en otras posiciones, de forma que el sujeto pueda observarse en él (por ejemplo, a un costado o arriba) .
El dispositivo de procesamiento controlará y procesará las imágenes desde los dispositivos de entrada hacia los dispositivos de salida que se encuentra conectado a los ffilSffiOS.
Con el sujeto en posición e iluminación y fondo controlado el proceso comienza de la siguiente forma (Véase Figura 2) :
Primero: se reciben desde el buffer de datos del dispositivo de entrada (cámara estática) imágenes secuencialmente en formato nativo (bitrnap) . Dependiendo del dispositivo de entrada se necesitarán codee diferente para decodificar las imágenes. En el caso de bitrnap, no hay codificación y se hace automático.
Segundo: se tornan las imágenes en la resolución nativa del dispositivo y se redirnensiona a una resolución menor para el cálculo. Los fotogramas son capturadas a la resolución nativa del dispositivo de entrada, para garantizar así la calidad de los mismos. Durante el proceso de estudio, estos son redirnensionados a una resolución cercana a 320x240 ( o proporcionalmente, en caso de que la resolución óptima del dispositivo de entrada sea mayor) para garantizar que el proceso de cálculo se desarrolla a un nivel óptimo en tiempo real. La capacidad de cómputo es directamente proporcional a la potencia de la máquina en la que se ejecute el sistema.
Tercero: se realiza un análisis y procesamiento secuencial de imágenes en tiempo real analizando en cada una de ellas sus componentes de color para detectar sus diferencias con el flujo de datos de entrada (vector de mapas de bits) .
Cuarto: se optimiza el procesamiento y la comparación de los frarnes mediante los denominados "filtros de detección siguientes: -Filtro objeto: compara A con B, donde A es fondo entrenado y Bes fotograma actual -Filtro movimiento: compara A con B, donde A es el frame anterior y B es el frarne actual
El proceso de comparación general funciona de la siguiente forma:
Una vez se recibe el flujo de datos de entrada (frame-bitrnap) , se descompone dicho frarne de entrada en sus componentes según su espacio de color. En el caso de RGB, se descompone en 3 canales de color, se procede a la realización de la diferencia
de componentes a nivel de píxel y se toma el que más diferencia tenga en cada píxel por cada canal de color, en función de un umbral predeterminado (que se pide como parámetro) . Los umbrales se fijan en función de la iluminación y fondo.
Quinto: A la imagen original se le aplican filtros de proyección, que dependerán de los valores de color, límites y puntos de referencia (parámetros) de la máscara detectada y del dispositivo de salida.
Todos los filtros son inicializados con una serie de parámetros que pueden variar 1º según condiciones de iluminación, tamaño y efecto a conseguir. Se pueden incluir 1 a n filtros y configurarlos.
Para la visualización, se redimensionan nuevamente a la resolución adecuada al dispositivo de salida utilizado en cada caso. 15
Descripción de las figuras En la figura 1 se describen los pasos para la crear el efecto de halo sobre el sujeto u objeto detectado. Estos pasos son:
l. Se captura un fotograma
2. Se obtiene la máscara correspondiente al fotograma capturado A y se crea una copia B.
3. Se aplica un efecto de difuminado a A.
4. Se multiplica A por 2 y se le resta B
5. Se aplica a A un segundo difuminado.
6. A determina donde dibujar el halo y con que intensidad alrededor de la silueta del sujeto. En los pasos 2, 3, 4 y 5 se observa las variaciones de valores en el rango 0.0-1.0 del fondo (negro) y de la silueta del sujeto/objeto (blanco) con las que se obtiene este efecto 30 de halo sobre la silueta.
La Figura 2 representa un esquema que describe en forma resumida como se estructura el sistema en etapas dentro de un proceso secuencial y los elementos claves que componen cada etapa.
Modos de realización de la invención A modo de ejemplo, un sistema que permite la aplicación de efectos visuales en objetos o sujetos estáticos o en movimiento en tiempo real sin necesidad de marcas está constituido por:
-Dispositivo de entrada: Webcam Creative Labs -Escenario controlado: Habitación de 3 m. de largo por 2 m. de ancho. Fondo croma (color azul ó verde) e iluminación "luz de día" (temperatura de color de entre
5.600 K y 6.000 K) . -Dispositivo de salida: Proyector LCD haz de luz rectangular. -Dispositivo de procesamiento CPU de un ordenador portátil en el que se han implementado los filtros de detección y los filtros de proyección descritos anteriormente.
El objetivo se basa en mostrar como se encuentra el aparato digestivo de una persona antes de beber y después de beber una determinada sustancia líquida, de tal forma que la persona observe en el dispositivo de salida un efecto visual animado en el interior de su cuerpo.
Como se ha indicado, en primer lugar, se ha de fijar el fondo, la iluminación, y establecer los umbrales y parámetros iniciales para los filtros de procesamiento de imágenes. Los umbrales dependen de los colores y contrastes capturados por el dispositivo de entrada. La correcta definición de los umbrales influye en la precisión de la detección.
Se debe considerar que unos umbrales con valores más altos que los establecidos como correctos harán que la silueta del sujeto obtenida presente manchas en el interior del contorno definido por la silueta, estas manchas se interpretan como fondo, mientras que unos umbrales con valores más bajos presentarán manchas en el fondo de la imagen confundiéndolas como parte del sujeto. Esto afecta especialmente en la reproducción del efecto visual en el interior del contorno definido por la silueta del sujeto y en el filtro de detección de movimiento.
A continuación se sitúa al sujeto en el escenario anterior y se le hace posicionar frente a la cámara tomando como referencia la visualización frente al proyector LCD, que el sujeto interpreta como si fuese un espejo. La imagen del sujeto es proyectada.
Acto seguido, se aplica el filtro de detección de sujeto descrito en apartados anteriores, realizando el recorte de la figura del fondo. Esta máscara del sujeto se utiliza como referencia para aplicar un filtro de efecto visual "desaturado", también descrito, creando la impresión en el sujeto de una pérdida de color, que es interpretado de manera imaginaria como una posible deshidratación.
A continuación el sujeto toma líquido, para lo cual toma una botella y se aproxima la misma a la boca. Esta acción se detecta mediante el filtro de máscara de movimiento. La acción beber es interpretada por las posiciones prefijadas de punto inicial y final en los frames, tal como se indicó anteriormente en la explicación del funcionamiento de este filtro. Al detectarse la acción, se dispara la aplicación del filtro de efecto visual de reproducción animación en zona dentro del sujeto y seguimiento de movimiento.
Dentro de la zona de reproducción, se muestra la animación deseada, por ejemplo, de unas bolitas cayendo por el cuerpo y su expansión dentro del cuerpo (caen por la garganta hasta el intestino y allí se expanden) .
El sujeto puede moverse en el escenario y la animación seguirá su movimiento y se reajustará a su tamaño gracias al filtro anterior.
Cuando termina esta animación, se dispara el siguiente filtro de efecto visual de halo, en donde se dibuja un halo de color sobre la silueta del sujeto con las características predefinidas.
En todo momento el sujeto puede moverse en el escenano y los efectos se ajustarán a sus movimientos. Esto se debe a que el análisis y procesamiento de imágenes se hacen frames a frames en tiempo real.