PDF de programación - CAPITULO 5 DISEÑO DE MODULOS DE SISTEMA, PRUEBAS Y CORRECCIONES

Imágen de pdf CAPITULO 5 DISEÑO DE MODULOS DE SISTEMA, PRUEBAS Y CORRECCIONES

CAPITULO 5 DISEÑO DE MODULOS DE SISTEMA, PRUEBAS Y CORRECCIONESgráfica de visualizaciones

Publicado el 20 de Julio del 2017
586 visualizaciones desde el 20 de Julio del 2017
283,1 KB
13 paginas
Creado hace 21a (29/05/2002)
CAPITULO 5

DISEÑO DE MODULOS DE SISTEMA, PRUEBAS Y CORRECCIONES



En el presente capítulo se describen cada uno de los detalles de implementación

de las herramientas necesarias para el navegador en Intranet basado en reconocimiento de

imágenes, que se basan en el diseño conceptual definido en el capítulo anterior. Se

explica como se fueron integrando cada uno de los módulos del proyecto así como la

especificación de cada uno de

los módulos y

las herramientas utilizadas para su

desarrollo.



5.1.-Módulos del sistema



A continuación se presenta una descripción de los detalles de implementación de

los módulos que integran nuestro sistema.



5.1.1.-Reducción de información



Primero, se decidió hacer un programa que pudiera reducir la información de las

imágenes manejadas para facilitar la transmisión de la información a través de la red de

una forma más rápida y además para observar como se segmenta la imagen y como

genera su cadena.





Lo primero que había que hacer era decidir por medio de que método se reduciría

dicha información, una de las más apropiadas para nuestro caso es el de quadtrees.

Hemos visto en capítulos anteriores el funcionamiento del quadtree, de la cual se podía

optar por manejar cadenas de información ya sea por medio de la forma de los

componentes de la imagen, o por medio de los colores que se manejaban, la cual fue la

forma escogida.



Al momento de realizar nuestro código de reducción de una imagen por medio de

quadtrees, habría que ver la forma de no manejar tanta información, así que se realizó la

clase ScannerColorPixelImage en donde se definen los colores que conforman el RGB de

cualquier imagen, y que va escaneando los colores de una imagen píxel por píxel.



Ya que se tiene dicha clase, se opta por particionar la imagen de acuerdo a mx-

quadtrees. En esta parte es muy importante calcular el ancho y el largo de la imagen, para

que a partir de esas características se particiona 3 veces. Como se puede ver a

continuación:



Figura 5.1.-Ejemplo de partición de la imagen



Para poder segmentar la imagen en cuadrantes hay que tener el ancho y el largo de la

imagen y a partir de ahí definir los cuadrantes. A continuación se presenta parte del

método que se utilizó para obtener los cuadrantes:

{



inSubHeight));

inSubHeight));

inSubHeight));

inSubHeight));

inSubHeight));

inSubHeight));



}

int inSubWidth = width / 8;
int inSubHeight = height / 8;

poCuadrantes[0] = new Point(0, height - inSubHeight);
poCuadrantes[1] = new Point(0, height - (2 * inSubHeight));
poCuadrantes[4] = new Point(0, height - (3 * inSubHeight));
poCuadrantes[5] = new Point(0, height - (4 * inSubHeight));
poCuadrantes[16] = new Point(0, height - (5* inSubHeight));
poCuadrantes[17] = new Point(0, height - (6 * inSubHeight));
poCuadrantes[20] = new Point(0, height - (7 * inSubHeight));
poCuadrantes[21] = new Point(0, height - (8 * inSubHeight));
.
.
.
.
poCuadrantes[42] = new Point(inSubWidth*7, height - inSubHeight);
poCuadrantes[43]

