• No se han encontrado resultados

Capítulo 3. Solución Propuesta

3.3. Construcción del Modelo de Visión

3.3.4. Optimizaciones

El diseño fundamental del algoritmo que construye la imagen de representación del espacio de visión finaliza en la sección anterior, pero su implementación planteó otra serie de problemáticas relacionadas con la performance. La versión principal fue realizada en C#, facilitando su integración con el resto del software y con otras aplicaciones creadas por el instituto en donde se desarrolla el trabajo final. El procesamiento a nivel píxel, sin embargo, resultó especialmente costoso. La primera versión durante el desarrollo mostró una latencia de más de un minuto y medio para procesar un cuadro, haciendo evidente la imperiosa necesidad de implementar optimizaciones para alcanzar tiempos viables para el procesamiento en tiempo real.

Figura 21 – Corrección de la distorsión de la cámara

Corte de una sola dimensión en ry= 0. El color del punto r en el plano de grabación es

muestreado del píxel más cercano a la coordenada correspondiente al punto C(r ) en la imagen grabada.

44

3.3.4.1. Especificidades del Espacio de Visión

Las proyecciones del plano a la esfera mencionadas mapean toda la superficie esférica a la imagen final, pero esto es un desperdicio de almacenamiento y procesamiento para las cámaras de tipo domo como la experimental, las cuales tienen acceso a cualquier ángulo de dirección, pero solo a los ángulos de 0° a 90° de inclinación. Si se recorta la superficie inaccesible, se reducen los cálculos a cerca de la mitad.

Debe tenerse en cuenta que no solo se debe considerar la semiesfera inferior como zona accesible, sino también la región por encima del horizonte que la cámara es capaz de grabar cuando su inclinación es 0°. Para implementar esta optimización se deben introducir pequeñas modificaciones en las proyecciones expuestas. En el caso de la proyección equirectangular – que fue considerada la estándar para transformar de la esfera al plano en esta solución – el 𝑦𝜑=0 en la imagen final (horizonte) ya no es

𝐻

2, sino el 𝑦

correspondiente a 𝑉𝜑

2 (la mitad del campo de visión vertical). Los cálculos pueden ajustarse

calculando el campo total en el eje 𝑦 e interpolando con la coordenada de normalizada, es

decir 𝜑𝑖 = −𝜋 + (𝜋 +𝑉𝜑 2) (1 −

𝑦𝑖

𝐻), para cada píxel 𝑖. 3.3.4.2. Resolución de las imágenes

El tamaño de la imagen final 𝑊 × 𝐻 también altera la precisión y el tiempo de

ejecución del algoritmo. La resolución fue elegida para que sea lo suficientemente grande como para evitar la pérdida de información al escalar la imagen durante la proyección. Si

𝑁 es el ancho de la imagen grabada y 𝐿 su alto, esto puede asegurarse con 𝑾 =2𝜋 𝑉𝜃𝑁 y 𝑯 =𝜋+𝑉𝜑 2𝑉𝜑 𝐿 = ( 𝜋 2𝑉𝜑+ 1 2) 𝐿.

Adicionalmente se agregaron márgenes en la imagen grabada. Esto permite descartar la porción del cuadro que muestra la fecha y hora, reducir el error por distorsión que se acentúa en los extremos, y descartar también la aberración de intensidad producida por la cámara que obscurece los bordes de la imagen. Por otro lado, el cálculo del campo de visión no es inmediato tras el uso de márgenes – deberían implementarse las funciones inversas de las proyecciones y de distorsión de la lente – por lo que se ajustó manualmente.

45

3.3.4.3. Máscara de proyección

Una falla importante del enfoque inicial es ejecutar el algoritmo a lo largo de toda la imagen final, realizando los cálculos explicados en la sección anterior para cada uno de los píxeles, en cada uno de los cuadros procesados. De nuevo, puede utilizarse el conocimiento de las coordenadas para ahorrar costos y procesar sólo la región de la imagen que está siendo observada. No es posible hacer un recorte rectangular de la región observada directamente porque no es un rectángulo, sino una región distorsionada de manera distinta dependiendo de la proyección de la esfera al plano y de las coordenadas apuntadas. Por ello el enfoque empleado es calcular esta región antes de procesar el cuadro mediante la ejecución de los mismos algoritmos de construcción sobre una imagen virtual con una resolución del 7.5% de la resolución de la imagen final, y almacenar el resultado en una máscara binaria – la cual fue llamada máscara de proyección.

El porcentaje de resolución elegido es una aproximación empírica que balancea la performance temporal del cálculo de la máscara con el efecto de pixelado generado al escalarla al momento del control de pertenencia de los píxeles. La clase que representa la máscara tiene también metadatos que determinan su bounding box – el rectángulo de área mínima que contiene a toda la región observada – para delimitar en dónde deben realizarse los controles de pertenencia a la máscara y reducir más los costos.

Durante el procesamiento del cuadro se recorre el bounding box y se realizan los cálculos de las proyecciones solo para los píxeles incluidos en la máscara. Debido a que la misma tiene un tamaño menor a la imagen final, debe muestrearse su valor binario teniendo en cuenta el factor de escala; esto produce un efecto de aliasing en los bordes de la región. La máscara es expandida en un ancho de un píxel en todas direcciones para

Figura 22 – Ejemplo de máscara de proyección

Máscara de proyección al 7.5% de la resolución original para las coordenadas (100°, 60°), utilizando la proyección equirectangular para transformar de la esfera al plano. El rectángulo rojo indica el bounding box que será utilizado para comprobar la condición de pertenencia de los píxeles a la región delimitada por la máscara.

46

solucionar el problema del descarte incorrecto de los bordes de la región observada, aumentando levemente los costos de procesamiento, pero eliminando el aliasing del resultado final.

Durante la proyección final también se calcula la máscara de región observada, que es la versión no reducida de la máscara de proyección, e indica qué píxeles fueron efectivamente proyectados sobre la imagen final durante el procesamiento del cuadro.

3.3.4.4. Cambio de la máscara en el tiempo

Hasta este punto se describió el caso más general, en el cual se asume que la posición de la cámara puede variar cuadro a cuadro. Sin embargo, este no es el modo habitual de operación en la aplicación experimental desarrollada, sino que se utilizan coordenadas específicas en donde la cámara permanece por un periodo de tiempo antes de rotar nuevamente. En este caso la máscara de región observada no tiene porqué ser calculada cuadro a cuadro, sino que puede crearse luego de cada rotación para ser utilizada en los cuadros posteriores, hasta que se ordene un nuevo giro. El cálculo del plano de visión también puede limitarse sólo al momento de la rotación y asumirse que permanecerá constante hasta la próxima orden de movimiento a coordenadas específicas. Esta es la versión final utilizada en el proyecto, permitiendo tomar ventaja del modo de operación.

3.3.4.5. Ciclos livianos

Además de la reducción de procesamiento gracias a la máscara, se logra reducir latencia para su utilización en tiempo real mediante modificaciones en los detalles de implementación. El acceso a propiedades de los objetos en C# es costoso, por ello en cada cuadro se almacena toda la información en variables locales antes de comenzar a iterar sobre los píxeles Para las imágenes se utilizan los accesos directos que las direccionan como arreglos de bytes. Adicionalmente, se replicó el código del algoritmo para la versión que calcula la máscara en vez de generalizar un único método; de esta forma se evitan sentencias condicionales y algunos cálculos innecesarios dentro de las iteraciones. Los resultados muestran una mejora sustancial después de aplicar estos cambios.

47

3.3.4.6. Áreas de Interés y Distorsión

Otro aspecto a tener en cuenta es la importancia relativa de las regiones del espacio de visión procesadas y almacenadas. Si – por ejemplo – es muy infrecuente que pasen objetos justo por debajo de la cámara, entonces la proyección equirectangular está desperdiciando un gran porcentaje de la imagen en una región que es de muy poca utilidad analítica. Además, como la resolución de la imagen fue elegida para ser lo suficientemente grande como para no perder información en el horizonte, la grabación de la región inferior es expandida, introduciendo redundancia y ocupando espacio y comprobaciones de pertenencia que aportan pocos beneficios.

Se puede obtener una mejor relación costo-utilidad alterando la proyección de la esfera al plano, de manera que expanda las áreas de interés y contraiga las que resultan poco relevantes. Esto puede permitir a su vez reducir la resolución de la imagen final y, por ende, acelerar el procesamiento.

Para ello se experimentó aplicando una nueva función de cálculo del ángulo 𝜑, que

obtiene su valor normalizado en base al nuevo mapeo y lo utiliza como factor de interpolación entre los ángulos disponibles para la cámara: 𝜑𝑖 = −𝜋 + (𝜋 +𝑉𝜑

2) ∙ 𝑀(𝑦𝑖)

para cada píxel 𝑖. En el caso de la proyección rectangular una función de distorsión simple y útil para el emplazamiento del domo experimental es 𝑀(𝑦𝑖) = √1 −

𝑦𝑖

𝐻, que enfatiza la

región superior por sobre el espacio que está justo debajo de la cámara. Por supuesto, el nuevo mapeo podría considerar también a 𝜃 si se lo considera conveniente para la escena

que se quiere procesar.

En la sección de resultados se muestran imágenes correspondientes a esta función de distorsión 𝑀(𝑦𝑖) y a otras dos aplicadas sobre la proyección acimutal a modo de ejemplo. La elección de qué distorsión usar ha de hacerse en función de la cámara, de su posición, y de las zonas que sean relevantes para la videovigilancia.