Modelo en Capas de Bicoti


El modelo

El modelo en capas de un sistema es una poderosa herramienta de abstracción que permite mostrar en forma breve y simple, las grandes partes de una arquitectura y sus relaciones más importantes. El modelo es especialmente útil para representar jerarquías de servicios como el modelo de redes OSI por ejemplo.

Un enfoque como el anterior no es aplicable en el caso que alguna capa se saltée otra para usar un recurso de una tercera. En estos casos mantener puntos de acceso estrictos entre capas implica en general sacrificar la bidimensionalidad del esquema, comprometiendo la claridad del modelo.

Otro uso típico del modelo en capas es para representar jerarquías de abstracción, que luego se traducirán en dependencias de módulos por ejemplo. El modelo en capas que presentamos a continuación esta concebido sobre esta segunda alternativa.

 
Antes de proceder a las explicaciones en detalle, aclararemos que las lineas gruesas separan una capa de las otras mientras que las finas diferencian niveles de abstracción o comunicación dentro de una misma capa. Se ha renunciado a las formas rectangulares de las capas, en un intento por ilustrar los tipos de comunicación y la estructura interna de ellas.
 

Standard Template Library

La standard template library es la base de nuestra biblioteca, la hemos usado en todos los objetos y algoritmos. Obviamente no es una capa del framework pero está tan íntimamente ligada a este que es inconcevible pensar en Bicoti separado de esta.
 

Basic Components Layer

La capa de componentes básicos tal cual lo indica su nombre, contiene las partes más elementales del framework; podemos decir las piezas básicas de que están hechas el resto de los objetos. En el nivel más bajo están el "Pixel" y la "Coordenada".

El pixel es el componente básico de las imágenes y existen un par versiones estructuradas de los mismos para representar imágenes color o vectoriales, además de los tipos básicos del lenguaje. Sobre los pixeles están definidas un conjunto de funciones (objetos función) usados en diversos algoritmos de las capas superiores, entre los que destacamos:

  • Funciones de pixel en pixel, como: logaritmo, valor absoluto, etc. Entre las que no incluímos los operadores básicos(+,-,etc.), que deben formar parte de la misma clase.
  • Funciones de pixel en attributos de este. Un ejemplo típico son los colores de un pixel, usados por el histograma.
  • Funciones de pixel en boolean, para clasificar pixel según alguna condición.
  • Funciones de pixel en double, que definen el peso de un pixel por ejemplo para calcular un baricentro. Es cierto que estas definen atributos del pixel pero aún así se han distinguido por su importancia.
La coordenada es la que asociada a un pixel, me fija la posición espacial del último. En realidad nuestra coordenada es más un vector que un punto del espacio por las operaciones que tiene definida, pero elejimos el nombre coordenada para evitar ambiguedad con los vectores de la stl por ejemplo.  La coordenada es rica en operaciones, básicamente internas como los operadores básicos o el producto escalar. Aún así existen otras externas de importancia, aunque en general tan fuertemente asociadas a ciertos algoritmos que hemos decidido dejarlas a estos niveles. Algoritmos destacables sobre coordenadas son los de interpolación.

Sobre ambas clases está el Frame que pretende dar una idea de vecindad de un pixel, aunque por razones de eficiencia se limita a entornos cuadrados. Existen operaciones de frame en pixel, como las que aplica el NeighbourFilter. De momento solo necesitamos este tipo pero es perfectamente posible definir otras en el futuro frente a nuevas necesidades y en este caso claro está, este es el nivel donde van.
 

Image Concept and Standard Access Layer

Esta capa incorpora el diseño abstracto de imagen visto en puntos anteriores y los iteradores (forma estándar de accederla). Pero además están los tipos de interpolación dentro de las imágenes y las extrapolaciones fuera de esta. El fin de las interpolaciones es determinar cuales serían los valores de aquellos pixeles no asociados a coordenadas discretas mientras que el de las extrapolaciones es, determinar cuales serían los valores de ciertos pixeles discretos en su posición, pero exteriores a las fronteras de la imagen.
 

Bicoti Algorithms

Engloba todos los algoritmos que no formen parte de los constructores mismos en los objetos de la capa anterior. Aquí estan por nombrar algunos:
  • Funciones de Imagen en Imagen, que escencialmente transforman una implementación aplicando una operación a cada pixel de esta. Multiplicación por un escalar y valor absoluto son dos ejemplos de este tipo de operación.
  • Funciones de Muchas Imágenes en Otra, que aplican una operación asociativa cualquiera entre píxeles. Suma, producto y máximo pixel a pixel entre implementaciones son ejemplos de este tipo de operaciones.
  • Transformaciones, como la de Fourier que además de encapsular el algoritmo proveen funciones para acceder adecuadamente a los resultados.
  • Funciones Destructivas como los filtros de vecindad o transformaciones afines, a las que deben proporcionarse la implementación donde retornar el resultado.

User Application Layer

Si bien en el esquema la fachada no se muestra como capa (entre otras razones porque esta distribuída en todos los niveles) el lugar donde se representó es el correcto desde el punto de vista del usuario. En la práctica usual, el desarrollador trabaja sobre la fachada para crear sus aplicaciones de imágenes y esta se encarga de lidiar con la parte cruda del framework. A este punto y vista a través de la fachada, bicoti es una biblioteca para desarrollo de aplicaciones en tratamiento de imágenes con una estructura muy amigable hacia el usuario. A este mismo nivel de abstracción también estaría el toolkit pero este no existe aún, así que nos limitaremos a mostrar donde debe ser implementado.

Por supuesto que es posible utilizar el framework en forma cruda. Esta es en general la forma más potente y eficiente de hacerlo, a costa de su complejidad intrínseca.

Como comentarios finales diremos que la estructura de módulos de bicoti es un fiel reflejo de esquema en capas.

Sin más pasaremos a ver como es la arquitectura con más detalle.