Point(inSubWidth*7,

height

new

=

poCuadrantes[46]

poCuadrantes[47]

=

=

new

Point(inSubWidth*7,

height

new

Point(inSubWidth*7,

height

-

-

-

poCuadrantes[58] = new Point(inSubWidth*7, height - (5* inSubHeight));
poCuadrantes[59]

Point(inSubWidth*7,

height

new

=

-

poCuadrantes[62]

poCuadrantes[63]

=

=

new

Point(inSubWidth*7,

height

new

Point(inSubWidth*7,

height

-

-

(2

(3

(4

(6

(7

(8

*

*

*

*

*

*

}


La cadena generada maneja números del 0 al 7, los cuales representan los siguientes

colores:



?? 0=Rojo, donde Rojo>Verde y Rojo>Azul
?? 1=Verde, donde Verde>Rojo y Verde>Azul

?? 2=Azul, donde Azul>Rojo y Azul>Verde

?? 3=Amarillo, donde Rojo=Verde y Rojo>Azul

?? 4=Violeta, donde Rojo=Azul y Rojo>Verde

?? 5=Azul Cielo, donde Verde=Azul y Verde>Rojo

?? 6=Blanco, donde Rojo>200 y Verde>200 y Azul>200

?? 7=Negro, donde Rojo<55 y Verde<55 y Azul<55



Las condiciones anteriores se pueden observar con más detalle en la siguiente muestra

de código:

for(int i=0;i<veColors.size();i++)
{



if(veColors.elementAt(i) == null) continue;
color = (Color)veColors.elementAt(i);
if(color.getRed() < 55 && color.getGreen() < 55 && color.getBlue() < 55)
inBlack++;
else
if(color.getRed() > 200 && color.getGreen() > 200 && color.getBlue() > 200)
inWhite++;
else
if(color.getRed() > color.getGreen() && color.getRed() > color.getBlue())
inRed++;
else
if(color.getRed() == color.getGreen() && color.getRed() > color.getBlue())
inYellow++;







}


else if(color.getRed() == color.getBlue() && color.getRed() > color.getGreen())
inViolet++;
else if(color.getGreen() > color.getRed() && color.getGreen() > color.getBlue())
inGreen++;
else if(color.getBlue() > color.getRed() && color.getBlue() > color.getGreen())
inBlue++;
else if(color.getGreen() == color.getBlue() && color.getGreen() > color.getRed())
inSkyBlue++;



Esto es debido a ciertos casos que se pueden presentar al momento de escanear la

imagen. También existe el caso donde por ejemplo, puede haber la misma cantidad de

pixeles de color rojo y de color blanco, en este caso, se le da prioridad al color que este

antes en la lista, en este caso el rojo, como se indica en el siguiente for:



for(int i=0;i<results.length-1;i++)



{


}

if(results[mayorIndex] < results[i+1])


mayorIndex = i + 1;



Al momento de presentarlo en pantalla, hay que escoger el método por el cual se

quiere reducir la imagen, en este caso por medio de quadtree y luego examinar la imagen

que se quiere reducir(Figura 5.1), una vez escogida dicha imagen , pide que se genere la

cadena resultante, y se muestra la imagen particionada en cuadrantes idénticos.



En

la

figura

5.2

podemos

ver

que

la

cadena

generada

es:

066662626660600022222222000071076666000066006212000.



5.1.2.-Movilidad en la navegación



Después de realizar el módulo de reducción de información, el siguiente paso era

lograr la comunicación cliente-servidor mediante servlets. Claro que una vez que se

quisiera integrar el sistema completo, habría que integrar las actividades del módulo de

reducción de información a los servlets. Por eso es que se logró hacer una clase muy

importante en la que se llevan a cabo todas las actividades de nuestro sistema.



Figura 5.2.-Escoger una imagen que se quiera reducir mediante mx-quadtrees.






Figura 5.3.-Ejemplo de cadena generada.



Era muy

importante hacer una comunicación cliente-servidor ya que



la

navegación se da por medio de la comunicación que hay entre máquinas. Además de que

existe un cliente con el que el usuario interactúa directamente y en donde realiza sus

peticiones. Y un servidor donde se reciben las peticiones y el cual se encarga de

comunicarse con una base de datos local donde se almacenan imágenes y donde busca la

petición del cliente.



La conexión al servlet se realiza mediante el siguiente código:

public void init(ServletConfig servletConfig)
{

try{
super.init(servletConfig);
trace("Initializing connection...");
connPool = new ConnectionPool();
trace("Initialized connection...");

}
catch(ServletException svtException){
}
}

trace("ServletException: (init) " + svtException);





Primero hay que poder hacer una conexión a una base de datos, en este caso el

manejador de bases MySQL. Aquí se crea una sola tabla que va a incluir imágenes, que

incluyan un id de entrada, la ruta de la imagen y la cadena generada.


Tabla imágenes

Campo

pathname
img_reducida
Id



Tipo de dato

varchar(100)
varchar(64)
Integer

No
No
No

Nulo

Tabla 5.1.-Tabla de imágenes creada en la base de datos para el sistema



Para poder dar de alta imágenes en la BD es importante que la imagen tenga la

extensión ".jpeg" o ".gif", en caso de que así no sea, no se podrá dar de alta imágenes en

la base de datos:



inOffset = stBytes.indexOf("image/gif") + 13;
stBytes = stBytes.substring(inOffset, stBytes.length());
inCount = stBytes.indexOf("-----------------------------") - 2;
stBytes = stBytes.substring(inOffset, inCount);

if(stBytes.indexOf("image/gif") != -1)
{



}
else if(stBytes.indexOf("image/pjpeg") != -1)
{



}

inOffset = stBytes.indexOf("image/pjpeg") + 15;
stBytes = stBytes.substring(inOffset, stBytes.length());
inCount = stBytes.indexOf("-----------------------------") - 2;
stBytes = stBytes.substring(inOffset, inCount);



Cuando se quiere realizar una búsqueda, hay que escoger en un editor de archivos

la imagen que se quiera buscar, luego el sistema se va al servlet y es capaz de conectarse

con la base de datos para poder hacer la búsqueda.



Otra parte

importante de

la

implementación del sistema fue el patrón de

comparación de las imágenes, en el cual, se comparan tal cual la cadena de la imagen de

la cual se quieren encontrar
  • Links de descarga
http://lwp-l.com/pdf5638

Comentarios de: CAPITULO 5 DISEÑO DE MODULOS DE SISTEMA, PRUEBAS Y CORRECCIONES (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad