DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIN Reingeniera de un Software Para Reconocimiento de Imgenes Memoria para optar al ttulo de Ingeniero Civil en Computacin
Felipe Antonio Krauss Benavente
Profesora Gua: Sra. Nancy Hitschfeld-Kahler
Miembros de la Comisin Don Alexandre Bergel Don Benjamn Bustos
Santiago de Chile 01/04/2010
2
Resumen
El presente trabajo plantea la revisin de un software para el Reconocimiento de bordes en imgenes aplicado a anillos de rboles. Dicho producto logra satisfacer sus metas funcionales pero adolece de problemas en su diseo, lo cual provoca que la extensin del mismo se vuelva laboriosa e incluso inviable. Entre sus funcionalidades estn la de aplicar distintos filtros a las imgenes, generar una malla inicial, aplicar un algoritmo de mejora en conjunto con los criterios de refinamiento y seleccin de un punto, y seleccionar puntos y segmentos que pueden formar parte de los anillos de los rboles.
El objetivo de esta memoria es realizar un rediseo y posterior re implementacin de este software de reconocimiento de anillos de rboles, para lograr una extensin de sus funcionalidades actuales en lo que respecta al uso de polgonos como geometra inicial, la posibilidad de incorporar nuevos criterios para la mejora y seleccin del punto, la posibilidad de incorporar nuevos algoritmos de mejoramiento como tambin para la creacin de la malla inicial o para la malla final. Para lo anterior se propone un proceso de desarrollo soportado en anlisis y diseo por contrato.
El resultado ms relevante del presente trabajo es la obtencin de un producto que permite la generacin automtica de mallas geomtricas tanto para imgenes como para geometras poligonales convexas, que adems es fcilmente extensible en los aspectos mencionados.
3
Dedicatoria y Agradecimientos
Esta memoria est dedicada a mi madre, su luz sigue entre nosotros.
Quisiera agradecer aquellos docentes y maestros que han guiado mis pasos para finalizar este ciclo, muy en especial a la Sra. Nancy Hitschfeld-Kahler por su orientacin, apoyo y comprensin durante la elaboracin de este trabajo.
Tambin resulta imposible dejar de mencionar a Anglica y Magali por toda la paciencia y ayuda prestada durante todo el proceso de especialidad.
Finalmente agradecer a mi seora, Rayen Keln, por su enorme soporte durante esta jornada, adems de su apoyo y amor incondicional.
4
ndice General
1 Introduccin __________________________________________________ 9 1.1 Motivacin _______________________________________________ 11 1.1.1 Familia de Software ___________________________________________________ 11 1.1.2 Software Actual ______________________________________________________ 14 1.1.3 Rediseo y Extensin __________________________________________________ 18 1.2 Objetivos ________________________________________________ 20 1.2.1 Objetivo General ______________________________________________________ 20 1.2.2 Objetivos Especficos __________________________________________________ 20 1.3 Metodologa ______________________________________________ 21 1.4 Plan de Trabajo ___________________________________________ 22 1.4.1 Revisin del Diseo Inicial ______________________________________________ 22 1.4.2 Revisin Implementacin Existente _______________________________________ 23 1.4.3 Extensin de Funcionalidades ___________________________________________ 23 1.4.4 Rediseo de Software _________________________________________________ 23 1.4.5 Implementacin ______________________________________________________ 23 1.4.6 Pruebas ____________________________________________________________ 23 2 Trabajo Relacionado __________________________________________ 25 2.1 Componentes ____________________________________________ 25 2.1.1 Representacin de la Malla _____________________________________________ 25 2.1.2 Algoritmos, Criterios y Regin ___________________________________________ 27 2.2 Patrones de Diseo ________________________________________ 30 2.2.1 Strategy ____________________________________________________________ 30 2.2.2 Iterator _____________________________________________________________ 30 3 Trabajo Realizado ____________________________________________ 31 5
3.1 Anlisis Preliminar ________________________________________ 31 3.2 Revisin del diseo inicial __________________________________ 32 3.2.1 Obtencin de geometra inicial ___________________________________________ 32 3.2.2 Obtencin de malla inicial_______________________________________________ 32 3.2.3 Refinar una malla geomtrica____________________________________________ 33 3.2.4 Obtencin de una Malla Final ____________________________________________ 33 3.3 Estudio de la implementacin existente _______________________ 33 3.3.1 Revisin de Componentes ______________________________________________ 33 3.3.2 Revisin de los Patrones de Diseo ______________________________________ 37 3.4 Rediseo de software ______________________________________ 37 3.4.1 Extensin del diseo __________________________________________________ 38 3.4.2 Principales componentes _______________________________________________ 38 3.4.3 Diseo por contrato ___________________________________________________ 43 3.5 Implementacin ___________________________________________ 46 3.5.1 Extensin de Funcionalidades ___________________________________________ 46 3.6 Pruebas _________________________________________________ 48 3.6.1 Pruebas Funcionales __________________________________________________ 48 3.6.2 Pruebas no Funcionales ________________________________________________ 59 4 Conclusiones ________________________________________________ 64 4.1 Trabajo Futuro ____________________________________________ 65 5 Bibliografa __________________________________________________ 66
6
Lista de Figuras
Figura 1 : Generacin de Malla ______________________________________ 12 Figura 2 : Componentes del Software inicial ____________________________ 15 Figura 3 : Plan de Trabajo __________________________________________ 22 Figura 4 : Componentes asocaidas a Malla _____________________________ 26 Figura 5 : Componentes asociadas a Regin ____________________________ 27 Figura 6 : Componentes para la generacin de malla _____________________ 28 Figura 7 : Componentes Principales __________________________________ 39 Figura 8 : Paquete Malla ___________________________________________ 40 Figura 9 : Paquete Geometra _______________________________________ 41 Figura 10 : Paquete Regin _________________________________________ 42 Figura 11 : Paquete Proceso ________________________________________ 43 Figura 12 : Patrn Bridge ___________________________________________ 47 Figura 13 : Geometra del Icosgono __________________________________ 49 Figura 14 : Geometra de la Coma ____________________________________ 49 Figura 15 : Malla Inicial del Icosgono _________________________________ 50 Figura 16 : Malla Inicial de la Coma ___________________________________ 50 Figura 17 : Primera Iteracin ________________________________________ 52 Figura 18 : Segunda Iteracin _______________________________________ 52 Figura 19 : Malla Generada _________________________________________ 53 Figura 20 : Imgen C _____________________________________________ 55 Figura 21 : Imgen C con su malla __________________________________ 55 Figura 22 : Imagn D _____________________________________________ 57 7
Figura 23 : Imgen "D" despues de los filtros ____________________________ 57 Figura 24 : Imgen "D" con su malla __________________________________ 58
8
Lista de Tablas
Tabla 1 : Paquetes de software ______________________________________ 16 Tabla 2 : Mtodos principales de la familia de software ____________________ 29 Tabla 3 : Componentes v/s clases java ________________________________ 34 Tabla 4 : Invariantes _______________________________________________ 44 Tabla 5 : Contratos principales _______________________________________ 45 Tabla 6 : Resultados prueba A _______________________________________ 51 Tabla 7 : Resultados prueba B _______________________________________ 53 Tabla 8 : Resultados prueba C _______________________________________ 54 Tabla 9 : Resultados prueba D _______________________________________ 56
9
1 INTRODUCCIN
Disear software orientado al objeto es difcil, y disear software reusable orientado al objeto es ms difcil [1]
La ingeniera de software es una disciplina reciente, si la comparamos con ingenieras tales como la de construccin de caminos o edificaciones, u otras ciencias como la medicina. De hecho, la primera computadora completamente programable es la Z3 [2] y fue terminada en mayo de 1942, previo a esta, la computacin era un rea meramente terica. En estos casi setenta aos se han realizado grandes progresos, particularmente en el anlisis, diseo y construccin de sistemas.
En la implementacin de productos informticos es vital comprender y documentar los requisitos que el sistema debe cumplir. Para un correcto entendimiento de las diferentes problemticas que plantea la construccin de una solucin en particular se hace necesario realizar un anlisis de los requisitos o solicitudes que definen el producto.
En el caso de tecnologas orientadas al objeto, es donde se introduce el Object Oriented Anlisis o sus siglas OOA. El OOA busca establecer el modelo del problema y las responsabilidades del sistema [3]. Entre ambos establecen las caractersticas que el software debe cumplir. Si bien, en el OOA se debe establecer un nivel detallado de compresin de los requisitos, no es su responsabilidad la definicin completa del producto a construir. A este proceso se le denomina diseo [4].
En el diseo de software se modela el sistema y se encuentra su forma, entre otras cosas su arquitectura [4]. Esta forma depender de cuales han sido las decisiones tomadas durante el proceso y qu polticas de construccin se han seguido. Si bien el anlisis nos entrega un modelo conceptual, la implementacin detallada de ste puede variar mucho por diferentes factores. Entre dichos factores encontramos la arquitectura tecnolgica de un proyecto, necesidades de 10
rendimiento de la aplicacin o la misma experiencia de los participantes involucrados.
Una herramienta para la elaboracin de un buen diseo son los Patrones de Diseo. Una definicin es: En el mundo del software, un patrn de diseo es una manifestacin tangible de una organizacin de la memoria tribal [5]. Finalmente los patrones de diseo actan como recetas, las cuales contienen soluciones generales para problemas conocidos. Son estos patrones los que son utilizados por los arquitectos de software, tal cual lo hace un chef al modi ficar y mezclar sus recetas de cocina para cambiar detalles en el sabor o presentacin de un plato, para elaborar diseos de software de mayor calidad.
Precisamente es este punto sobre lo que trat esta memoria, aplicar buenas prcticas de diseo de software para mejorar y depurar un producto ya existente.
El producto modificado fue un software que permite la generacin y refinacin de mallas geomtricas. Para ello toma como punto de partida un archivo de imagen sobre la cual elabora una primera malla y luego esta es refinada segn las instrucciones del usuario.
En su concepcin original el producto estaba pensado para refinar cualquier malla vinculada a una geometra. Dicha geometra pudiera tener cualquier origen; ya sea desde una imagen, una polilnea u otra representacin. Adems se pens que los procesos asociados a la depuracin o refinamiento fueran independientes de la representacin de origen.
Era parte vital de este trabajo lograr un nuevo diseo. Este debe ser extensible y robusto, logrando obtener un software que permita cumplir con los conceptos originales.
11
Adicionalmente se logra realizar la extensin de la implementacin de forma tal de incluir no solo imgenes sino tambin geometras poligonales como fuente de informacin para las mallas geomtricas.
Finalmente, el nuevo diseo presenta un nivel de documentacin el cual permita tomar y extender el producto en trabajos futuros.
1.1 MOTIVACIN
1.1.1 FAMILIA DE SOFTWARE
En el paper [6] se describe una familia de software para mallas geomtricas. La finalidad de dicha familia es proveer de una herramienta que permita la generacin de mallas. Estas ltimas son elaboradas en un proceso de refinamiento el cual involucra el uso de una serie de componentes y la interaccin entre estas.
El diseo propuesto en [6] contempla el uso de las siguientes clases para la representacin de las mallas geomtricas y sus propiedades:
Mesh: Malla compuesta por un conjunto de tringulos. Vertex: Vrtice de un tringulo. Edge: Lado de un tringulo. Triangle: Tringulo, representado por tres vrtices o tres lados. Geometry: Geometra que describe el dominio sobre el que se genera una malla. Por ejemplo puede ser un polgono simple. Region: Regin, representa una parte de una geometra.
Para la manipulacin de las mallas se usan las siguientes componentes:
InitialMeshAlgorithm: Algoritmo para la generacin de malla inicial. 12
LeppBasedAlgorithm: Algoritmo para refinar o mejorar una malla. FinalMeshAlgorithm: Algoritmo para generar malla final. Criterion: Criterio para controlar el refinamiento o mejoramiento
El proceso normal de ejecucin de un generador de mallas se puede representar por el diagrama de Secuencia de la Figura 1.En l se muestra el circuito completo partiendo de la representacin de una geometra hasta la generacin de una malla final, incluyendo la aplicacin de los diversos algoritmos.
FIGURA 1 : GENERACIN DE MALLA
El proceso consiste en la aplicacin de los siguientes pasos:
1. Obtencin de una Geometra, esto puede ser realizado desde una imagen cuya geometra es el rectngulo mnimo que la rodea o ser leda desde un archivo. ProcesoDeReconoci mi entoDeBorde 9: appl y 8: Sel ecci onar Al gorti mo Fi nal 7: appl y 6: Sel ecci onar Al gori tmo de Refi nami ento 5: Sel ecci onar Cri teri o de Refi nami ento 2: Crear el obj eto mal l a (vaci o) 4: appl y 3: Sel ecci onar Al gori tmo Ini ci al 1: Leer Geometri a amp:Mai nProgram aGeo:Geometry ai m:Ini ti al MeshAl ori thm aMesh:Mesh aCri teri on:Cri teri on :LeepBasedAl gori thm :Fi nal MeshAl gori thm 9: appl y 8: Sel ecci onar Al gorti mo Fi nal 7: appl y 6: Sel ecci onar Al gori tmo de Refi nami ento 5: Sel ecci onar Cri teri o de Refi nami ento 2: Crear el obj eto mal l a (vaci o) 4: appl y 3: Sel ecci onar Al gori tmo Ini ci al 1: Leer Geometri a 13
2. Instanciar un objeto malla, el cual se encuentra vaco 1 . 3. Seleccionar el algoritmo de malla inicial. 4. Aplicar el algoritmo de 3 sobre la geometra de 1 para generar una malla inicial. Dicha malla ser almacenada en 2 para su posterior proceso de refinado. 5. Refinar a. Seleccionar un Criterio de refinamiento b. Seleccionar un algoritmo de Refinamiento. c. Aplicar el algoritmo de (b) usando el criterio (a). De esta forma los tringulos de la malla se dividen en tringulos ms pequeos, hasta que el criterio es cumplido para todos los tringulos de la malla. d. As se obtiene una malla refinada o mejorada. e. De existir algn criterio y/o algoritmo pendiente de aplicar se vuelve a Refinar. 6. Seleccionar algoritmo de Malla Final. 7. Aplicar el algoritmo 6 a la malla refinada.
1 En trminos de programacin es reservar memoria para el objeto. 14
1.1.2 SOFTWARE ACTUAL
Durante el ao 2008 Pablo Aguilar realiz su memoria [7] y tesis [8] implementando un software para el reconocimiento de anillos de rboles. En este software se usan algoritmos de generacin de mallas 2 para ayudar en el proceso de reconocimiento de anillos. El trabajo realizado estuvo fuertemente basado en la familia de software [6].
El producto obtenido permite aplicar el algoritmo de refinamiento de la malla pero posee ciertas limitantes. Una de ellas es la imposibilidad de generar mallas desde de una geometra poligonal; por lo tanto siempre se debe generar a partir de una imagen.
La forma de operar del producto es la que se indica: Solicita al usuario que seleccione una imagen y carga su informacin en la componente treeangles.visibleMesh.PictureVisibleMesh la cual representa la malla, pero al mismo tiempo almacena informacin de la geometra. Permite al usuario seleccionar filtros para la imagen, de forma de alterar la geometra de la misma. Permite generar una malla desde la geometra existente seleccionado alguna de las formas de criterio y seleccin de punto. Desde un punto de vista general las componentes principales del sistema se vinculan como se muestra en la Figura 2, en donde GUI es la interfaz grfica que permite manipular las imgenes para obtener las mallas geomtricas.
2 Discretizaciones espaciales. 15
FIGURA 2 : COMPONENTES DEL SOFTWARE INICIAL
En la Tabla 1 se presenta las principales agrupaciones o paquetes y sus respectivas responsabilidades dentro del software. Paquete Responsabilidad treeangles.borderSelectionCriterion Responsable de implementar los algoritmos para la seleccin de los bordes de una polilnea. treeangles.centerSelectionCriterion Responsable de la seleccin del punto centro de un anillo en el reconocimiento de los mismos. treeangles.fileFilter Contiene las componentes grficas responsables de filtrar el tipo de archivo que se desea cargar para iniciar el proceso de refinamiento. treeangles.generatePolylines Conjunto de componentes utilizadas para la generacin de polilneas en anillos de rboles.
treeangles.geometry Paquete responsable de definir la componente Geometra de la familia de software. treeangles.geometryFilter Conjunto de filtros que permiten modificar los tonos de una imagen. Son utilizados para aplicar cierta norma a i mage pl ugi nManager geometryFi l ter i ni ti al Mesh refi nement refi nementCri teri on poi ntSel ecti onCri teri on generatePol yl i nes centerSel ecti onCri teri on borderSel ecti onCri teri on ri ngInformati on GUI + <<Constructor>> GUI () Pi ctureVi si bl eMesh (vi si bl eMesh) Pi cturePl ugi nManager (pl ugi nManager) GeometryFi l ter (geometryFi l ter) Ini ti al Mesh (i ni ti al Mesh) Refi nement (refi nement) Refi nementCri teri on (refi nementCri teri on) Poi ntSel ecti onCri teri on (poi ntSel ecti onCri teri on) GeneratePol yl i nes (generatePol yl i nes) CenterSel ecti onCri teri on (centerSel ecti onCri teri on) BorderSel ecti onCri teri on (borderSel ecti onCri teri on) Ri ngInformati on (ri ngInformati on) 16
los valores del tono para trabajar con escalas que resalten las propiedades ms importantes y minimicen el ruido de la imagen. treeangles.initialMesh Paquete responsable de generar mallas a partir de una geometra.
treeangles.mesh Paquete responsable de definir la componente Malla de la familia de software.
treeangles.pluginManager Componente responsable del manejo de los posibles algoritmos y filtros a ser utilizados por la interfaz grfica.
treeangles.pointSelectionCriterion Paquete responsable de la seleccin del punto por el cual se dividir un tringulo que no cumpla con el criterio de refinamiento.
treeangles.polyline Contiene las componentes responsables de la representacin de las polilneas.
treeangles.refinement Paquete responsable de implementar los algoritmos de refinamiento o mejora de la familia de software.
treeangles.refinementCriterion Paquete responsable de implementar los criterios de refinamiento de la familia de software.
treeangles.region Contiene las componentes representacin de los diferentes tipos de Regin asociados a la familia de software. treeangles.ringInformation Conjunto de componentes que elaboran la representacin de anillos de rboles. treeangles.visibleMesh Paquete responsable de realizar el dibujo de la polilnea sobre la imagen a ser depurada. TABLA 1 : PAQUETES DE SOFTWARE
17
De los paquetes antes descritos se debe trabajar en la reingeniera de cinco de ellos, pues son los responsables de contener los algoritmos y criterios de refinamiento. Dichos paquetes son:
En la ejecucin del proceso para la obtencin y refinado de una malla se escogen diversos algoritmos y criterios. Dichas decisiones son tomadas por un usuario final, por lo tanto no son predecibles y las combinaciones dependen de los requerimientos de la aplicacin para la cual se est generando la malla. Esto indica que conservar una estructura de seleccin de criterios fija, no se condice con la extensibilidad del producto.
La necesidad central de la problemtica es tener un modelo extensible que permita intercambiar indistintamente los algoritmos y criterios para mallas aplicados al reconocimiento de bordes de una imagen o para simplemente generar una malla dada una geometra de un dominio cualquiera. Lo cual hace pensar bastante en la filosofa de implementacin de un framework [9].
Un framework es una herramienta que simplifica el proceso de construccin de software, entregando una serie de necesidades bsicas cubiertas y permitiendo extender funcionalidad para la implementacin de los requisitos del sistema.
Un framework est compuesto por Cold Spot y Hot Spot. Los primeros son aquellas zonas de cdigo las cuales no cambiarn y siempre sern parte de la instalacin del framework, en ellas se tienen condensado el funcionamiento inalterable y que rara vez tiene que ver con las necesidades del producto a construir. Por otro lado, los Hot Spot son aquellas piezas intercambiables y que sern construidas o configuradas dependiendo de las necesidades propias del producto, normalmente stas son las piezas a ser desarrolladas por quienes implementan el producto framework.
La filosofa de los Cold/Hot Spot permite enchufar y desenchufar distintas componentes de software, inclusive en tiempo de ejecucin, sin que esto afecte la configuracin del programa. De esta manera, es posible incluir nuevas componentes sin afectar las existentes. El cmo se implementa dicha 19
potencialidad es responsabilidad de la configuracin del framework y de sus Cold Spot.
Si bien, en el mbito de la presente memoria no se desea construir un framework para el reconocimiento de bordes en imgenes, s se desea poder generar un mecanismo de extensibilidad del producto existente. Es por ello que se plantea el uso del mecanismo de Cold/Hot Spot para la representacin de algoritmos y criterios, de manera que desarrollos actuales y futuros puedan incluir nuevas implementaciones sin variar mayormente el producto final de este trabajo.
20
1.2 OBJETIVOS 1.2.1 OBJETIVO GENERAL
Realizar una reingeniera del software para reconocimiento de anillo de rboles en imgenes, el cual fue obtenido como resultado de [8], con el fin de mejorar su extensibilidad y reusabilidad.
1.2.2 OBJETIVOS ESPECFICOS
Redisear la actual herramienta de software para lograr los siguientes objetivos:
Encontrar los patrones de diseo que permitan darle mayor flexibilidad a la implementacin la familia propuesta en [6] Aplicar los patrones de diseo encontrados en el punto anterior en el rediseo de la herramienta construida en [8]. Modificar las estructuras de datos para permitir trabajar directo con geometras y/o mallas geomtricas sin necesidad de leer una imagen. Disear e implementar los Hot Spot que permitan utilizar diferentes algoritmos en las distintas etapas del proceso de generacin de una malla: o Generacin de una malla inicial. o Generacin de una malla refinada / mejorada. o Generacin de una malla final. Disear e implementar los Hot Spot para los criterios y regiones ya existentes. Bsqueda de algoritmos de cdigo abierto que se puedan incorporar y adaptar a las distintas etapas del proceso de generacin de mallas, construyendo sus respectivos Hot Spot.
21
1.3 METODOLOGA
El software original construido en [8] utilizaba Java para su construccin y como ambiente de trabajo NetBeans. Se desea mantener el lenguaje de programacin pero migrar el proyecto al entorno de desarrollo a Eclipse.
Como herramientas fundamentales para el soporte del rediseo se han utilizado los patrones de diseo y diseo por contrato [10], con el soporte de ambas se logr dar una mejor visibilidad y consistencia de las componentes principales.
En el proceso de desarrollo se abord un mecanismo incremental, en el cual el primer ciclo se logr tener todas las componentes definidas pero sin operacin, en los ciclos dos y tres se incorpor y depuro la funcionalidad de las diversas piezas de software.
22
1.4 PLAN DE TRABAJO
El plan de trabajo para la completa ejecucin de la memoria queda resumido por el cronograma presentado en la Figura 3. Para una mejor comprensin se han incorporado los objetivos de cada una de las grandes tareas y una breve descripcin de lo que se realiz en ellas.
FIGURA 3 : PLAN DE TRABAJO
1.4.1 REVISIN DEL DISEO INICIAL
En este punto se realiz un estudio ntegro de la familia de software [6]. El resultado de este trabajo permitir identificar los Cold Spot, Hot Spot y patrones de diseo que usa y que complementen a la familia.
Cmo metodologa de trabajo se utiliz diseo por contrato [10] con el cual se expresar el comportamiento que se desea obtener. Estos contratos sern los que guiarn los procesos de revisin de todo el trabajo. 23
1.4.2 REVISIN IMPLEMENTACIN EXISTENTE
Se elabor un completo anlisis al diseo e implementacin de [8] aplicando los conceptos de la tarea anterior. Esto permiti identificar las zonas de la aplicacin a mejorar.
1.4.3 EXTENSIN DE FUNCIONALIDADES
Se realiz una bsqueda de algoritmos de libre disposicin para la generacin de mallas iniciales, el proceso de refinamiento y la lectura de formatos de geometras poligonales.
1.4.4 REDISEO DE SOFTWARE
En este punto se, ejecut el destilado de las tres tareas anteriores y se consolidaron en un nuevo diseo. El cual incluy las caractersticas antes abordadas y tambin las nuevas cualidades buscadas, como lo son obtener la inclusin de los Hot Spot.
1.4.5 IMPLEMENTACIN
Esta actividad consiste en la construccin y verificacin de las piezas de software destinadas a plasmar el diseo final. La tarea de implementacin cont con dos ciclos de construccin y prueba.
1.4.6 PRUEBAS
24
En esta ltima actividad se evalu el nuevo diseo y su implementacin usando las mtricas estndares definidas durante el anlisis y diseo. Adicionalmente se compararon los resultados con los contratos obtenidos en el inicio.
25
2 TRABAJO RELACIONADO
A continuacin se entrega una descripcin de la familia de software [6] que inspira el producto a redisear. Ella permiti establecer el marco de referencia de los objetivos y mejoras a implementar.
El estudio de la familia de software descrita en [6], se realiz con un doble enfoque. Primero se efectu un anlisis orientado a detectar el listado de las componentes ms relevante, el cual incluyo una descripcin de sus respectivos comportamientos y estados. Posteriormente se buscaron los patrones de diseo utilizados en la familia. Como resultado se logr una revisin completa de la estructura esttica y el comportamiento dinmico de las principales componentes de la familia.
2.1 COMPONENTES
A continuacin se presenta una descripcin de las componentes que integran la familia de software, esta ha sido descompuesta en las piezas de software responsables de la representacin de la malla geomtrica y de aquellas orientadas a la generacin de la misma.
2.1.1 REPRESENTACIN DE LA MALLA
La malla geomtrica es el centro del estudio, pues es ella la que se desea generar y/o depurar. La malla se encuentra representada por conjunto de tringulos en un espacio de dos dimensiones. Asimismo los tringulos estn representados por sus vrtices y lados. En la Figura 4 se puede apreciar la relacin entre las componentes principales que permiten representar la malla.
26
FIGURA 4 : COMPONENTES ASOCAIDAS A MALLA
La componente Malla representa a las mallas geomtricas, ella se encuentra definida por tres conjuntos, uno de tringulos, otro de arcos y finalmente uno de vrtices. Es sobre esta componente donde se realizaran los procesos.
La representacin de un los tringulos est dado por la componente homnima. Una forma de definir un tringulo es por sus tres vrtices (A, B, C); de ellos se deducen los tres segmentos y ngulos. En este caso los segmentos se definen, no se deducen, para mejor soporte del procesamiento de la mallas.
Los arcos quedan definidos por dos puntos en el espacio. Para dichos puntos se ocupa la componente Vrtice, la cual almacena las coordenadas x e y del plano.
Las componentes antes descritas no poseen comportamiento relevante para la familia de software.
0..1 * 0..1 * 0..1 * Mal l a - - - verti ces arcos tri angul os : Verti ce[] : Arco[] : Tri angul o[] Tri angul o - - - - - - verti ceA verti ceB verti ceC arcoAB arcoBC arcoCA : Verti ce : Verti ce : Verti ce : Arco : Arco : Arco Arco - - verti ceA verti ceB : Verti ce : Verti ce Verti ce - - x y : Doubl e : Doubl e 27
2.1.2 ALGORITMOS, CRITERIOS Y REGIN
Los algoritmos representan los procesos utilizados durante la generacin de la malla. En cambio los criterios son las componentes que permiten decidir si se contina o no con la operacin de refinamiento. Finalmente la regin representa el lugar geomtrico donde se refinar.
Es en esta parte de la familia donde se pueden realizar las extensiones para agregar nuevos comportamientos. Esto se logra por la implementacin de nuevos algoritmos, criterios y regiones. Por lo tanto se convierte en un candidato a Hot Spot.
Si bien, el nmero de componentes totales es mayor al aqu expuesto, es posible entender la funcionalidad completa nicamente describiendo las clases abstractas de la familia. No obstante lo anterior en el diagrama de la Figura 6 se incluye todas las componentes asociadas a algoritmos y criterios, por otro lado la Figura 5 muestra el diagrama de las clases que representan regiones.
FIGURA 5 : COMPONENTES ASOCIADAS A REGIN Regi on {abstract} + esIntersectada (Mal l a aMal l a, Tri angul o aTri angul o) : bool ean GeometraCompl eta Pol gono Punto - - x y : Doubl e : Doubl e Segmento - - puntoA puntoB : Punto : Punto 28
FIGURA 6 : COMPONENTES PARA LA GENERACIN DE MALLA
Por un lado se tiene la componente abstracta Regin, la cual es responsable de representar cualquier forma o geometra bidimensional. Las componentes Segmento, Punto, Polgono y Geometra Completa son especializaciones de Geometra y permiten definir geometras ms especficas.
La componente Algoritmo De Malla Inicial permite generar una malla inicial. Es el primer paso en el proceso de generacin de la malla geomtrica. A diferencia de Algoritmo De Malla Final, la cual es el ltimo paso.
El Algoritmo De Refinamiento o Mejora asume el proceso de la depuracin de la malla que se est procesando, para ello se apoya en la componente Criterio y su capacidad de decidir si un tringulo en particular cumple con ciertas condiciones con respecto a la malla.
Al gori tmoDeMal l aIni ci al {abstract} + apl i car (Mal l a aMal l a, Geometri a aGeometri a) : voi d Cri teri o {abstract} + esCumpl i do (Mal l a aMal l a, Tri angul o aTri angul o) : bool ean Al gori tmoDeRefi nami entoOMej ora {abstract} + apl i car (Mal l a aMal l a, Cri teri o aCri teri o, Regi on aRegi on) : voi d Al gori tmoDeMal l aFi nal {abstract} + apl i car (Mal l a aMal l a, Geometri a aGeometri a) : voi d Al gori tmoDeMal l aDel aunay Al gori tmoDeMal l aDummy Al gori tmoDeMal l a Angul oMi ni mo Cri teri oDummy Angul oMaxi mo Maxi moLargoDel Lado Al gori tmoDeRefi nami ento Al gori tmoDeMej oraDel aunay Al gori tmoDeMej oraPorAproxi maci on Al gori tmoDummy Al gori tmoDeBordesNoObtusos 29
En la Tabla 2 se expresan los mtodos principales de las componentes antes descritas
Componente Mtodo Descripcin Regin boolean esIntersectada(Malla, Tringulo): Revisa si la Regin es intersecada por el Tringulo, de ser as devuelve el valor booleano verdadero en caso contrario falso Algoritmo de Malla Inicial void aplicar(Malla, Geometra) Genera una malla inicial Algoritmo de Malla Final void aplicar(Malla, Geometra)
Genera una malla final. Algoritmo De Refinamiento o Mejora void aplicar(Malla, Geometra, Criterio)
Depura la malla revisando la geometra. Criterio boolean esCumplido(Malla, Tringulo) Revisa si el Tringulo cumple el criterio para la Malla solicitada.
TABLA 2 : MTODOS PRINCIPALES DE LA FAMILIA DE SOFTWARE
30
2.2 PATRONES DE DISEO
En la familia de software se plantea el uso de varios patrones de diseo de manera explcita. Aqu se encuentra una descripcin de los patrones y su aplicacin.
2.2.1 STRATEGY
El patrn Strategy permite definir una familia de algoritmos, encapsulado cada uno, y hacindolos intercambiables.
Los criterios y algoritmos son encapsulados bajo el patrn Strategy, de esta forma se permite que cada uno de los algoritmos o del criterio posean implementaciones diferentes e intercambiables.
2.2.2 ITERATOR
El patrn Iterator permite acceso a los elementos de un objeto agregado de forma secuencial sin exponer su representacin subyacente.
Parte del proceso de depuracin consiste en verificar que cada tringulo de la malla actual que intersecta la regin especificada cumpla con el criterio que se est evaluando. En caso de no cumplirlo se le aplicara el Algoritmo de Depuracin o Refinamiento, para lo cual se necesita hacer un recorrido secuencial sobre la totalidad de Tringulos de la Malla.
31
3 TRABAJO REALIZADO
En este captulo se expone el trabajo que fue realizado en la presente memoria. Las tareas son descritas segn el orden en que fueron enfrentadas: anlisis preliminar, estudio de implementacin existente, rediseo, implementacin y pruebas.
3.1 ANLISIS PRELIMINAR
Antes de comenzar el trabajo de rediseo se realiz un anlisis inicial orientado a establecer mtricas de la calidad para la validacin del diseo. En dicha labor se consider que el presente trabajo es un producto intermedio, por lo cual debera apuntar a la extensibilidad. Adems se considera la depuracin del producto y los objetivos propios de la memoria. Con lo anterior se establecieron las siguientes mtricas para evaluar el resultado final del producto.
1. La geometra a ser utilizada en el proceso de refinamiento deben poder ser obtenidas desde un archivo especificado como una imagen o un archivo de texto que describe un dominio poligonal. 2. El proceso de refinamiento se debe entender como una secuencia de pasos independientes, los cuales son ejecutables por separado. De esta forma la malla geomtrica generada en un paso puede ser un resultado en s. 3. La incorporacin de nuevos criterios o algoritmos debe ser realizada con el mnimo esfuerzo. Esto debiera ser posible sin necesidad de alterar ninguna componente ya existente, ni tampoco conocer la implementacin de las dems piezas de software. 4. La implementacin actual no maneja regiones especficas, por tanto se pretende agregar al cdigo actual de la manera descrita en la familia.
Estos cuatro puntos son las metas tcnicas que el producto debe cumplir. En el proceso de pruebas se realizaron las revisiones de cada una de ellas permitiendo confirmar la completa cobertura de las mismas.
32
3.2 REVISIN DEL DISEO INICIAL
La familia de software presenta un diseo inicial el cual sirve como gua para el rediseo del producto. En esta parte del anlisis se estableci cules seran las principales funcionalidades a ser implementadas y qu se esperaba de cada una de ellas.
El resultado de esta revisin fue la descomposicin del proceso de generacin de una malla en cuatro sub procesos. A cada uno se le identific y se estableci una meta para ser cumplida dentro alcance de la presente memoria.
3.2.1 OBTENCIN DE GEOMETRA INICIAL
Al iniciar el proceso se debe contar con una geometra, la cual es obtenida desde un archivo.
Se establece como meta ser capaz de mantener la funcionalidad de leer archivos de imgenes y extender el proceso a archivos de texto que describen geometras poligonales.
3.2.2 OBTENCIN DE MALLA INICIAL
A partir de una geometra se debe poder generar automticamente una malla inicial.
Se establece como meta poder generar mallas para geometras provenientes de polgonos convexos e imgenes.
33
3.2.3 REFINAR UNA MALLA GEOMTRICA
Utilizando un algoritmo de refinamiento y un criterio se debe realizar un proceso de mejora. Este proceso alterar la malla inicial y provocar que todos los tringulos que pertenezcan a la malla cumplan con el criterio. Para ello el algoritmo necesita poder acceder a la malla, un criterio y una regin. Dependiendo del criterio usado, se usara la imagen de input o no.
Se establece como meta que todos los algoritmos y criterios sean aplicables a cualquier geometra, no importando su tipo.
3.2.4 OBTENCIN DE UNA MALLA FINAL
Como ltimo paso del proceso de generacin automtica de una malla se aplica un algoritmo para la obtencin de una malla final, ya sea aplicando un post proceso de mejoramiento o para generar informacin adicional.
Se establece como meta tener al menos un algoritmo de malla final.
3.3 ESTUDIO DE LA IMPLEMENTACIN EXISTENTE
Parte focal del desarrollo de la presente memoria consista en modificar el diseo de la implementacin efectuada en [8]. Como etapa central de dicho proceso se realiz una comparacin entre el software obtenido en [8] y el diseo planteado en la familia de software descrita en [6]. Dicha comparacin se divide en la revisin de la implementacin de las componentes bsicas de la familia y la utilizacin de los patrones de diseo respectivos.
3.3.1 REVISIN DE COMPONENTES 34
En el presente anlisis se evalu la similitud de la implementacin de las componentes bsicas de la familia. Para ello se verific que se encuentren presentes los mtodos mnimos requeridos y que las firmas coincidan.
3.3.1.1 COMPONENTES QUE SE ENCENTRAN PRESENTADAS EN LA IMPLEMENTACIN
En la Tabla 3 se indica cuales componentes de la familia inicial cumplen con el diseo original y que pieza de software la representa.
Componente Clase java que la representante Tringulo treeangles.mesh.Triangle Arco treeangles.mesh.Edge Vrtice treeangles.mesh. Point3D Malla treeangles.mesh.Mesh TABLA 3 : COMPONENTES V/S CLASES JAVA
3.3.1.2 COMPONENTES QUE NO SE ENCUENTRAN BIEN REPRESENTADAS
En el proceso de anlisis del producto se encontr una serie de componentes que no respetaban el espritu del diseo de la familia de software. En algunos casos se incluyeron mejoras al diseo, en otras ocasiones no se encontraban presentes como parte de la implementacin y como tercer escenario algunas de ellas adolecan de vicios de implementacin.
3.3.1.2.1 REGIN
Componente representada por la interfaz treeangles.region.Region.
35
El mtodo esIntersectada(Malla, Tringulo) se encuentra definido por intersects(Triangle t). Donde la firma ha sido cambiada y la Malla no es entregada como parmetro. Lo anterior implica que Regin conoce la Malla a la cual se est haciendo referencia, conllevando un vicio en el diseo.
3.3.1.2.2 SEGMENTO
Componente no implementada.
3.3.1.2.3 PUNTO
Componente no implementada.
3.3.1.2.4 GEOMETRA COMPLETA
Componente representada por medio de treeangles.region. Rectangle.
El mtodo esIntersectada(Malla, Tringulo) se encuentra definido por intersects(Triangle t). Incurre en el mismo vicio que Regin.
3.3.1.2.5 ALGORITMO DE MALLA INICIAL
Componente representada por la interfaz treeangles.initialMesh.InitialMesh.
Si bien el mtodo aplicar se encuentra presente, su firma ha sido cambiada. En vez de utilizar una Malla y una Geometra, solo tiene la primera. Para tener acceso a la Geometra esta se encuentra implementada como una variable de instancia. Este es un error en el diseo de la actual implementacin, pues Geometra no corresponde a una variable de estado del algoritmo. 36
3.3.1.2.6 ALGORITMO DE MALLA FINAL
Esta componente no se encuentra explicita en la implementacin.
3.3.1.2.7 ALGORITMO DE REFINAMIENTO O MEJORA
Componente representada por la interfaz treeangles.refinement. Refinement.
El refinamiento es efectuado utilizando una malla geomtrica, un criterio de refinamiento y un criterio de seccin de punto. Esta ltima componente incorpora una nueva dimensin a la solucin, la cual no est cubierta por la familia.
Adicionalmente el acceso a la geometra es por una variable de instancia. Lo cual es un error consistente con Algoritmo de Malla Inicial.
3.3.1.2.8 CRITERIO
Componente representada por la interfaz treeangles.refinementCriterion. RefinementCriterion.
El mtodo esCumplido esta implementado con exactitud por meetsCriterion.
Adicionalmente existe la interfaz treeangles.refinementCriterion.PictureRefinementCriterion la cual es una especializacin de treeangles.refinementCriterion. RefinementCriterion. Esta interfaz no significa ningn aporte o especializacin de Criterio. Su utilidad es la de de permitir discriminar algoritmos para tipos especficos de representacin de 37
malla. Esto no debe ser as, cualquier criterio debe ser aplicable no importando la implementacin particular de la malla a trabajar.
Es importante mencionar que existe la interfaz treeangles.pointSelectionCriterion. PointSelectionCriterion la cual representa otra forma de criterio, el de seleccin de punto. Dicho criterio no est incluido en la familia de software original. Su representacin sigue las mismas normas de la componente Criterio.
As como para el criterio de refinamiento existe un vicio de diseo en la especializacin, tambin se tiene el mismo vicio con la componente treeangles.pointSelectionCriterion.PicturePointSelectionCriterion. Esto debe ser independiente si lo aplicamos sobre geometras especficas como PSLG o como imgenes (Picture).
3.3.2 REVISIN DE LOS PATRONES DE DISEO
En el caso de Strategy es utilizado no slo para los algoritmos existentes, sino tambin para la representacin de los criterios de seleccin de punto. Con lo anterior se cumple a cabalidad el uso del patrn.
En el caso de Iterator esta aplicado al recorrido que realizan los diferentes algoritmos sobre la malla.
3.4 REDISEO DE SOFTWARE
Como estrategia de rediseo se opt por volver a implementar todas las componentes. Esta decisin fue tomada una vez que el diagnstico de la implementacin existente reportara los vicios expuestos en el punto anterior. Al volver a codificar las componentes desde cero se logr forzar el correcto uso de los patrones de diseo, liberando el producto de las limitantes y generando un software que cumple con las metas antes establecidas. 38
El rediseo fue trabajado en cuatro etapas; en la primera de ellas se extendi el diseo de la familia de software para incorporar aspectos detectados en la implementacin existente. Posteriormente se definieron las componentes principales y sus responsabilidades. Como tercera etapa se establecieron los contratos que guardaran el correcto cumplimiento del comportamiento esperado. Finalmente se incorpor el cdigo asociado a los criterios de seleccin de punto y de refinamiento, debiendo codificarse ntegramente las piezas asociadas al algoritmo de mejora de Delanuay, malla inicial y malla final; adems de crear las componentes asocias a las geometras PSLG.
3.4.1 EXTENSIN DEL DISEO
Un elemento no cubierto por la familia de software en el proceso de refinamiento es la seleccin del punto para la separacin de un tringulo en tres nuevos tringulos. En el producto realizado por Pablo Aguilar se identific esta necesidad, La cual fue plasmada en el uso de criterios tales como el ortocentro del tringulo y el punto que presentara la mayor diferencia respecto al tono promedio del tringulo en cuestin.
Para incluir dicha brecha se estableci una nueva componente en la familia de software. Esta pieza es un nuevo tipo de criterio responsable de seleccionar el punto en el proceso de refinamiento.
3.4.2 PRINCIPALES COMPONENTES
En el nuevo diseo se estableci una divisin orientada a separar los elementos segn su rol en el proceso de refinamiento. En un primer grupo se establecieron aquellos que son responsables de la representacin de la malla geomtrica. Como segundo grupo se tienen las componentes responsables de almacenar los datos de las geometras, incluyendo sus especializaciones. En una tercera agrupacin quedaron las clases responsables de la representacin de las regiones. Finalmente en un cuarto gran paquete quedaron las responsables del 39
comportamiento orientado al refinamiento, los cuales se pueden apreciar en Figura 7. Dicha distribucin se revisa con ms detalle a continuacin.
FIGURA 7 : COMPONENTES PRINCIPALES
3.4.2.1 MALLA
Las componentes de este grupo estn orientadas a representar la malla geomtrica que se va a estudiar.
Una malla geomtrica est definida por un conjunto de tringulos. Un tringulo se puede representar por sus tres vrtices, as como tambin por los tres arcos que lo componen. En el caso de este anlisis ambas representaciones resultan tiles por lo cual se utilizan de manera sincronizada. Mal l a (mal l a) ... ... GeneradorDeMal l a (fabri ca) ... cri teri os (proceso) mal l aFi nal (proceso) mal l aIni ci al (proceso) refi nami entoMej ora (proceso) sel ecci onPunto (proceso) Geometri a (geometri a) {abstract} ... ... 40
Por lo tanto, podemos ver una malla como el conjunto de sus tringulos, arcos y vrtices. Los ltimos dos conjuntos son siempre deducibles del primero Tal cual como se aprecia en la Figura 8.
FIGURA 8 : PAQUETE MALLA
3.4.2.2 GEOMETRA
La geometra es el punto de partida del proceso de trabajo, dado que desde ella se genera una Malla inicial. La obtencin de una geometra depender de qu tipo de origen se est utilizando, por lo tanto resulta natural encapsular el instanciado del estado del objeto en su constructor.
Para lograr obtener geometras de diversas fuentes se realizarn especializaciones de la clase Geometra, dejando as la libertad de incorporar nuevas fuentes de informacin sin alterar el proceso de generacin de una malla. verti ceA verti ceB verti ceA verti ceB verti ceC arcoAB arcoBC arcoCA Arco - - verti ceA verti ceB : Verti ce : Verti ce Mal l a - - - verti ces arcos tri angul os : Vector<Verti ce> : Vector<Arco> : Vector<Tri angul o> Tri angul o - - - - - - verti ceA verti ceB verti ceC arcoAB arcoBC arcoCA : Verti ce : Verti ce : Verti ce : Arco : Arco : Arco Verti ce - - coordenadaX coordenadaY : Doubl e : Doubl e 41
FIGURA 9 : PAQUETE GEOMETRA
3.4.2.3 REGIN
La regin es el lugar geomtrico sobre el cual se realiza el proceso de refinamiento. Si bien fueron definidas las regiones Polgono y Punto, no fueron parte del alcance del presente trabajo y todos los procesos se han realizado sobre la Geometra Completa.
Lo anterior significa que al aplicar un algoritmo de mejora en el proceso siempre se realizar sobre toda la geometra que origin la malla inicial, dejando la posibilidad que trabajos futuros puedan extender el software para realizar procesos reducidos a una regin particular, como lo es un cuadrado o un circulo.
Geometri a {abstract} Geometri aImagen Geometri aPSLG Geometri aPSLGConvex 42
FIGURA 10 : PAQUETE REGIN
3.4.2.4 PROCESO
Las componentes definidas en proceso representan las principales interfaces a ser implementadas para el refinamiento de mallas geomtricas.
La componente Generador de Malla encapsula los procesos asociados a cada paso del algoritmo de refinamiento.
Malla Inicial representa a todos los algoritmos que permiten generar una nueva malla geomtrica desde una geometra particular. Por su parte Malla Final encapsula los algoritmos que permitan realizar un proceso de generacin de informacin final, estadsticas o mejoras especficas de una malla
Refinamiento Mejora encapsula algoritmos que permiten realizar un paso de refinamiento de una malla. Para lo cual revisa todos los tringulos de malla en cuestin y revisa que se encuentren dentro de la regin a mejorar. De ser as prueba que el tringulo cumpla con las condiciones de Criterio. Para todos los tringulos que no cumplan se selecciona un punto de su interior utilizando Geometri aCompl eta + <<Impl ement>> esIntersectada (Mal l a aMal l a, Tri angul o aTri angul o) : bool ean Regi on + esIntersectada (Mal l a aMal l a, Tri angul o aTri angul o) : bool ean Pol i gono + + <<Constructor>> <<Impl ement>> Pol i gono () esIntersectada (Mal l a aMal l a, Tri angul o aTri nagul o) : bool ean Punto + + + ... <<Constructor>> ... Punto (doubl e x, doubl e y) getX () setX (doubl e x) ... : doubl e : voi d ... 43
Seleccin Punto y se divide el tringulo. Esto es revisado por las reglas propias de cada refinamiento.
FIGURA 11 : PAQUETE PROCESO
3.4.3 DISEO POR CONTRATO
Como parte de las buenas prcticas de diseo se ha establecido el uso de la metodologa de diseo por contrato [10]. Dicha herramienta permiti verificar el correcto funcionamiento de las componentes claves del nuevo diseo.
Para lograr lo anterior se identific una serie de invariantes los cuales fueron implementados durante la etapa de construccin. Adicionalmente se procedi a identificar los contratos destinados a resguardar el comportamiento de los mtodos principales del proceso de generacin de las mallas geomtricas.
3.4.3.1 INVARIANTES
En Tabla 4 se expresa el listado de los invariantes de las componentes principales. GeneradorDeMal l a Cri teri o (cri teri os) + esCumpl i do (Mal l a aMal l a, Tri angul o aTri angul o) : bool ean Refi nami entoMej ora (refi nami entoMej ora) + apl i car (Mal l a aMal l a, Cri teri o aCri teri o, Sel ecci onPunto aSel ecci onPunto, Regi on aRegi on) : voi d Sel ecci onPunto (sel ecci onPunto) + getVerti ce (Tri angul o aTri angul o) : Verti ce Mal l aIni ci al (mal l aIni ci al ) + apl i car (Mal l a aMal l a, Geometri a aGeometri aCompl eta) : voi d Mal l aFi nal (mal l aFi nal ) + apl i car (Mal l a aMal l a, Geometri a aGeometri aCompl eta) : voi d 44
Componente Mtodo Pre Condiciones Post Condiciones AlgoritmoDeMallaIn icial aplicar aMalla <> nulo aGemoetria <> nulo aMalla <> nulo aMalla contiene toda aGeometria AlgoritmoDeMallaFi nal aplicar aMalla <> nulo aGemetria <> nulo aMalla <> nulo aMalla contiene toda aGeometria AlgoritmoDeRefina mientoOMejora aplicar aMalla <> nulo aCriterio <> nulo aSeleccionPu Para todo Triangulo en la aMalla haber verificado aCriterio.esCumplido(aMall a,Triangulo) 45
nto<> null aRegion <> nulo Criterio esCumplido aMalla <> nulo aTriangulo <> nulo aTriangulo revisado dentro de aMalla TABLA 5 : CONTRATOS PRINCIPALES
46
3.5 IMPLEMENTACIN
Una vez establecido el diseo a ser implementado se crearon todas las componentes y se efectu el proceso de adaptar los algoritmos embebidos en el cdigo existente a las nuevas estructuras. Durante este proceso se aprovech de implementar documentacin del cdigo fuente bajo estndar javadoc a todas las componentes del software.
Posteriormente se procedi a buscar bibliotecas para la construccin de los contratos. Despus de un proceso de revisin de varias alternativas se acotaron las opciones a dos posibilidades: JContrator 3 y C4J 4 , ambas soluciones de cdigo abierto y hospedadas en Sourceforge. JContrator posee una comunidad activa la cual la est soportando a diferencia de C4J que se encuentra al final de su ciclo de vida. Como ventajas C4J permite establecer los contratos por medio de clases externas a las componentes, independizando el contrato de quien es vigilado. Otro punto que hizo pesar la balanza de C4J por sobre JContrator es su integracin directa con el IDE Eclipse. Adicionalmente C4J permite activar y desactivar la validacin sin necesidad de alterar el cdigo, a diferencia de JContrator que requiere proceso de pre compilacin. Con lo cual la opcin que fue seleccionada para la implementacin de los contratos es C4J. Una vez tomada esta decisin se procedi a implementar las componentes destinadas a albergar los contratos e invariantes descritos en el punto Diseo por contrato.
3.5.1 EXTENSIN DE FUNCIONALIDADES
Como gran extensin a la funcionalidad original se implement el manejo de geometras poligonales como geometra. Para ello se extendi la funcionalidad de cargar geometras iniciales desde archivos con extensin poly. Adems se incluyeron las componentes orientadas a realizar la especializacin de la clase geometra en sus variaciones PSLG y Convex PSLG. Por otro lado, se incorpor
3 Ver sitio web: http://jcontractor.sourceforge.net 4 Ver sitio web: http://c4j.sourceforge.net/ 47
la posibilidad de crear mallas iniciales en funcin de los nuevos tipos de geometra.
La generacin de geometras desde geometras poligonales fue realizada en base a implementaciones de algoritmos de cdigo abierto, estos fueron encapsulados utilizando el patrn de diseo Bridge. Para ello se cre una interfaz GeometriaPSLGPuente responsable de la creacin de la malla, la cual es invocada por GeneradorDeMalla cuando se intenta crear una geometra desde un archivo tipo poly como se puede ver en la Figura 12. Adicionalmente se habilit la componente GeometriaPSLGConvexDelanuayPuente la cual utiliza las clases de cdigo abierto para la generacin de la malla inicial. De encontrarse ms implementaciones que permitan crear mallas estas pueden incorporarse como puentes nuevos y quedar disponibles para su uso. La seleccin del puente en particular a ser utilizado que determinado por el estado del objeto de tipo ParametroDTO.
FIGURA 12 : PATRN BRIDGE
Geometri aPSLGPuente + geometri aDesdePol y (ParametrosDTO dto) : Geometri a GeneradorDeMal l a + + + + + + <<Constructor>> GeneradorDeMal l a () geometri a (ParametrosDTO dto) mal l aIni ci al (Geometri a aGeometri a, ParametrosDTO dto) mal l aFi nal (Geometri a aGeometri a, Mal l a aMal l a, ParametrosDTO dto) refi nami entoMej ora (Al gori tmoCri teri oDTO al gori tmoCri teri oDTO, Mal l a aMal l a, Regi on aRegi on) generarMal l a (ParametrosDTO dto) : Geometri a : Mal l a : Mal l a : voi d : Mal l a Geometri aPSLGConvexDel anuayPuente + geometri aDesdePol y (ParametrosDTO dto) : Geometri a 48
3.6 PRUEBAS
Las pruebas fueron separadas segn sus caractersticas de funcionales y no funcionales.
3.6.1 PRUEBAS FUNCIONALES
Las pruebas funcionales estn divididas en tres grandes grupos. Las primeras estn orientadas a la obtencin de la geometra. Estas se han dividido en las de las geometras procedentes de imgenes y las de polilneas.
Como segundo bloque se han realizado revisiones a la generacin de la malla inicial, las cuales se han concentrado en la malla proveniente desde polilneas.
El tercer grupo se refiere al refinamiento de la malla. Aqu se han realizado pruebas unitarias de cada componente y pruebas cruzadas mezclando los diversos algoritmos y criterios, tanto de seleccin de punto como de refinamiento.
49
3.6.1.1 OBTENCIN DE LA GEOMETRA
Como parte del proceso inicial se deba ser capaz de obtener una geometra para ser trabajado. En el caso de las imgenes esto se obtiene de manera directa desde las propiedades de la misma, pero para las polilneas era requerido poder leer el contenido del archivo en formato poly para su representacin para los procesos de refinamiento.
Aqu se presentan imgenes que son el resultado de pruebas asociadas a las geometras del icosgono y la geometra con forma de coma, la primera consta de un total de 20 puntos y la segunda de 48.
FIGURA 13 : GEOMETRA DEL ICOSGONO
FIGURA 14 : GEOMETRA DE LA COMA
50
3.6.1.2 GENERACIN DE MALLA INICIAL
En el caso de las geometras de origen desde imagen simplemente se mantuvo la malla inicial la cual consiste en una triangulacin de Delanuay simple que es el rectngulo de la imagen dividido por la diagonal del mismo.
Por el contrario, la generacin de mallas iniciales para las polilneas es un punto que debi ser probado. Para esto se utiliz un algoritmo de cdigo abierto, por lo cual se prob su adaptacin ms que la forma de la funcionalidad en s.
FIGURA 15 : MALLA INICIAL DEL ICOSGONO
FIGURA 16 : MALLA INICIAL DE LA COMA
51
3.6.1.3 REFINAMIENTO DE MALLA
El ltimo tem a probar consisti en la depuracin de mallas geomtricas bajo diversos criterios.
3.6.1.3.1 PRUEBA A
Para la geometra icosgono se utiliz un doble proceso de refinamiento. Primero se utiliz una triangulacin de Delanuay con criterio de largo mximo del lado con un valor de 100, luego se procedi con un criterio de rea mxima utilizando un valor 500. En ambos casos se utiliz el criterio de seleccin del ortocentro del tringulo. A nivel numrico los resultados se exponen en la Tabla 6
Tringulos Totales 106 Arcos Totales 318 Vrtices Totales 76 Segundos de Proceso 37,4 TABLA 6 : RESULTADOS PRUEBA A
Aqu se presentan grficamente los resultados de cada una de las etapas. En la Figura 17 se ve como el proceso queda despus de terminar la primera iteracin, en cambio en la Figura 18 se ve el proceso de refinamiento completo.
52
FIGURA 17 : PRIMERA ITERACIN
FIGURA 18 : SEGUNDA ITERACIN
53
3.6.1.3.2 PRUEBA B
Para la geometra de la comma se aplic un refinamiento de Delanuay con un criterio de seleccin del ortocentro del tringulo y el rea mxima con un valor asociado de 0,5. En Tabla 7 se muestran los resultados obtenidos.
Tringulos Totales 174 Arcos Totales 522 Vrtices Totales 186 Segundos de Proceso 74 TABLA 7 : RESULTADOS PRUEBA B
En la Figura 19 se aprecia el proceso de refinamiento concluido.
FIGURA 19 : MALLA GENERADA
54
3.6.1.3.3 PRUEBA C
En la prueba con la imagen C se procedi a utilizar el nuevo filtro de escala de grises para la creacin de la geometra. En el refinamiento se aplic el criterio mixto de rea mxima e intensidad utilizando valores de 300 y 150 respectivamente, para la seleccin del punto se utiliz el criterio de mayor error. Al final del proceso se obtuvieron los resultados descritos en Tabla 8.
Tringulos Totales 1464 Arcos Totales 4392 Vrtices Totales 735 Segundos de Proceso 16556 Horas de Proceso 4.6 TABLA 8 : RESULTADOS PRUEBA C
En la Figura 20 se aprecia la imagen incial, por el contrario en la Figura 21 se observa como queda la malla geomtrica superpuesta a la imagen. 55
FIGURA 20 : IMGEN C
FIGURA 21 : IMGEN C CON SU MALLA
56
3.6.1.3.4 PRUEBA D
En la prueba con la imagen D se realiz una mezcla de filtros, primero aplicndose uno Gaussiano y posteriormente uno de Ecualizacin. En el refinamiento se aplic el criterio mixto de rea mxima con un val or de 520 y de diferencia de intensidad de los pixeles con un valor de asociado 50 y como criterio se us la seleccin del punto de mayor error. Los resultados del proceso se aprecian en la Tabla 9.
Tringulos Totales 666 Arcos Totales 1998 Vrtices Totales 336 Segundos de Proceso 2102317 Minutos de Proceso 35 TABLA 9 : RESULTADOS PRUEBA D
Las imgenes que a continuacin se muestran corresponden al proceso inicial, el resultado despus de los filtros y finalmente la triangulacin obtenida.
57
FIGURA 22 : IMAGN D
FIGURA 23 : IMGEN "D" DESPUES DE LOS FILTROS 58
FIGURA 24 : IMGEN "D" CON SU MALLA
59
3.6.2 PRUEBAS NO FUNCIONALES
En el anlisis preliminar se establecieron tres mtricas a ser cumplidas como parte del nuevo diseo, aqu se presentan los resultados de las mismas.
3.6.2.1 TRABAJO DESDE ARCHIVOS DE IMGENES O GEOMETRAS PSLG
La mtrica establecida fue las geometras a ser utilizadas en el proceso de refinamiento deben poder ser obtenidas desde archivos, ya sean stos de imgenes o archivos de texto.
Para el correcto cumplimiento se efectu una serie de acciones. Primero se desacopl la representacin de la geometra de la imagen, conviviendo geometras asociadas a polilneas e imgenes indistintamente. Segundo se gener cdigo para la lectura de archivos de extensin poly.
3.6.2.2 PROCESO DE GENERACIN DE UNA MALLA EN PASOS O ETAPAS
El proceso de generacin de una malla se debe entender como una secuencia de pasos independientes, los cuales son ejecutables por separado. De esta forma, la malla geomtrica obtenida de un paso puede ser un resultado en s.
Para lograr este punto se dise el software como una biblioteca, la cual posee dentro de su API los mtodos:
60
geometra: Permite instanciar una geometra desde uno de los tipos de archivos reconocidos como fuente vlida. mallaInicial: Para una geometra particular genera una malla inicial. refinamientoMejora mallaFinal: Para una malla y geometra en particular genera una malla final. refinamientoMejora: Permite depurar una Regin de una Malla aplicando ciertos algoritmos y criterios. Al tener esta API es posible realizar el proceso de refinamiento de manera iterativa repitiendo cuantas veces se requiera el mtodo refinamientoMejora.
Aqu se incluye un ejemplo en donde a una geometra cargada desde el archivo geometra.poly se le aplican dos proceso de refinamiento, uno por el largo del lado y el otro por rea mxima.
ParametrosDTO dto = new ParametrosDTO(); dto.geomtriaArchivoEsImagen = false; dto.geomtriaArchivoEsPoly = true; dto.geometriaRutaArchivo = " geometra.poly"; dto.geometriaPSLGFabrica = new GeometriaPSLGConvexDelanuayBridge();
dto.mallaInicial = new AlgoritmoDeMallaPSLGConvex(); dto.mallaFinal = new AlgoritmoDummyDeMallaFinal();
{ AlgoritmoCriterioDTO algoritmoCriterioDTO = new AlgoritmoCriterioDTO(); // algoritmoCriterioDTO.criterio = new CriterioMaximoLargoDelLado(100); 61
algoritmoCriterioDTO.seleccionPunto = new SeleccionPuntoBaricentro(); algoritmoCriterioDTO.refinamientoMejora = new AlgoritmoDeMejoraDelaunay(); // dto.algoritmosCriterios.add(algoritmoCriterioDTO); } { AlgoritmoCriterioDTO algoritmoCriterioDTO = new AlgoritmoCriterioDTO(); // algoritmoCriterioDTO.criterio = new CriterioAreaMaxima(500); algoritmoCriterioDTO.seleccionPunto = new SeleccionPuntoBaricentro(); algoritmoCriterioDTO.refinamientoMejora = new AlgoritmoDeMejoraDelaunay(); // dto.algoritmosCriterios.add(algoritmoCriterioDTO); // }
GeneradorDeMalla aRefinar = new GeneradorDeMalla(); // Instanciar la Geometra Geometria aGeometria = aRefinar.geometria(dto); // Malla Inicial Malla aMalla = aRefinar.mallaInicial(aGeometria,dto); // Instanciar geometria Completa Region aRegion = new GeometriaCompleta(); // Refinar 62
3.6.2.3 INCORPORACIN DE NUEVOS CRITERIOS O ALGORITMOS
La incorporacin de nuevos criterios o algoritmos debe ser realizada con el mnimo esfuerzo. Esto debiera ser posible sin necesidad de alterar ninguna componente ya existente, ni tampoco conocer la implementacin de las dems piezas de software.
Para cumplir con esto en la fase de diseo se elabor una serie de Hot Spot, los cuales quedan representados por las componentes:
Criterio: Permite definir si un tringulo debe o no ser depurado RefinamientoMejora: Proceso que recorre los tringulos de la geometra y selecciona aquello que no cumplen con el criterio, modificando la malla por medio de la creacin de un nuevo punto y la mantencin de las propiedades de la misma. SeleccionPunto: Mecanismo que permite seleccionar el nuevo punto del tringulo para ser incorporado en la malla. ImagenFiltro: Proceso de alteracin de las propiedades del tono de la imagen. MallaInicial: Algoritmo para generar la malla inicial del proceso de refinamiento. 63
MallaFinal: Algoritmo para generar la malla final del proceso de refinamiento.
Una vez terminada la creacin de los criterios ya existentes se incluyeron algunos Hot Spot nuevos:
SeleccionPunto: Se incorpor el baricentro y ortocentro como criterios de seleccin de punto. ImagenFiltro: Se incorpor un filtro que transforma los tonos de la imagen a escala de grises. GeometriaPSLGFabrica: Se cre una componente que permite crear mallas iniciales para geometras definidas como PSLG convexas.
64
4 CONCLUSIONES
En el desarrollo de la presente memoria se abord el objetivo de mejorar un software de automatizacin de generacin de mallas geomtricas, para lo cual se revis desde el diseo original del producto hasta los detalles de la implementacin final.
Como meta del proceso de rediseo se buscaron e identificaron los patrones de diseo que gobiernan el comportamiento del producto. El primero de ellos es Strategy el cual permite aislar las algoritmos y criterios en componentes que puedan ser utilizados en el proceso de generacin de la malla. Iterator es utilizado para recorrer las diversas etapas en la generacin de una malla. Finalmente Bridge se ha utilizado para conectar la nueva aplicacin con componentes de cdigo abierto para el manejo de PSLG.
Otro objetivo logrado fue la modificacin del diseo de software para que este perdiera acoplamiento entre los conceptos de geometra e imagen. Para ello se aisl el proceso de carga de la geometra y se utiliz la clase abstracta Geometra para representar cualquier posible origen. Lo anterior permite que los Hot Spot destinados al refinamiento y mejora sean utilizados indistintamente en cualquier geometra, como por ejemplo el Algoritmo de Mejora de Delaunay.
La principal mejora del diseo es su reenfoque a los Hot Spot. El nuevo software contiene interfaces las cuales permiten extender cualquiera de las componentes claves del producto. De esta forma es posible contar con la posibilidad de crear nuevos algoritmos o criterios para el proceso de depuracin o mejora de la malla. As mismo la inclusin de componentes para los procesos de Generar Malla Inicial y Generar Malla Final.
Se han elaborado todos los Hot Spot tendientes a cubrir los criterios de refinamiento, criterio de seleccin de punto, algoritmos y filtros de imagen que ya se encontraban presentes en la implementacin existente.
65
En el proceso de generacin automtica de la malla geomtrica se requiere una geometra como punto de partida, un objetivo logrado consiste en la posibilidad de que dicha geometra sea cargada desde un archivo con una imagen o un dominio poligonal. Ms an, se ha habilitado un Hot Spot que permite en el futuro tener nuevas formas de cargar geometras iniciales, as es posible incluir diversos nuevos formatos de geometra sin que esto necesariamente requiera alterar las piezas vinculadas a los procesos de refinamiento o mejora de la malla.
4.1 TRABAJO FUTURO
Una mejora requerida en el futuro es la posibilidad de trabajar con geometras asociadas a PSLG no convexas. El actual algoritmo de malla inicial para PSLG convexas es utilizable con polgonos no convexos pero la malla resultante puede contener desviaciones no deseables.
En el presente trabajo se ha incluido el formato poly como nuevo origen de geometra, es esperable poder contar con otros formatos de archivos asociados a PSLG.
El nuevo software se ha concentrado en el rediseo del producto lo cual ha permitido al obtencin de una biblioteca para la generacin automtica de mallas geomtricas. Se ha excluido del proceso una interfaz grfica que permi ta explotar las nuevas potencialidades del diseo, por lo cual, este se considera un punto vital de mejora.
Una extensin esperable es la posibilidad de acotar el proceso de mejora a una regin que no sea la geometra completa. Para ello se requiere la implementacin de nuevas especializaciones de la componente Regin.
66
5 BIBLIOGRAFA
[1] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of reusable object oriented sotware. Addison-Wesley, 1995. [2] Wikipedia. Wikipedia Z3. [Online]. http://es.wikipedia.org/wiki/Z3 [3] P. Coad and E. Yourdon, Object-Oriented Anlisis. New Jersey, U.S.A.: Prentice-Hall, Inc., 1991. [4] I. Jacobson, G. Booch, and J. Rumbaugh, El proceso Unificado de Desarrollo de Software. Madrid: Pearson Educacin S.A., 2000. [5] D. Alur, J. Crupi, and D. Malks, Core J2EE Patterns Best Practices and Design Strategies. San Antonio Road: Prentice Hall, 2001. [6] M. C. Bastarrica and N. Hitschfeld-Kahler, "Designing a Product Family of Meshing Tools," Advances in Engineering Software, no. 37, pp. 1-20, 2005. [7] P. Aguilar Vergara, Reconocimiento de Bordes en Imgenes Aplicado a Anillos de rboles. Santiago, Chile: Departamento de Ciencias de la Computacin, Facultad de Ciencias Fsicas y Matemticas, Universidad de Chile, 2008. [8] P. Aguliar Vergara, Reconocimiento Automtico de Bordes en Imgenes Aplicado a Anillos de rboles. Santiago, Chile: Departamento de Ciencias de la Computacin, Facultad de Ciencias Fsicas y Matemticas, Universidad de Chile, 2008. [9] Wikipedia. Wikipedia Software Framework. [Online]. http://en.wikipedia.org/wiki/Software_framework [10] M. Bertrand, "Applying 'Design by Contract'," Computer, vol. 25, no. 10, pp. 40-51, Oct. 1992.