Académique Documents
Professionnel Documents
Culture Documents
de imagenes biomedicas
Octubre 2003
Resumen
Abstract
Indice general
1. Introducci
on
2. El Estado de la t
ecnica
2.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
15
2.3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
17
19
21
33
37
INDICE GENERAL
2.3.7. Conectividad . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
43
46
46
49
50
53
58
59
63
72
74
2.4. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
ii
77
3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
77
78
79
79
79
80
80
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
81
3.4.2. Dcmnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
3.4.3. Dcmjpeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.4.4. DicomScope . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.5. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
4. Programaci
on en JAVA
91
4.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
92
94
95
4.4.1. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
4.4.2. Identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
96
4.4.4. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
98
4.5. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
99
99
. . . . . . . . . . . . . . . . . . . .
r
GVA-ELAI-UPM
PFC0075-2003
iii
INDICE GENERAL
iv
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
151
vi
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
5.8.1. Arbol
de clases . . . . . . . . . . . . . . . . . . . . . . . . . . 170
5.8.2. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
r
GVA-ELAI-UPM
PFC0075-2003
vii
INDICE GENERAL
6. Desarrollo de aplicaci
on
177
. . . . . . . . . . . . . 213
viii
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
A. Administraci
on de sistemas
257
r
GVA-ELAI-UPM
PFC0075-2003
ix
INDICE GENERAL
r
GVA-ELAI-UPM
PFC0075-2003
INDICE GENERAL
r
GVA-ELAI-UPM
PFC0075-2003
xi
Indice de figuras
12
19
19
2.5. Transmision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
21
22
24
25
26
28
29
32
33
35
36
xiii
INDICE DE FIGURAS
38
40
41
43
45
47
49
51
54
60
64
2.28. Muestreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
66
67
69
70
71
72
83
86
87
3.4. Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
xiv
r
GVA-ELAI-UPM
PFC0075-2003
INDICE DE FIGURAS
3.5. Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
90
92
93
95
96
. . . . . . . . . . . . . . . . . . . . . . 101
r
GVA-ELAI-UPM
PFC0075-2003
xv
INDICE DE FIGURAS
. . . . . . . . . . . . . . . . . . . . . . . . 196
6.13. Men
u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.14. Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
6.15. actionPerformed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6.16. jMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
6.17. Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
6.18. Configurar bibliotecas
. . . . . . . . . . . . . . . . . . . . . . . . . . 214
. . . . . . . . . . . . . . . . . . . . . 225
xvi
r
GVA-ELAI-UPM
PFC0075-2003
INDICE DE FIGURAS
r
GVA-ELAI-UPM
PFC0075-2003
xvii
INDICE DE FIGURAS
. . . . . . . 282
xviii
r
GVA-ELAI-UPM
PFC0075-2003
Captulo 1
Introducci
on
DICOM1 es un estandar en comunicacion e imagenes en medicina, que facilita el
manejo de informacion medica entre hospitales y centros de investigacion.
La gran importancia de este estandar es que da la posibilidad de interconectar
sistemas informaticos de diferentes fabricantes y hace posible la comunicacion entre
ellos; en un hospital donde los aparatos medicos son de muchas marcas diferentes
debido a la especializacion.
DICOM hace posible que los archivos medicos puedan viajar de forma segura entre
hospitales, centros de investigacion y departamentos. Luego esa informacion puede ser
vista remotamente para que los medicos puedan diagnosticar desde su casa y buscar
diferentes opiniones de otros expertos de una forma rapida y sencilla.
La creciente utilizacion de sistemas de adquisicion y tratamiento digital de imagenes
medicas ha hecho necesaria la adopcion de un estandar que posibilite el intercambio
de estas. Las imagenes medicas son muy importantes para los diagnosticos de pacientes, tratamientos terapeuticos y evaluacion de resultados. Gracias a las nuevas
tecnicas de imagenes digitales, tales como la topografa computarizada, angiografa
por sustraccion digital, resonancia magnetica y as sucesivamente, han reducido las
dosis de radiacion a los pacientes y los cortes anatomicos.
DICOM poco a poco se esta introduciendo en todo el ambito sanitario, y que sin
duda facilitara el manejo de la informacion medica.
Los objetivos del estandar son:
Lograr una interfaz com
un para todos los dispositivos de imagenes (tomografa,
1
CAPITULO 1. INTRODUCCION
Se define la utilizacion de protocolos OSI, para asegurar una comunicacion eficiente y que soporte una amplia variedad de tecnologas de red basadas en
normas OSI, CSMA/CD, ATM, X.25, etc. Y TCP/IP como protocolo de transporte, que es abierto y compatible con las redes que se estan instalando en los
centros sanitarios.
Los estandares de codificacion de la informacion y los datos resultantes de utilizar los Objetos de Informacion (imagenes, informes, etc.) con las Clases de
Servicio (impresion, almacenamiento, etc.), se homogeneizan.
Tecnicas de compresion normalizadas (JPEG con y sin perdidas)
Reglas de codificacion para construir una secuencia de datos para ser transmitida como un mensaje.
1.1.
DICOM Toolkit
Java DICOM Toolkit
r
GVA-ELAI-UPM
PFC0075-2003
1.2.
Este proyecto trata de ser una gua completa para el estudio del estandar Dicom,
sus posibles aplicaciones y utilizacion en el futuro.
Se han estudiado dos toolkit de Dicom con el fin de ver cual sera mas u
til para el
desarrollo de una aplicacion final, en la que los principales servicios que proporciona
el estandar puedan ser operativos y utilizables para la medicina del nuevo siglo, ya
que DICOM ha tenido un importante avance en el u
ltimo a
no.
1.3.
r
GVA-ELAI-UPM
PFC0075-2003
CAPITULO 1. INTRODUCCION
r
GVA-ELAI-UPM
PFC0075-2003
Captulo 2
El Estado de la t
ecnica
2.1.
Introducci
on
CAPITULO 2. EL ESTADO DE LA TECNICA
2.2.
Librera de Im
agenes M
edicas
[BOBA00] [TJAND99]
Los sistemas tradicionales de gestion de imagenes medicas, tales como los sistemas de visualizacion y de archivo y comunicacion, estan basados en estaciones de
trabajo especializadas y sistemas de arquitectura cerrada. La tecnologa de Internet
esta siendo explorada para la distribucion eficiente y rentable de imagenes medicas.
Las imagenes medicas son el corazon de los diagnosticos de pacientes, tratamientos
terape
uticos, planificacion quir
urgica, muestreo de enfermedades, y a largo plazo para
repetir evaluaciones de resultados. En las pasadas tres decadas, ha habido tremendos cambios con la llegada de nuevas tecnicas como la tomografa computarizada
(CT), resonancia magnetica (MRI), resonancia espectroscopica (MRS), resonancia
magnetica funcional (fMRI), angiografa por sustraccion digital (DSA), tomografa
por emision de positrones (PET), magnetic source imagin (MSI), y as sucesivamente.
Estas modalidades de imagenes digitales, que actualmente constituyen alrededor
del 30 por ciento de los analisis de imagenes medicas en los Estados Unidos, han
revolucionado la manera de adquirir imagenes de pacientes. Han proporcionado un
metodo no invasivo para ver cortes transversales anatomicos y estados fisiologicos, y
han reducido la dosis de radiacion a los pacientes y los traumas de reconocimiento. El
otro 70 por ciento de analisis de imagenes de craneo, torax, pecho, abdomen, y hueso
estan hechas en los convencionales rayos X o radiografa digital (CR). Diferentes tipos
de pelculas digitalizadoras, como los escaner, camaras de estado solido, escaner de
tambor (drum scanner) y vdeo camaras, se usan rutinariamente para convertir las
pelculas planas de rayos X en formato digital para su posterior tratamiento y archivo.
En la figura 2.1 se muestra la clasificacion de las modalidades de imagenes medicas
conforme al contenido anatomico (estructural) o fisiol
ogico (funcional) de las imagenes
generadas. Cada una de estas modalidades de imagen proporciona una funcion y
caractersticas u
nicas que no pueden ser reemplazadas por las otras modalidades. La
dimension de una imagen digital se encuentra entre 128 x 128 pixels (p.e., PET y
tomografa computarizada por emision de fotones simples SPECT de modalidades
de medicina nuclear) y 4000 x 5000 pixels (p.e., mamografa).
Estos avances en la tecnologa de la imagen van a continuar. Sin embargo, la reorganizacion y redise
no de los sistemas de sanidad esta cambiando el foco de la imagen
digital de la generacion y adquisicion de imagenes al post-tratamiento y gestion de
datos de imagen. El motivo de este cambio es para poder obtener el mayor beneficio
posible de los datos que ya existen. Los nuevos cambios principales de la proxima
decada se centraran en la recogida, archivo, indexado, comunicacion y gestion de
los datos de imagenes multimedia para una mejor rentabilidad en educacion medica,
investigacion clnica y diagnostico.
r
GVA-ELAI-UPM
PFC0075-2003
Los FS-PACS (full-scale Picture Archiving and Communication Systems), tambien llamados en castellano sistemas de archivo y comunicacion de imagenes a gran
escala, son el metodo predominante para la gestion de informacion de imagenes en
los hospitales. Un FS-PACS consiste en una integracion de PACS, en informacion
administrativa dependiente del Servicio de Radiologa (en ingles, Radiology Information System RIS) e informacion del hospital (en ingles, Hospital Information
System HIS). Los FS-PACS de un hospital de tama
no medio (alrededor de 600-800
camas) podran requerir 1 Terabyte de datos digitales por a
no en su librera o archivo
de imagenes. Desde 1995 ha habido mas de 50 instalaciones de FS-PACS en todo el
mundo, con cientos de PACS y a
un mas mini-PACS en el funcionamiento cotidiano.
Los PACS estan dise
nados para revisiones diagnosticas por radiologos y cardiologos,
pero estos sistemas tampoco estan dise
nados para funcionar correctamente en una
distribucion de imagenes medicas, esto es, comunicando imagenes medicas y datos
relacionados a otros especialistas como medicos e investigadores. Un sistema abierto
con mecanismos omnipresentes de acceso seguros podra permitir a los usuarios utilizar completamente la funcionabilidad de la librera digital de imagenes medicas de
manera rentable. Las tecnologas de Internet y la red mundial WWW proporcionan
una plataforma ideal para el desarrollo de libreras de im
agenes medicas.
2.2.1.
Libreras de Im
agenes M
edicas
Cuando se dise
na, gestiona y utiliza una librera digital de imagenes medicas en
Internet hay que tener en cuenta una serie de puntos que se presentan a continuacion.
r
GVA-ELAI-UPM
PFC0075-2003
CAPITULO 2. EL ESTADO DE LA TECNICA
Servidor de im
agenes basado en PACS o basado en Internet
Los controladores de PACS son programas de aplicacion del servidor dise
nados
para acceso rapido desde las imagenes archivadas hasta las estaciones especializadas
de visualizacion para lectura de diagnosticos. La practica com
un para facilitar acceso
a traves de Internet a los archivos de imagenes en PACS es a traves de un servidor
HTTP configurado para comunicarse con los controladores de PACS. El usuario enva
peticiones al servidor, el cual en turnos pregunta al controlador de PACS por el
conjunto de imagenes correspondientes. Los controladores de PACS, sin embargo, no
estan dise
nados para procesar un gran n
umero de solicitudes. La carga de trabajo
extra generada por el servidor HTTP degrada el funcionamiento en conjunto de los
controladores de PACS.
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
CAPITULO 2. EL ESTADO DE LA TECNICA
Visualizaci
on 2D o visualizaci
on 3D
Los PACS estan dise
nados para soportar varios modelos de visualizacion de imagenes
2D, que pueden simular a las radiografas convencionales. Las caractersticas a
nadidas
a la visualizacion de imagenes digitales incluye soporte de zoom, de rotacion, ajustes
panoramicos, de ventana, de nivel. Recientes avances en hardware y lenguajes para
imagenes 3D facilitan el movimiento hacia la visualizacion 3D.
La pregunta es si hay una necesidad de facilitar visualizacion 3D online en PACS
o libreras de imagenes medicas. Los Radiologos estan entrenados con la habilidad
de reconstruir mentalmente la imagen 3D a partir de cortes de imagenes en 2D. El
complejo proceso de visualizacion en 3D no a
nade ninguna nueva informacion y podra
incluso disminuir su lectura eficiente. Por otro lado, la visualizacion online es u
til para
la interpretacion combinada o correlacion de imagenes 3D anatomicas o fisiologicas, o
datos metabolicos, y para operaciones en tiempo real de terapia de imagenes guiadas
y procedimientos quir
urgicos. El desafo que se presenta es debido no solo al gran
tama
no de las imagenes medicas, sino tambien a la complejidad de las relaciones
entre los distintos datos.
La implementacion del las capacidades de visualizacion en los PACS o en una
librera de imagenes digitales sera probablemente una decision estrategica de como
uno debera expandir los servicios del sistema a otras disciplinas. Un modelo operativo
consiste en a
nadir un servidor de visualizacion potente en una arquitectura Three
Tiered y transmitir los resultados de la visualizacion a las estaciones clientes a traves
de redes de alta velocidad. La ventaja de esta configuracion es la reduccion de carga
computacional de las estaciones clientes.
Recuperaci
on por el contenido de la imagen
El dise
no original de los PACS es para soportar el estudio de imagenes; de esta
manera, las imagenes son recuperadas basandose en claves, tales como el nombre
del paciente o el identificador del hospital. La gestion de documentos de imagen
esta basado en sistemas de archivos planos. La ventaja es el simple dise
no de modelado
de datos. Este enfoque carece de la capacidad de buscar e indexar las grandes bases de
datos de PACS por el contenido (p.e., las caractersticas de la imagen o las relaciones
de nombre). Esto impide grandemente la utilidad de los PACS para otras operaciones
clnicas, tales como referencias online.
La recuperacion de imagenes por su contenido (BCIR - Content-based image retrieval) ha sido la llave para la actividad en la investigacion de una librara digital de
imagenes. Las actuales tecnicas de desarrollo en libreras digitales pueden ser adaptadas a los PACS. Muchas de las tecnicas existentes, sin embargo, se ocupan de la
10
r
GVA-ELAI-UPM
PFC0075-2003
b
usqueda a traves de caractersticas comunes de las imagenes, tales como el color, forma, textura, o una combinacion de estas. Pero en el dominio de las imagenes medicas,
deben ser dise
nados todava mas algoritmos especficos para la extraccion de caractersticas y modelos de datos mas complejos y costosos para tomar ventaja de la rica
informacion contenida en las libreras de imagenes medicas.
Funcionamiento y fiabilidad
Los usuarios de PACS necesitan acceso rapido a las imagenes medicas para lecturas y diagnosticos primarios, y para ello a menudo se necesitan redes de alta velocidad (p.e., ATM y 100 Base T). Los PACS son esencialmente sistemas cerrados
con un peque
no n
umero de usuarios, asegurando de ese modo un buen funcionamiento comparado con los sistemas basados en Internet. La estrecha relacion existente
entre las aplicaciones de visualizacion y el modelo de datos incrementa ademas el
funcionamiento. Con mas nodos siendo a
nadidos a Internet, la librera digital basada
en esta necesita considerar esta cuestion de funcionamiento. La librera digital de
imagenes medicas debe ser capaz de organizar las peticiones clnicas no primariascomo tareas principales. Una librera digital de imagenes debera ser dise
nada para
lecturas secundarias o b
usquedas de datos por referencia.
Implementando una librera digital de imagenes con una intranet se puede lograr
un funcionamiento comparable a los tradicionales sistemas de PACS, mientras economizamos con el uso de ordenadores de escritorio economicos en lugar de estaciones
r
GVA-ELAI-UPM
PFC0075-2003
11
CAPITULO 2. EL ESTADO DE LA TECNICA
2.2.2.
12
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
13
CAPITULO 2. EL ESTADO DE LA TECNICA
14
r
GVA-ELAI-UPM
PFC0075-2003
2.3.
2.3. ESTANDAR
DICOM
Est
andar DICOM
2.3.1.
Introducci
on
r
GVA-ELAI-UPM
PFC0075-2003
15
CAPITULO 2. EL ESTADO DE LA TECNICA
que incluan todas las estructuras de datos de DICOM, mostraron que el apoyo de
red era operacional y podra cumplirse exitosamente.
Durante el encuentro anual de 1992 se formaron Grupos de trabajo de ACR-NEMA
(WGs) responsables de las partes restantes y completar el estandar de DICOM en
encuentros mensuales. Se termino en septiembre de 1993, donde las versiones finales
de muchas de las partes haban experimentado la prueba de implementacion real a lo
largo de 1993 para asegurar que la calidad de estandar sera demostrada por productos
reales en el encuentro de 1.993.
La creciente utilizacion de sistemas de adquisicion y tratamiento digital de Imagenes
Medicas ha hecho necesaria la adopcion de estandares que posibiliten el intercambio
de estas tanto dentro de las propias instituciones como fuera de ellas.
El estandar DICOM 3.0 nace en el a
no 1993, a partir de un redise
no completo de
5
o
la Publicacion Normalizada N 300-1988 de ACR-NEMA y pertenece al campo de la
Informatica Medica por lo que, en principio, esta norma se solapa con otras de este
campo.
En primer lugar, dejar claro que DICOM 3.0 es aplicable a toda la esfera de las
Imagenes Medicas, desde la transmision hasta el tratamiento e impresion, independientemente de la especialidad medica que la exporte.
En segundo lugar, y quizas lo mas importante a da de hoy, indicar que aunque la
Norma tiene el potencial de facilitar la realizacion de trabajos con PACS, la utilizacion
de la Norma DICOM 3.0 no garantiza, por si misma que se cumplan todos los objetivos
que se intentan lograr en un sistemas de gestion de imagenes. Se facilita, pero no se
garantiza, la interoperatividad en un entorno multi-vendedor.
En tercer lugar, quedan por delimitar elementos importantes de informacion asociada a la propia imagen, por lo que se prevee numerosas extensiones que den soporte
a futuras aplicaciones.
El avance de la estandarizacion poco a poco va siendo una realidad:
16
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
2.3.2.
Historia de DICOM
En un esfuerzo para desarrollar unos medios estandar para que usuarios de equipamiento de imagen medica (tal como TAC, resonancia magnetica, medicina nuclear, y ultrasonidos) puedan intercambiar imagenes u otros dispositivos entre estas maquinas, el
Colegio Estadounidense de Radiologa (ACR) y la Asociacion Nacional de Fabricantes
Electricos (NEMA) formo un comite conjunto a principios de 1983. La mision de este
grupo, el Comite para estandarizar las comunicaciones y la Imagen digital de ACRNEMA, estuvo en hallar o desarrollar una interfase entre el equipamiento y cualquier
otro dispositivo que el usuario quiera conectar. Ademas de las especificaciones para
la conexion de hardware, el estandar se desarrollara para incluir un diccionario de
los elementos de datos necesitados para interpretacion y la exhibicion de imagenes.
La comision inspecciono muchos patrones de interfase existentes, pero no se encontro ninguno que fuera enteramente satisfactorio. En algunos, sin embargo, se encontraron ideas u
tiles. La Asociacion Estadounidense de Fsicos en la Medicina (AAPM)
haba, un a
no antes, desarrollado un formato estandar para grabar imagenes sobre
la cinta magnetica. La porcion de cabecera contendra una descripcion de la imagen
junto con los elementos de datos (tal como nombre paciente) para identificarlo. El
concepto de usar elementos de longitud variable identificados con una etiqueta o la
llave (el nombre del elemento) se creyo que era particularmente importante y fue
adoptado por la comision.
Despues de 2 a
nos de trabajo, la version primera del estandar, ACR-NEMA 3001985 (tambien llamado ACR-NEMA Version 1.0) se distribuyo en 1985 en la reunion
anual del RSNA y publicada por NEMA. Como con muchas versiones primeras, se
encontraron errores y sugirieron mejoras. La comision haba creado un grupo de trabajo (WG) VI para mejorar el estandar una vez se publico. Este WG contesto muchas
preguntas de desarrolladores potenciales y comenzo trabajando sobre cambios para
mejorar el estandar. En 1988, ACRNEMA 300-1988 (o Version 2.0 de ACR-NEMA)
r
GVA-ELAI-UPM
PFC0075-2003
17
CAPITULO 2. EL ESTADO DE LA TECNICA
6
7
18
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
2.3.3.
Procesamiento Distribuido
Un proceso distribuido esta formado al menos por dos procesos que comparten
informacion y confiando en la operatividad de uno en el otro. Un n
umero de procesos
distribuidos actuando juntos proporcionan servicios para sistemas en entornos como
departamentos de radiologa. Figura 2.5.
Antes de que los procesos puedan actuar juntos una serie de temas tienen que ser
r
GVA-ELAI-UPM
PFC0075-2003
19
CAPITULO 2. EL ESTADO DE LA TECNICA
tratados. Tienen que estar de acuerdo en el papel (rol) que cada uno desempe
nara,
tener una vision equivalente de la informacion y seleccionar las operaciones que cada
parte realizara.
Primeramente, el papel de cada parte debe ser definido como cliente o como servidor. La parte que utiliza la operatividad de la otra, tiene el papel de cliente. La
parte contraria actuando sobre un modelo concertado tiene el papel de servidor. El
funcionamiento de ambas partes viene definida por la relacion que comparten. La
relaci
on define que parte y bajo que condicion toma la iniciativa en el proceso. En
muchos casos los clientes provocan el proceso, pero a veces lo hace el servidor.
Ademas de los papeles que desempe
nan, ambas partes tienen que estar de acuerdo en la informacion que intercambian. La informacion esta definida por el contexto
del servicio que el proceso distribuido esta realizando. Cada proceso individual tendra una vision selectiva de esta informacion, pero la vision tiene que ser coherente en
la totalidad del contexto.
La operacion define como debe ser procesada la informacion intercambiada en la
otra parte, tal como almacenar informacion, devolver un resultado, etc.
La combinacion del contexto, relacion, operaciones e informacion es la piedra fundamental del procesamiento distribuido y tiene que ser definida antes de que una
aplicacion pueda ser realizada. Todos estas cuestiones son parte del dominio de la
aplicaci
on(application domain) de los procesos distribuidos. Estos no se ocupan de
la forma en que la informacion es intercambiada actualmente, pero cuentan con los
servicios de menor nivel (p.e. TCP/IP) suministrados por el dominio del intercambio(exchange domain) para poder hacer frente al intercambio.
Ambas partes, cliente y servidor, tienen que ser capaces de emitir peticiones a los
servicios de menor nivel. Los servicios de menor nivel llevaran el intercambio y estan
ocultos para el dominio de la aplicacion del cliente o servidor. La parte que solicita
20
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
los servicios es el usuario del servicio (service user). El equivalente es el proveedor del
servicio (service provider). Ambas partes pueden tener distintas implementaciones,
pero comparten el mismo conocimiento sobre como se intercambian los datos (protocolo) y tienen el mismo interface logico (formato de peticion) entre s. Ambas partes
deben determinar como viene representada la informacion en el formato de bit/byte.
El proveedor del servicio debe determinar en que formato la informacion fue transferida y convertida a la representaci
on esperada por el dominio de la aplicacion. La
representacion es conocida entre el usuario y el proveedor del servicio en cada parte.
Despues del intercambio, la informacion presentada a los procesos utilizando la informacion es igual en ambas partes, independientemente de como fuera intercambiada.
El intercambio fsico entre los proveedores del servicio puede ser va network o
media. Cada mecanismo tiene su propia forma de manejar el conocimiento de la
representacion.
La Figura 2.6 representa los conceptos que acaban de ser estudiados.
2.3.4.
r
GVA-ELAI-UPM
PFC0075-2003
21
CAPITULO 2. EL ESTADO DE LA TECNICA
22
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
User). Para realizar una asociacion, lo primero es que SCU y SCP esten deacuerdo
en utilizar una clase SOP.
r
GVA-ELAI-UPM
PFC0075-2003
23
CAPITULO 2. EL ESTADO DE LA TECNICA
contexto definido por la Clase de Servicio, un IOD consiste en una entidad de informacion u
nica llamada IOD normalizado (normalized IOD) o una combinacion de
entidades de informacion llamada IOD compuesto (composite IOD). Las Clases de
Servicio que llevan a cabo funciones de administracion (en su mayor parte cuestiones
simples) utilizan IODs normalizados, aquellas que manejan el flujo de imagenes (estructura compleja de informacion) utilizan IODs compuestos. Cada Clase SOP es
definido con uno o mas IODs que son combinados con uno o mas servicios.
24
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Atributos
Los atributos son la entidad de informacion basica y tienen que ser descritos
en detalle.Figura 2.10. Las siguientes caractersticas o campos de un atributo estan
definidas en el estandar DICOM:
un u
nico Nombre de Atributo (Attribute Name) (legible por el ser humano).
una u
nica Etiqueta de Atributo (Attribute Tag) (legible por los sistemas de
informacion).
una Descripcion de Atributo (Attribute Description) (semantica).
un Valor de Representacion (Value Representation) (sintaxis).
un Valor de Multiplicidad (Value Multiplicity).
tipo de clasificacion: 1, 1C, 2, 2C o 3 (usadas dependiendo del contexto de las
Clases SOP, Clases de Servicio, papel que desempe
na, etc.).
El tipo de clase especifica el uso de los atributos especificados en las Clases SOP
y el papel del SCU o del SCP. Dependiendo de la situacion, cada atributo es forzado
r
GVA-ELAI-UPM
PFC0075-2003
25
CAPITULO 2. EL ESTADO DE LA TECNICA
a tener un valor (tipo 1) o forzado con o sin valor (tipo 2) o opcional (tipo 3).
Dentro de un IOD, los atributos agrupados o individuales pueden ser condicionados por la situacion en la que el IOD esta siendo usado. Por ejemplo, un analisis utilizando contraste puede almacenar informacion en un modulo de Contrast/Bolus.
Los atributos de este modulo estan por consiguiente disponibles o no disponibles,
dependiendo del uso del contraste. Si se usa, el tipo de clase especificada para los
atributos debe ser obedecida (definida como tipo 1C y tipo 2C).
26
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
En contraste, las Clases de Servicio utilizando IODs normalizados tienen un contexto mas amplio, como funciones directivas. Estas utilizan los Elementos de Servicio
primitivos para operaciones con piezas sencillas de informacion: GET, SET, ACTION,
etc. La Clase de Servicio define la relacion de la secuencia de la peticiones primitivas.
Con Clases de Servicio normalizadas ambas partes estan al tanto del procedimiento
de ambas partes, utilizando los Elementos de Servicio para controlarlos.
Cada Clase SOP utiliza uno o mas Elementos de Servicio de cada uno de los grupos compuestos (C-XXXX) o de los grupos normalizados (N-XXXX). Los siguientes
Elementos de Servicio estan disponibles: C-STORE, C-FIND, C-MOVE, C-GET, CCANCEL, C-ECHO, N-GET, N-SET, N-ACTION, N-CREATE, N-DELETE y N-EVENTREPORT. Las sem
anticas de los Elementos de Servicio dependen de la Clase de Servicio y de la Clase SOP en la cual estan utilizados.
Los Elementos de Servicio relacionados con Media, M-WRITE, M-READ, M-DELETE,
M-INQUIRE-FILE-SET y M-INQUIRE-FILE definen funciones primitivas para el tratamiento con archivos.
Gracias a las Clases de Servivio (mensajes DICOM) hay una comunicacion entre
ambas partes. Antes de poder lograr el intercambio de informacion entre dos Clases
SOP, debe establecerse entre ellas una Asociacion (Association en DICOM), donde se
negocia para establecer las posibilidades de trabajo de cada parte. Una vez establecida
la asociacion, si esta fue satisfactoria puede establecerse el intercambio de mensajes a
traves de los DIMSE- DICOM Service Element- (DIMSE-C en este caso, que soporta
operaciones con Instancias Compuestas SOP).
Los mensajes entre dos aplicaciones DICOM estan codificados y son enviados en
forma de Data Set que esta compuesto de Command Elements y deben tener una
estructura como la que se muestra en la figura 2.11.
La norma establece que la estructura del mensaje y set de comandos sea por
defecto: - Tags en orden Creciente, - Little Endian, -VR Implcito.
La transferencia de mensajes entre aplicaciones DICOM se establece mediante el
flujo de Data y Command Elements ordenados seg
un el Tag y codificados.
Si en el Data Set vienen ya implicitos los datos que quieren ser pasados de un
equipo a otro, este se compone de Data Elements y su estructura es seg
un la figura
2.12. Este es el modo en que se codifican los mensajes para transferir los estudios y
la informacion de un equipo a otro.
Tanto el Command Set como el Data Set son cola de Command Elements8 o
8
r
GVA-ELAI-UPM
PFC0075-2003
27
CAPITULO 2. EL ESTADO DE LA TECNICA
28
Codificaci
on de datos (Fecha de Estudio, Modalidad de Estudio, etc.)
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Identificaci
on
Como parte del proceso de creacion de una Instancia SOP, una identificacion es
generada como atributo de la SOP Instance. La identificacion es pretendida para la
r
GVA-ELAI-UPM
PFC0075-2003
29
CAPITULO 2. EL ESTADO DE LA TECNICA
utilizacion por los sistemas de informacion antes que por los humanos y tiene dos
caractersticas: la identificacion de la clase (class identification) y la identificacion de
la instancia (instance identification).
Esta identificacion tiene que ser usada en un entorno de muchos vendedores en
distintas partes del mundo. Para asegurar la unicidad de cada identificacion en todo
el mundo, un mecanismo es utilizado para generar una cadena de caracteres, llamada
Identificador Unico
o UID (Unique Identifier), tal y como sigue:
<root>.<suffix>
La parte de root es proporcionada por una autoridad que garantice que nadie
mas utilizara este root. Este n
umero sera asignado por estandares de organizaciones
y compa
nas tales como Philips u hospitales, que deberan asegurar que permanece
u
nico a lo largo de sus propios sistemas. Utilizando un sistema de identificacion u
nico,
cada sistema tendra un u
nico root a lo largo de todo el mundo. El suffix tiene que ser
creado dinamicamente por el sistema en la creacion de la instancia.
Un vez que una instancia es identificada por un UID, esta debe ser utilizada
consistentemente. Si se crean copias o la instance es reproducida sin ninguna modificacion, debera tener el mismo UID, de lo contrario dos piezas de identica informacion
coexistiran con diferentes identificaciones, lo que podra conducir a confusion.
Relaciones
Ademas de la identificacion de la Clase SOP y la Instancia SOP, los UIDs tambien
se utilizan para identificar una relaci
on entre instancias. En una instancia compuesta
(composite instance) que contiene una secuencia de imagenes, la Entidad de Informacion (Information Entity) que contiene la informacion de la secuencia sera com
un
para todas aquellas instancias. En este caso solo un UID es requerido, el atributo por
s mismo identifica que tipo de entidad de informacion es identificada.
En el caso de instancias normalizadas (normalized instances), solo son posibles
referencias a instancias fuera de s mismas, aqu la combinacion de una identificacion
de una clase y una instancia es requerida. Este es tambien el caso de imagenes que
estan referidas a cada una, cuando tienen una relacion segura.
Con el metodo de la unicidad de identificacion de informacion utilizando UIDs,
es tan solo posible comparar si las instancias son iguales. El valor del UID no tiene
ning
un significado, y no puede ser utilizado para clasificar, etc. Utilizando otro metodo, atributos mas significativos tales como la fecha y la hora y los n
umeros de la
secuencia, la relacion entre la informacion puede ser establecida.
30
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Representaci
on del Valor (Value Representation)
Para cada atributo un Representaci
on del Valor (VR) es definido. Una Representacion del Valor describe como un atributo es codificado en un Data Element
(elemento de dato). El conocimiento de la Representacion del Valor es compartido
por las partes en el intercambio de informacion, el proceso de codificacion y decodificacion tiene que tener cuidado en la seleccion del VR correcto para un atributo
(identificado por su etiqueta tag).
Dos formas de compartir esta informacion son posibles: compartir un diccionario
de datos que contiene todos los posibles atributos de intercambio o incluyendo la representacion del valor como una parte del data element. El u
ltimo metodo incrementa
los gastos de intercambio de informacion, pero es mucho mas flexible comparado con
el uso de un diccionario de datos compartido. Especialmente en un entorno de muchos
proveedores, sincronizar el diccionario de datos es difcil.
Cuando la Representacion del Valor es incluido, el mensaje es codificado con un
VR explcito (explicit VR). En el otro caso, la codificacion tiene lugar con un VR
implcito (implicit VR).
Transfer Syntax
Antes de que la Data Set de una Instancia SOP pueda ser transferida, la forma
en la que el Data Set es codificado en una secuencia de bytes debe ser fija, ambos por
acuerdo cuando el intercambio network es usado, o almacenados juntos con los datos
de uno. La forma de codificar es especificada por el Transfer Syntax.
Tres caractersticas tiene que ser definidas por la transfer syntax:
Como una Representacion del Valor es especificada.
La ordenacion de bytes de un n
umero m
ultiple de bytes (palabras, palabras
largas): little endian o big endian.
En caso de encapsulacion (compresion): el formato de compresi
on.
El manejo del transfer syntax es parte del proveedor del servicio. Sin embargo,
ambos procesos tienen que ser iniciados seg
un el transfer syntax, aceptable para
ambas partes.
Analogamente a una identificacion de Clase SOP, un transfer syntax es identificado por un UID.
r
GVA-ELAI-UPM
PFC0075-2003
31
CAPITULO 2. EL ESTADO DE LA TECNICA
Una visi
on general
Mirando la figura 2.13 se puede obtener una vision general del flujo de codificacion
y decodificacion. Los servicios proporcionados dentro del Dominio del Intercambio
tienen que garantizar que las Instancias SOP en ambas partes contienen la misma
informaci
on, independientemente de la representacion y metodo de transferencia.
El proceso de codificacion y decodificacion tiene dos etapas:
La aplicacion que esta utilizando la informacion debe conocer el significado (semantica) de la informacion dentro del objeto dato.
32
r
GVA-ELAI-UPM
PFC0075-2003
2.3.5.
2.3. ESTANDAR
DICOM
Entidad de la Aplicaci
on (Application Entity)
Una cuestion importante en las aplicaciones distribuidas en red es como las aplicaciones pueden contactar entre ellas. En DICOM Network, las partes se reconocen
mutuamente mediante las Entidades de la Aplicacion. Una Entidad de la Aplicaci
on
es aquella parte de un proceso que negocia con la comunicacion. Ella contiene el
Usuario de Servicio del proceso, conteniendo funciones para organizar conexiones y
transferencia de informacion. Una Entidad de la Aplicacion tiene un nombre, Ttulo
de la Aplicacion (Application Title), que tiene que se utilizado cuando se establece la
comunicacion.
r
GVA-ELAI-UPM
PFC0075-2003
33
CAPITULO 2. EL ESTADO DE LA TECNICA
Direcci
on de la Presentaci
on (Presentation Address)
Los Ttulos de la Aplicacion son nombres simbolicos para los procesos involucrados
en la comunicacion. En un sistema de red real, la direccion de red tiene que ser
suministrada. A esto se le llama la Direcci
on de la Presentaci
on. Se le llama as porque
el usuario del servicio es la capa de Aplicacion (OSI), el proveedor del servicio, la capa
de Presentacion (OSI) (y niveles mas bajos). La frontera entre ambos niveles es el
punto de acceso network donde los datos son transferidos desde la capa de aplicacion
a las capas de network. Cada punto de acceso en una red tiene una u
nica direccion.
El mapeo del Ttulo de la Aplicacion a la Direccion de la Presentacion no tiene
que ser u
nico, porque la Direccion de la Presentacion es utilizada para la iniciacion
de la conexion, etc. De cualquier manera en el nivel de aplicacion, el Ttulo de la
Aplicacion es usado normalmente para identificar una aplicacion como fuente o destino de informacion en un directorio o catalogo. Si esto no puede ser registrado sin
ambig
uedades la operacion de los sistemas puede llegar a ser un problema.
El formato de la Direccion de la Presentacion depende del protocolo de red utilizado. Los DICOM Networks son realizados en muchos casos utilizando el protocolo
TCP/IP. En este caso la Direccion de la Presentacion es mapeada a un TCP/IP socket. En caso de un protocolo OSI, debe utilizarse un OSI Presentation Service Address
Point (PSAP) valido.
Association Negotiation
La conexion para el intercambio de informacion entre dos Entidades de la Aplicacion es llamada Asociacion (Association). Para una Asociacion unas cuestiones
de comunicacion son fijados como el contexto en el cual la informacion puede tener
cambios. Este contexto, llamado Contexto de la Aplicaci
on (Application Context),
es definido en el estandar DICOM y ambas partes deben estar de acuerdo con la
actuacion conforme a la definicion del contexto.
Un Contexto de la Aplicacion es definido con un UID y durante la iniciacion de
una asociacion este UID es transferido a las partes. Por comparacion del UID de un
Contexto de la Aplicacion, la parte puede decidir si es capaz de manejar la peticion
aceptara el establecimiento de la asociacion o lo rechazara.
de una asociacion. El
El Contexto de la Aplicacion cubre la operatividad global para el intercambio
de informacion. Que tipo de informacion intercambia tendra lugar a traves de la
asociacion que esta definida por las Clases SOP y las Clases de Servicio de estas Clases
SOP. La parte iniciadora de la asociacion propone a la Clase SOP que sera utilizada,
el SCU / SCP para cada Clase SOP y la forma de representacion de la informacion.
34
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Presentation Context
Para cada Clase SOP negociada durante la iniciacion de la Asociacion tiene que
alcanzarse un acuerdo entre los procesos involucrados acerca del transfer syntax usado
entre los procesos. La parte iniciadora propone todos los transfer syntaxes, fijando
el Contexto de la Presentacion para esta Clase SOP. Despues de la negociacion una
Presentation Context para cada Clase SOP aceptada es establecida.
Una Presentation Context es identificada por un n
umero acordado entre las dos
partes. En el contexto de una aplicacion puede existir un n
umero de una Presentation
Context. El n
umero de la Presentation Context identifica la SOP Class para la cual
el intercambio de informacion tiene lugar.
El Contexto de Presentacion esta compuesto por dos UIDs, uno es el Transfer
Syntax, necesario para la posterior transmision del Data Set, y el otro el Abstract
Syntax, necesario para la correcta comunicacion entre las dos partes de la asociacion,
ya que este determina que operacion va a ser realizada. Figura 2.15.
Protocolos de Red
El actual Protocolo de Red tiene que cumplir con los servicios del estandar definidos
para el protocolo OSI. Ver figura 2.16.
r
GVA-ELAI-UPM
PFC0075-2003
35
CAPITULO 2. EL ESTADO DE LA TECNICA
Para la capa de aplicacion dos grupos de servicios tienen que estar disponibles
para una implementacion DICOM: el protocolo de Control de Asociacion (ACSE) y
el protocolo de Mensajes DICOM (DIMSE). ACSE es un estandar del protocolo OSI
y DIMSE pone en practica los servicios DICOM.
El interfaz entre ACSE, DIMSE y la aplicacion, es la Interfaz DICOM como la
descrita en el estandar DICOM. Esta especificacion describe que parametros son
requeridos para cada funcion del ACSE y peticiones DIMSE. El ACSE, DIMSE y
el interfaz DICOM son partes del Contexto de Aplicacion.
El interfaz hacia la aplicacion(API) no es especificado en el estandar, pero depende
de la implementacion. En general este API proporciona funciones para conectarse con
otras aplicaciones, construir o tratar Instancias SOP y transferir estos a una aplicacion
remota.
36
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
2.3.6.
Storage Service Class, que consiste en Clases SOP para cada modalidad de
tipo de imagen: Computed Radiography (CR), Computed Tomography (CT),
Magnetic Resonance (MR), etc. Esta Clase de Servicio especifica el intercambio
r
GVA-ELAI-UPM
PFC0075-2003
37
CAPITULO 2. EL ESTADO DE LA TECNICA
de los datos a traves de la red. No especifica que tiene que hacerse con la imagen,
que tiene que ser gestionada por otras Clases de Servicio.
Query/Retrieve Service Class. Incluye las clases SOP FIND, MOVE y GET
para un n
umero de modelos de peticiones. La FIND puede ser utilizada para
solicitar una coleccion de imagenes. La MOVE y GET pueden ser usadas para
iniciar la transferencia. La actual transferencia se realiza utilizando la Storage
Service Class.
Study Contents Notification, es utilizada para notificar una administracion facil
de una imagen sobre las imagenes creadas durante un estudio y podran ser
utilizadas para iniciar la transferencia de los datos de imagen o para chequear
si todas las imagenes han sido completamente transferidas.
38
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Las imagenes son almacenadas en Media para el intercambio entre dos procesos sin la especificacion sobre el tratamiento, solamente la transferencia de la
informacion.
Las imagenes son almacenadas para mostrarlas como Sesiones de Pelcula. El
proceso de recepcion debe manejar la informacion de la Gestion de la Impresion
en Media, y mantener sobre esta la informacion del estado del progreso del
trabajo de impresion.
El papel en el cual el proceso esta activado en esta Clase de Servicio no esta relacionado con el papel del compa
nero con la situacion de red, pero con las operaciones
sobre los medios de comunicacion. Tres papeles son definidos: el File-set Creator o
FSC, el File-set Reader o FSR y el File-set Updater o FSU, el nombre se refiere a la
operacion permitida.
Los Elementos de Servicio usados en las Clases SOP de esta Clase de Servicio
especifica las operaciones en las instancias de las Clases SOP como un archivo o como
r
GVA-ELAI-UPM
PFC0075-2003
39
CAPITULO 2. EL ESTADO DE LA TECNICA
una direccion completa de un archivo. Los IODs usados con estos servicios definen la
informacion para ser guardados en un archivo.
Esta Clase de Servicio detalla solo la informacion de almacenaje en un archivo,
independientemente del contenido. La excepcion es una Clase de Servicio especial
(Media Storage Directory Storage) la cual maneja informacion sobre el archivo y un
directorio (DICOMDIR).
Otras Clases SOP de Media Storage Service Class son identicas a las Clases SOP
usadas con el Network Storage Service Class para datos de imagen, Detached Patient
Management, Detached Study Management, Detached Result Management y Print
Management Service Classes. Las Clases SOP almacenadas en archivos pueden ser
usadas directamente por la Clase de Servicio de las Clases SOP correspondientes,
usando los servicios de Media Storage Service Class. Ver figura 2.18.
Los procesos de ambos lados deben estar de acuerdo en que informacion es intercambiada por los medios de comunicacion especificando una lista de Clases SOP
y otras cuestiones. Como no existe ning
un mecanismo de negociacion de asociacion,
debe haber un arreglo que se conforma a un Perfil De aplicaci
on.
40
r
GVA-ELAI-UPM
PFC0075-2003
2.3.7.
2.3. ESTANDAR
DICOM
Conectividad
Antes de que las dos implementaciones de DICOM puedan ser conectadas entre
s, algo de investigacion es necesaria si la conexion es posible. Esto alcanza desde el
bajo nivel de conexion fsica hasta la implementacion de la misma Clase de Servicio
en el nivel de aplicacion.
El acercamiento a una conexion network es diferente comparado con un intercambio a traves de media. Durante la negociacion de la Asociacion en un entorno
network un n
umero de detalles pueden todava ser establecidos. En el caso de utilizar
media no es posible y debera ser dirigido de distinto modo.
DICOM solventa esta cuestion utilizando perfiles de sistema (system profiles) para
implementaciones y Perfiles de aplicacion (application Profiles) en un entorno de
intercambio media.
Conformance Statement
Un Perfil de Sistema (System Profile) contiene una lista de las funciones soportadas y limitaciones o extensiones de estas funciones. Juntos forman un perfil que se
debe ajustar al perfil de la parte que tendra que cooperar. Estos perfiles de sistema
son descritos en un documento que debe ser suplido con cada implementacion de
DICOM: la Conformance Statement. Figura 2.19
r
GVA-ELAI-UPM
PFC0075-2003
41
CAPITULO 2. EL ESTADO DE LA TECNICA
Perfiles de Aplicaci
on (Application Profiles)
Para media un perfil de sistema detallado tiene poco sentido porque la correspondencia no tendra lugar antes de que se conecten los sistemas, pero por el momento
el medio es llevado a otro sistema. En este caso ambos sistemas deben garantizar que
se ajustan a un formato generico que habilita la aplicacion que ambos implementan.
Este formato generico es llamado Perfil de la Aplicaci
on. Por ejemplo, un sistema
que genera datos de imagen en un medio debe hacerlo conforme a un Perfil de Aplicacion confirmado. Un sistema utilizando esta imagen puede confiar en este Perfil de
Aplicacion para resultar un exito.
Dos aspectos son importantes: el formato del medio y la extension de la informacion capturada en el medio. Un Perfil de Aplicacion asegura estos dos aspectos y
proporciona un tipo de etiqueta que puede ser adjuntada al sistema involucrado y al
medio que contiene los datos. Figura 2.20
El aspecto fsico del medio alude al formato definido en el estandar DICOM.
42
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
2.3.8.
Est
andar DICOM
El estandar DICOM esta dividido en varias partes, cada una de ellas describiendo
una cuestion importante tal como las Clases de Servicio, los IODs, temas relacionados
con Network y Media, etc. En la figura 2.21 se ve una vision general de la relacion
entre las diferentes partes.
Las partes de DICOM son 13: las 9 primeras son originales y las partes de la 10
a la 13 fueron propuestas mediante suplementos. La figura 2.21 muestra la relacion
entre las partes del estandar. La figura no debe tomarse como jerarqua; la porcion
de la izquierda representa las partes que definen la red y la comunicacion punto por
punto. La porcion derecha de la figura muestra las partes que soportan medios de
almacenamiento removibles. Las partes 1,2,3,5 y 6 son usadas en ambos ambientes.
En este apartado las partes de DICOM son abordadas en el mismo orden que los
temas planteados en los apartados anteriores. Puede ser usada como linea directiva
para empezar a leer las varias partes del estandar DICOM.
r
GVA-ELAI-UPM
PFC0075-2003
43
CAPITULO 2. EL ESTADO DE LA TECNICA
44
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Los dos grupos de menor nivel tratan con el intercambio fsico de datos. En la
Parte 8 las cuestiones de Protocolo de Red (Network Protocol) son descritas, la Parte
9 define la conexion punto-a-punto (point-to-point conexion) (raramente utilizada) y
la Parte 12 define las cuestiones del formato de Physical Media.
Todos los atributos y UIDs definidos por las varias partes del estandar DICOM son
listadas en el Diccionario de Datos (Data Dictionary) (Parte 6). Es el listado completo
de todos los elementos de datos junto con sus nombres numericos (o etiqueta), sus
nombres de texto, cual es su representacion (texto, n
umero de coma flotante, etc.), si
ellos contienen uno o mas tems (la multiplicidad de valor), y que los valores permitidos
estan para esos elementos que pueden contener solo ciertos valores.
Las cuestiones de Conformance son descritas en la Parte 2 incluyendo la manera
en que un Conformance Statement tiene que ser configurado. Los Perfiles de la Aplicaci
on utilizados para la Media exchange son discutidos en la Parte 12 junto con la
Application Profile layout.
La parte 8 define el soporte de red para cambiar Mensajes de DICOM. Actualmente, TCP/IP y protocolos ISO-OSI son soportados, pero la naturaleza del servicio
superior de capa definido en esta parte es tal que se debe posible expandir a otros
protocolos con facilidad relativa. Una vez fuera de la capa superior de DICOM, el
remanente del protocolo de comunicaciones (o TCP / IP u OSI) sigue los patrones
existentes.
r
GVA-ELAI-UPM
PFC0075-2003
45
CAPITULO 2. EL ESTADO DE LA TECNICA
2.3.9.
Instancias SOP de im
agenes DICOM
2.3.10.
Modelo de informaci
on de las im
agenes
46
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Nivel de paciente
El nivel del paciente contiene la identificacion y la informacion demografica de
este al cual el estudio le pertenece. Debido a que puede existir mas de un estudio, el
nivel del paciente es el nivel mas alto (cuando toda la informacion es recogida para
un solo paciente se lleva a una cuenta).
Sin embargo, es de practica normal usar el nivel del estudio para recoger la informacion manejada por varios sistemas para un u
nica respuesta a este estudio.
Nivel de estudio
El nivel de estudio es el nivel mas importante en el modelo de informacion. Un
estudio es el resultado de una contestacion a un cierto tipo de examen medico. Todas
las actividades en un departamento de radiologa se centran en el manejo correcto del
estudio. En un estudio, la informacion de identificacion se guarda y puede contener
referencias a informacion relacionada al mismo estudio en un sistema de administracion.
En general, una respuesta puede envolver procedimientos de diferentes maquinas.
Esto da a lugar a una serie de una o mas imagenes, dependiendo del protocolo definido
por el examen realizado. Todos los datos son recogidos juntos en el mismo estudio
r
GVA-ELAI-UPM
PFC0075-2003
47
CAPITULO 2. EL ESTADO DE LA TECNICA
principal. Un paciente puede tener muchos estudios como resultado de otros realizados
anteriormente.
Nivel de serie
Despues del nivel de estudio todas las imagenes se recogen. El nivel de serie identifica el tipo de aparato que crea las imagenes, la fecha y el tiempo de creacion de la
serie y los detalles del tipo de examen realizado y del equipo usado.
Realizar una lista de los terminos usados en los diferentes aparatos tiene que ser
cuidadosamente considerado. Puede haber palabras que aparentemente signifiquen lo
mismo, pero se usan con diferencias en distintos contextos. Las series siempre son
una coleccion de imagenes que provienen de una u
nico aparato. La forma en que
las imagenes estan agrupadas en series depende del uso medico que se les va a dar.
Como las imagenes son adquiridas por una maquina es menos importante para esta
agrupacion. Sin embargo, varios atributos definiran el tipo de adquisicion y se pueden
mostrar en la visualizacion. En algunos casos la relacion entre las imagenes se define
mediante la forma en que la adquisicion ha tenido lugar.
Cuando las adquisiciones en una secuencia tienen relacion espacial o temporal, las
imagenes resultantes de esta adquisicion pueden ser agrupadas en series. Una serie
nueva debe comenzar cuando la relacion existente entre imagenes ya no existe.
Otro criterio para agrupar imagenes puede ser coger los datos de una u
nica parte
del cuerpo hecho durante un estudio completo. Por ejemplo, cuando un aparato produce un n
umero de imagenes del estomago de un paciente desde diferentes posiciones y momentos, las imagenes pueden ser agrupadas en una serie. Algunos sistemas producen mas de una imagen al hacer una adquisicion de datos. Por ejemplo,
algunos escaneres se hacen con un sistema CT, las imagenes reconstruidas desde
cada escaneamiento son recogidas en series y tienen relacion espacial. El siguiente escaneamiento estara en una nueva serie, porque en muchos casos el proceso de escanear
se hace desde diferentes posiciones.
Tambien, en una serie, una imagen de referencia puede ser incluida como una descripcion de la posicion espacial de las rodajas individuales. Ver figura 2.23. Diferentes
reconstrucciones puede ser guardada en diferentes series.
Para cada tipo de aparato medico hay reglas definiendo los contenidos que una
serie debe describir. Las reglas usadas por un sistema dado son parte de un perfil de
sistema en el estatuto de conformidad DICOM.
48
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Nivel de imagen
El nivel mas bajo del modelo de informacion es el nivel de imagen. Cada imagen
contiene la informacion de adquisicion y posicionamiento al igual que los datos propios
de la imagen. Dependiendo del tipo de aparato, el nivel de imagen contiene datos para
una sola imagen, dos imagenes (sistema de dos planos) o una coleccion de imagenes
cogidas en un corto espacio de tiempo (multiframe images).
El uso de multiframes images guarda la informacion duplicada en niveles mas altos,
pero es solo posible cuando la relacion entre los marcos (frames) pueden ser descritos
de una sola manera. Por ejemplo, los incrementos en los movimientos del sistema
y del tiempo son iguales para todas los marcos. Creando un multiframe images es
mas complejo y gasta mas recursos que creando una imagen u
nica. La relacion entre
marcos, la capacidad del aparato y la carga de datos producidos debera ser usada
para determinar si se debe aplicar una serie de imagenes simples o un multi marco
de imagenes.
2.3.11.
r
GVA-ELAI-UPM
PFC0075-2003
49
CAPITULO 2. EL ESTADO DE LA TECNICA
en este diagrama representa una entidad de informacion (ver IODs) del IOD compuesto. Las relaciones indican los puntos cardinales para cada relacion de la entidad
de informacion usada en una instancia SOP.
Cada instancia de imagen SOP tiene que contener la informacion estructurada de
acuerdo al modelo de informacion DICOM. Cada instancia de imagen SOP (simple
o multimarco) es una instancia compuesta SOP que contiene el arbol completo de
informacion del modelo de informacion. Todas las imagenes en una serie son de un
mismo paciente, estudio y serie; todas las series son del mismo paciente y estudio, etc.
En cada composicion, toda la informacion relacionada con la imagenes esta disponible.
Este formato hace mas facil el intercambio y el manejo (especialmente el almacenamiento) de la informacion pero incremente la carga de datos cuando se transfiere
un estudio completo.
En este caso las entidades de informacion del paciente y del estudio tienen m
ultiples instancias en la coleccion de las instancias SOP. En contraste, las instancias
normalizadas SOP (con entidades de informacion simples) usan referencias a otras
entidades de informacion, perteneciendo un protocolo mas eficiente, pero requiriendo
un manejo mas complejo.
2.3.12.
Relaciones e indentificaci
on
Cuando se recoge un grupo de Image SOP Instances las cuales tienen relacion entre
ellas, pero estan creadas desde diferentes aparatos, es importante ser capaz de marcar
las entidades de informacion en diferentes niveles. Son importantes dos aspectos:
1. Todas las modalidades deben tener un mapa (codigo) consistente de como pasar
de unos datos de imagen a una instancia SOP.
2. Las entidades de informacion individuales deben contener la identificacion suficiente de hacer un correcto marcado de las entidades de informacion equivalente
en otras instancias SOP.
50
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Identificaci
on
Si los datos de imagen tienen que ser almacenados en sistemas los cuales ordenan
los datos examinando el contenido de la informacion de la entidad, debe haber un
consentimiento y un acuerdo para indentificar la informacion de la entidad por todos
los sistemas (aparatos, sistemas de almacenamiento, estaciones de trabajo, etc.) los
cuales manejan la informacion.
Visualizar la informacion es mas amplio que solo ordenar imagenes. La identificacion es tambien usada para acceder a los datos desde otros sistemas de informacion.
Los sistemas de informacion normalmente usan claves que no necesitan ser interpretadas por los seres humanos, pero tienen que ser u
nicos en el ambiente en el que son
usados.
El mecanismo DICOM que se ha definido para estas identificaciones son los UIDs.
Cada una de las entidades de informacion en el modelo de informacion tiene su propia
r
GVA-ELAI-UPM
PFC0075-2003
51
CAPITULO 2. EL ESTADO DE LA TECNICA
UID, excepto para la entidad de informacion del paciente. La forma en que la informacion debe ser identificada se define por otros sistemas de informacion (fuera del
visor DICOM) que tratan con la administracion paciente. En este caso se usa un
identificador ID para el paciente.
Identificaci
on del estudio
Como el estudio de un examen medico realizado por un doctor es el centro de
todas las actividades en un departamento de radiologa, debe ser reflejada en todas
las piezas de informacion las cuales estan relacionadas con el examen realizado.
Para DICOM esta informacion se identifica al nivel de estudio. En la mayora de
los casos el atributo UID de la instancia del estudio (Study Instance UID) identifica la
entidad del estudio de informacion del estudio perteneciente al resultado del examen
del mundo real.
Cuando este UID se usa de una forma consistente por todos los sistemas involucrados, no es difcil relacionar todas las piezas de informacion con los datos de la imagen
en la instancia DICOM SOP. Sin embargo, esto requiere una union entre todos los
sistemas involucrados para transferir la clave del sistema.
A parte de esta union, los UIDs tienen que ser soportados por todos los otros
sistemas, no solo los sistemas involucrados en el manejo de datos de imagenes. Un
sistema que genera los UIDs del estudio juega un mayor rol para distribuir el UID
a otros sistemas involucrados. Normalmente, esto debera hacerse por un Sistema de
Informacion Radiologico (RIS) o por un Sistema de Informacion de Hospital (HIS),
que normalmente puede no siempre soportar el concepto UID.
Cuando el soporte para el UID de la instancia del estudio no esta disponible,
no es posible usar este UID como union a toda la otra informacion. Tiene que ser
reemplazada en esos casos por otras claves. RIS usa actualmente una o mas claves
para acceder a su informacion almacenada, n
umero de registro del estudio, etc. Esas
claves se imprimen en papel que pertenece al estudio. Esta informacion tiene que ser
incluida en la entidad de informacion del estudio y usada como reemplazo al UID del
estudio.
Usar el UID del estudio como union con las partes relacionadas de la informacion es un aspecto importante para proporcionar un modelo de informacion DICOM
consistente, el cual puede ser expandido en otras partes de la informacion en un
departamento de radiologa.
Esta consistencia es muy difcil de mantener cuando el UID del estudio se reemplaza por un RIS o un metodo especfico de identificacion.
52
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Otras identificaciones
A parte de las claves del sistema, los usuarios necesitan acceder a la informacion
y quieren usar identificadores que tengan sentido como el nombre del paciente, su da
de nacimiento, fecha del estudio medico, etc.
Los aparatos medicos tienen que proporcionar una informacion lo mas consistente
posible para permitir una identificacion por parte de los humanos. La informacion de
identificacion puede ser proporcionada por una u
nica fuente cuando una union entre
sistemas es posible.
Por ejemplo, el RIS da el nombre del paciente, su fecha de nacimiento, etc, como
parte de la informacion para realizar un examen medico. Este metodo previene el
error de maquina y permite una forma mas eficiente de funcionamiento.
2.3.13.
Clasificaci
on de los datos de imagen
El modelo de informacion define el modelo jerarquico de las entidades de informacion para dejar claro como la informacion dentro de diferentes instancias SOP pueden
ser agrupadas en diferentes niveles. En este seccion la informacion de la instancia SOP
esta clasificada de acuerdo a las funciones que tiene, pero independientemente de su
lugar dentro del modelo de la informacion. Desde luego, hay una fuerte relacion entre
el proceso de modelado y el proceso de creacion. La siguiente seccion describe la forma
de producir los datos de la imagen.
En la figura 2.25 se muestra una descripcion de la clasificacion y la relacion con
la arquitectura del sistema de un aparato medico. Las diferentes clases son creadas
en diferentes momentos en el tiempo cuando se realiza un examen medico. Cada
subsistema a
nade atributos al resultado final: la instancia de imagen SOP.
Informaci
on del paciente
Esta clase contiene informacion sobre el paciente al que se le realiza un estudio. En
un departamento de radiologa la informacion del paciente se sabe por otras fuentes,
como sistemas de informacion o formularios en papel. Solo tiene que ser registrado
de una manera formal por un n
umero de atributos como nombre del paciente, ID del
paciente, fecha de nacimiento, etc.
La informacion en esta clase es estable, excepto por la correccion de errores de
escritura y cambios de nombre en caso de enlaces matrimoniales, etc. El mantenimien-
r
GVA-ELAI-UPM
PFC0075-2003
53
CAPITULO 2. EL ESTADO DE LA TECNICA
54
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Informaci
on del estudio
La informacion del estudio es una clase con una mezcla de informacion fuente. Por
un lado, la informacion sera suministrada desde un sistema como un RIS (Sistema de
Informacion Radiologico) que identifica el estudio a traves de mas de un sistema. Por
otro lado, el aparato medico a
nadira informacion sobre el paciente en el momento en
que el estudio se realiza. Informacion de otros sistemas incluyen una identificacion
del estudio. Un UID de una instancia de un estudio es la forma mas eficiente de
identificacion, pero tiene desventajas. Un atributo alternativo, llamado n
umero de
acceso, puede ser usado en un sistema RIS. En el caso de que no este disponible un
UID de la instancia del estudio desde fuera de un aparato medico, este tiene que
generar el UID de forma que garantice que es el u
nico en el sistema.
Cuando las imagenes de un estudio se copian desde un almacenamiento local
para un destino remoto, es muy importante que se use el mismo UID de la instancia
del estudio. Esto previene la existencia de imagenes con diferentes identificaciones
provinientes un mismo estudio. Tales imagenes nunca pueden ser recogidas juntas sin
la intervencion de un operador.
Otra informacion suministrada al aparato medico son los nombres de los medicos
solicitantes o la lectura de las imagenes y la informacion del paciente dinamica como
la edad, el peso, la ocupacion, etc.
La informacion incluida localmente por el aparato medico identifica el estudio
proporcionando un valor para el atributo ID del estudio y la fecha y hora actual
del estudio. El ID del estudio es solo relevante por el aparato usado para realizar el
examen medico.
Informaci
on de la serie
La clase de informacion de serie es la primera que es completamente generada por
el aparato medico. En esta clase el tipo de sistema, la localizacion y la identificacion
del sistema es dada. La identificacian de las series consiste de un UID de la instancia
de la serie, que u
nicamente identifica la serie en los datos de la imagen y una serie
en la zona usada ID que puede ser usado para hacer una secuencia con series en un
estudio. Los ID de las series tienen solo un significado para el aparato medico en
s mismo, no hay una regla dada para este uso.
Con la informacion de las series, se suministran mas detalles sobre la forma en
que las series son realizadas, la gente involucrada, la parte del cuerpo examinada, etc.
La parte de la informacion del equipo contiene informacion general sobre el sistema
usado por esta serie. Incluye informacion sobre la localizacion, la identificacion del
r
GVA-ELAI-UPM
PFC0075-2003
55
CAPITULO 2. EL ESTADO DE LA TECNICA
tipo y la serie, cuestiones de calibracion, etc. Estos datos pueden ser compartidos
por series pertenecientes al mismo estudio y realizados mediante el mismo aparato
medico.
Se usa un marco de referencia para agrupar imagenes que tienen relacion espacial
o temporal. Esto puede ser usado para dividir series en partes o a traves de mas de
una serie si se aplica la misma relacion. Tal relacion se identifica por un UID de marco
de referencia compartido entre las imagenes involucradas.
Informaci
on de la aplicaci
on
Los atributos en esta clase dan informacion sobre la imagen contenida en la instancia SOP requerida para el diagnostico y otras aplicaciones. Varios ejemplos, desde
un simple texto a
nadido como comentario, hasta detalles como el contraste, terapia
y dispositivos usados durante el reconocimiento medico.
Otro grupo describe la parte del cuerpo examinada usando valores codificados.
Los ajustes del valor de interes (VOI), en la mayora de los casos llamado anchura
de ventana y centro de ventana (window width y window center), son miembros muy
importantes de esta clase. El VOI es la seleccion fuera de la gama completa de los
valores de pixel que son clnicamente significativos cuando se muestra o se imprime la
imagen. Solo el rango especificado tiene que ser convertido a nivel de grises disponibles.
La informacion que dibuja lneas o agrega el texto a la imagen mostrada puede ser
en forma de matrices que tienen que ser agregadas a la muestra en un visualizador,
o ya aplicada a la matriz de pixel. Sumnistrando la superposicion como una informacion separada de los datos de imagen, la imagen puede ser mostrada con o sin la
superposicion, permitiendo que los datos de imagen puedan ser usados como entradas
para el tratamiento remoto.
Informaci
on adquirida
En esta clase de informacion se guardan los ajustes del equipo de adquisicion. El
grado de informacion depende del tipo de aparato y puede tener un rango desde unos
pocos atributos para un sistema sencillo, a una estructura compleja. Contiene detalles
del sistema de adquisicion como los valores usados de los rayos X por ejemplo.
Las imagenes resultantes de la misma adquisicion pueden ser identificadas con un
n
umero de adquisicion. Este agrupamiento depende del sistema y puede ser parte
de series sencillas, pero una adquisicion sencilla puede tambien resultar en m
ultiples series de imagenes, cada una con diferentes caractersticas. La adquisicion no
56
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Informaci
on de la posici
on
Una clase importante es la informacion dada sobre el posicionamiento de la imagen
dentro del paciente.
Depende del tipo de aparato medico, de la forma en que se describe la matriz de
la imagen posicionada usando terminos sencillos como anterior, posterior, derecha, en
frente, etc. Se debe tener cuidado para asegurar que haya proporcionada informacion
suficiente con la imagen para que no haya visualizaciones ambiguas (sobre todo en
cuestiones de derecha e izquierda).
En una serie que tiene relacion espacial, como puede ser imagenes CT o MR, muchos mas detalles se tienen que suministrar sobre la posicion de las imagenes en el
espacio tridimensional del cuerpo del paciente. Esta informacion permite a sistemas
como planificadores de tratamiento de radioterapia usar el posicionamiento tridimensional para el procesamiento de los datos de las imagenes.
Otro uso de la informacion del posicionamiento es para sistemas de vasculacion
para describir los movimientos dinamicos.
Informaci
on de los datos de las im
agenes
Finalmente, los datos de las imagenes provenientes del sistema de adquisicion y
procesados para producir imagenes visibles en formato digital. Esta clase describe
detalles sobre como los datos de los pxeles deben ser interpretados, como el tama
no
de la matriz de pxeles, el valor representativo de pxel y como estos estan codificados.
Cuando los aparatos medicos son capaces de generar imagenes en color, tiene que
ser suministrada la informacion sobre como los datos son ordenados en diferentes
planos. A parte del formato de la informacion, esta clase contiene los datos de los
pxeles en un marco sencillo, en dos marcos para sistemas de dos planos o en multimarco. Cuando un multimarco se genera por un sistema de dos planos es posible
almacenar los marcos de los dos planos juntos. En este caso los marcos de los dos
planos se almacenan alternados (A-B-A-B-...). Para un multimarco las relaciones de
tiempo entre los marcos individuales se describen mediante otros atributos.
La imagen se identifica u
nicamente por el UID de la imagen. Como una instancia
SOP de una clase de imagen SOP siempre incluye una porcion de la imagen, el
r
GVA-ELAI-UPM
PFC0075-2003
57
CAPITULO 2. EL ESTADO DE LA TECNICA
UID de la imagen se usa tambien como UID de la instancia SOP. Este UID se usa
para identificar la instancia cuando se transfiere o se recupera desde un almacen de
imagenes o para identificar la entidad de la imagen usandola en un arbol jerarquico
de informacion.
2.3.14.
Extensi
on de la informaci
on
58
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
usa el mismo UID que la clase SOP estandar. Las diferencias entre las dos clases
se muestra en el Estatuto de Conformidad.
Clase SOP especializada: cuando las adiciones cumplen con el modelo de informacion, pero la clase ya no es un superconjunto. Como consecuencia, el UID de
la clase SOP estandar puede no ser usado; se debe usar un UID privado para
esta clase SOP. Los socios que manejan las instancias SOP conocen el UID privado y pueden manejar la informacion. Otros no pueden aceptar la clase SOP
durante la negociacion de la asociacion o, cuando se abre un archivo DICOM
desde un medio DICOM.
Clases SOP privadas: no siguen el modelo de informacion DICOM y se usan
en un contexto completamente privado. Usan mecanismos proporcionados por
DICOM para transferir la informacion. Las clases SOP privadas usan UIDs
privados para prevenir usos incorrectos de la informacion.
Si una de las tres clases SOP arriba mencionadas se definen con la intencion de
llegar a ser parte del estandar DICOM, los detalles se publican en el Estatuto de
Conformidad. De otra forma, solo se usan en un ambiente cerrado.
2.3.15.
Tipos de im
agenes
DICOM define un n
umero de tipos de clases de imagenes SOP, dependiendo del
aparato medico que crea los datos de las imagenes. Cada tipo tiene su propio IOD
para a
nadir informacion especfica del aparato a la instancia de la imagen SOP.
Todas las instancias de las imagenes SOP comparten un mnimo juego de informacion que permite a una aplicacion visualizadora manejar las imagenes independientemente de su tipo.
Una clase de imagen SOP esta disponible para encapsular las imagenes que no
estan disponibles en el formato digital y s capturadas en formato de pelcula o de
vdeo.
Tipos gen
ericos de im
agenes
Las instancias de las clases de las imagenes SOP tienen un conjunto basico de
atributos; ver figura 2.26. El conjunto mnimo de atributos requeridos para una instancia de imagen SOP consiste en el siguiente grupo de atributos:
r
GVA-ELAI-UPM
PFC0075-2003
59
CAPITULO 2. EL ESTADO DE LA TECNICA
Este mnimo conjunto permite mostrar los datos de pxel y proporciona la identificacion en el nivel de sistema, para el caso de la instancia SOP para adherirla modelo
de la informacion. A
nadiendo mas informacion al menos para los tres primeros niveles del modelo de informacion, hace mas entendible a la instancia SOP. Los atributos
que identifican la instancia SOP para seres humanos y permiten que la imagen sea
mostrada.
60
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
la instancia SOP para los seres humanos y permiten que la imagen sea visualizada
con los correctos ajustes de ventana son:
Nivel de paciente: nombre, ID, da de nacimiento, sexo.
Nivel de estudio: fecha del estudio, hora, nombre del medico, ID del estudio,
n
umero de acceso.
Nivel de serie: n
umero de serie, fabricante, nombre de la institucion.
Nivel de imagen: n
umero de imagen, tipo de imagen.
Ajustes de presentacion: ancho de ventana, centro de ventana.
Los atributos listados arriba son en la mayora de los casos atributos del tipo 2
(deben ser suministrados, pero pueden faltar) o del tipo 3 (opcionales).
Tipos de im
agenes especiales
El formato generico descrito arriba se usa en la definicion de cada clase SOP,
pero depende del tipo de modalidad, esto se extiende con la informacion entregada
sobre la adquisicion, etc. El n
umero de imagenes especializadas esta creciendo por
la aparicion de nuevas modalidades. Normalmente, las modalidades siguientes tienen
una definicion de la clase SOP de almacenamiento en el estandar DICOM:
Radiografa computada IOD (Computed Radiography IOD), usada por los sistemas radiograficos tradicionales que trabajan con fosforo que brilla al leerse
con sistemas como PCR.
Tomografa computada IOD (Computed Tomography IOD) para escaneres CT.
Para este tipo de aparatos el posicionamiento es importante, para montones de
imagenes, para crear vistas tridimensionales.
Resonancia magnetica IOD (Magnetic Resonance IOD) para sistemas MR. A
parte de la misma informacion que para escaneres CT tambien se da informacion
adicional sobre el protocolo de adquisicion.
Medicina nuclear IOD (Nuclear Medicine IOD) para camaras usan isotopos
radiactivos. Contienen imagenes de especial formato para este tipo de aparatos.
Las imagenes son en multimarco formato.
Ultrasonidos IOD (Ultrasound IOD) para este tipo de equipos. Estos contienen
detalles sobre la posicion y la adquisicion de la imagen. Las imagenes pueden
ser en color y se puede usar el multimarco.
r
GVA-ELAI-UPM
PFC0075-2003
61
CAPITULO 2. EL ESTADO DE LA TECNICA
Angiografa con rayos-X IOD (X-Ray Angiographic IOD) para sistemas digitales cardiologico y basculares. Este formato puede capturar una cadena en
multimarco o imagenes simples.
Radiofluoroscopa de rayos-X IOD (X-Ray Radiofluoroscopic IOD) para sistemas como sistemas angiograficos.
Por cada uno de los IODs, se describe una lista de modulos en el estandar DICOM.
El uso de unos ciertos modulos a veces dependen de capacidades o condiciones de ciertos sistemas. Los modulos se seleccionan, o bien desde un grupo de modulos comunes
usados para todos los IODs de almacenamiento SOP, o bien desde modulos especficos
para solo un tipo de IOD.
Estos modulos contienen atributos especiales para ese tipo de IOD. Esos modulos,
y a veces atributos individuales, los redefinen y extienden para el IOD generico. En
el estandar DICOM los IOD, IOM y los atributos se listan.
62
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
El formato permite la posibilidad de salvar una descarga de pantalla en una modalidad. Este metodo tiene la desventaja que la matriz de la imagen, en la mayora de
los casos, no es cuadrada y contiene la informacion del paciente y la otra informacion
que es duplicada por las cualidades estandares. Cuando esta exhibido sin medidas
especiales, mostrara la imagen con un formato reducido (en la mayora de los otros
casos la zona de visualizacion de la imagen es cuadrada) y mostrara la informacion
del paciente dos veces.
2.3.16.
Procesando imagen
Una tubera del procesamiento de una imagen describe los pasos del proceso que
traducen la informacion adquirida (por X-Ray, SR., ultrasonidos, equipo, etc.) a una
imagen presentada en un vdeo o muestra una pelcula. Algunos de los pasos del proceso dependen del sistema de la adquisicion, otros mejoran la presentacion, o utilizan
una serie de informacion adquirida para crear las imagenes derivadas (substraccion,
imagenes tridimensionales, etc.). Los siguientes pasos del proceso se han distinguido:
Un n
umero de los pasos de proceso son realizados por el sistema de la adquisicion.
Otros pasos de proceso se pueden ejecutar en un sistema distribuido. En este caso
una transferencia de la informacion es necesaria. Esto requiere una definicion de la
informacion y un protocolo entre del ambos sistemas. Dos tipos de intercambio de
informacion pueden ser definidos:
r
GVA-ELAI-UPM
PFC0075-2003
63
CAPITULO 2. EL ESTADO DE LA TECNICA
64
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Conversi
on y selecci
on de los valores del pixel
En un n
umero de situaciones los valores del pixel provistos por los pasos precedentes (adquisicion e intermedio del proceso) tienen que ser utilizados para la transformacion posterior. Esto requiere a veces otra relacion entre los valores de pixel seg
un
lo esperado por los pasos del proceso de la presentacion. Por ejemplo la relacion entre
los valores de pixel estan en una escala logartmica y no proporcional a las medidas
fsicas. Antes de que la conversion a los niveles grises pueda ocurrir un paso del proceso debe ocurrir, basado en los valores provistos junto con los valores del pixel; vease
el cuadro 2.29.
Seg
un algunos usos clnicos la exhibicion de la informacion adquirida tiene que ser
r
GVA-ELAI-UPM
PFC0075-2003
65
CAPITULO 2. EL ESTADO DE LA TECNICA
Figura 2.29: Datos de pixel con la conversion de los valores del pixel
ajustada a un subconjunto de la gama completa de los valores del pixel. El resultado
es la exhibicion de los valores del pixel relevante usnado la escala de nivel de grises.
Este subconjunto se llama una ventana, y se puede especificar por su valor de centro
y el tama
no de la ventana.
Las conversiones y las selecciones antedichas dependen del tipo de de sistemas y
el uso de los datos de la imagen. Algunos sistemas aplican ya estos ajustes a los datos
de la imagen antes de la transferencia. Otros sistemas transfieren los datos originales
de la imagen con una descripcion de las funciones que se aplicaran por el sistema de la
vision. En el primer caso que no hay reajuste posible, es conveniente para el sistema,
produciendo siempre las imagenes para un solo tipo de uso.
Pasos de la Presentaci
on
Los pasos de la presentacion convierten los valores del pixel a una imagen exhibida
en la pantalla o pelcula de video. Estos pasos tienen en cuenta los siguientes puntos:
Los valores del pixel no pueden tener ninguna relacion o valor semantico correcto
(no linear, no escalado, etc.).
Una gama de los valores del pixel debe ser presentada.
La representacion del valor del pixel en la pantalla o la pelcula de video debe
ser perceptualmente correcta.
Para una descripcion del proceso de la presentacion vease la figura 2.30.
Las primeras dos funciones dependen del contenido de la informacion de la imagen
y tienen que ser almacenadas en la Clase SOP. La funcion pasada es dependiente del
66
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
r
GVA-ELAI-UPM
PFC0075-2003
67
CAPITULO 2. EL ESTADO DE LA TECNICA
valora pasos en un lmite de la gama. Si una secuencia de estas tablas del look-up
(LUT) se esta utilizando, baja la calidad de la actual imagen. Tambien no permite
que la composicion de las funciones sea realizada en un paso (prevenir la perdida de
la calidad de la actual imagen). La carencia de las posibilidades para especificar una
funcion no lineal en forma de un formula matematica es una desventaja importante
de las definiciones actuales de DICOM.
Im
agenes Procesadas DICOM
Para las imagenes transferidas con DICOM, se definen un n
umero de modulos que
contienen la informacion para el paso de la presentacion descrita arriba:
M
odulo del pixel de la imagen que contiene los valores de la muestra del pixel, almacenado en una cadena de los datos del pixel, con las cualidades que
describen la codificacion y el formato de la matriz del pixel.
Modalidad LUT (MOD LUT) con una descripcion de la funcion para la conversion. Figura 2.30.
Valor de interes LUT (VOI LUT) con una descripcion de la funcion de seleccionar una ventana en la gama de los valores del pixel. Figura 2.30.
Sobreponga moduloslos cuales agregan la informacion grafica para ser mostrar
que sobrepone la imagen exhibida.
Dependiendo del requerimiento del procesado del modulo MOD LUT, el modulo
VOI LUT o ambos pueden estar presentes al lado del modulo del pixel de la imagen.
Un VOI LUT es muy probable estar presente para poder mostrar correctamente las
imagenes par ciertas aplicaciones clnicas.
La informacion puede contener lneas y crculos para mostrar el campo de interes,
o una bitmap con cadenas de caracteres para anotar la informacion en la imagen
mostrada. Esta informacion se provee como entidad separada. Cuando esta informacion se agrega a los datos del pixel se tienen muchas limitaciones con el uso de los
datos de la imagen. En este caso el valor de algunos de los pixeles se cambia al valor
del recubrimiento.
Paso de decodificar
El proceso de descodificacion de la matriz del pixel desde las cadenas del Cell
Pixel, es utilizando dos grupos de cualidades del Image Pixel Module. Vea la figura
2.31
68
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Una sola muestra del valor del pixel se contiene en una celula de pixel (Cell Pixel).
Ademas del valor de la muestra, otro pixel de informacion puede ser almacenado en el
espacio no ocupado por la celula del pixel. La secuencia de los valores del Sample Pixel
se almacenan en la matriz del pixel con la dimension en la columna, fila, muestras
por atributos del pixel. Cuando se utiliza mas de un plano, la configuracion planar
describe como los valores de la muestra se ordenan en la secuencia de datos del pixel.
Los atributos del Pixel Representation contiene el formato de datos de los valores
de la muestra del pixel: enteros con signo o sin signo.
Paso de Normalizaci
on
Ocurre despues de decodificar la conversion de los valores del pixel significativo,
para un cierto tipo de Clase SOP de la imagen (Image SOP Class). El resultado es
una gama normalizada de los valores del pixel convenientes para la conversion a los
niveles grises y seg
un que espera para ese tipo de modalidad y de su uso clnico.
Por ejemplo, para los Rayos X, la intensidad es proporcional a los valores de pixel,
r
GVA-ELAI-UPM
PFC0075-2003
69
CAPITULO 2. EL ESTADO DE LA TECNICA
para los sistemas CT los valores de la muestra del pixel se convierten a la escala de
Hounsfield, etc.
En caso de que solamente una escala pueda ser utilizada, dos atributos son necesarios describir la funcion:Rescale Slope y Rescale Intercept; ver la figura 2.32
Cuando una conversion no linear tiene que ser aplicada se utiliza el mecanismo de
la tabla del look-up.
Paso de conversi
on a escala de grises
70
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
Paso de la correcci
on del dispositivo
Los valores convertidos de la muestra del pixel tienen que ser corregidos para
alcanzar una comprension correcta de la imagen. Las correcciones son el dispositivo y
el entorno dependiente y tienen que ser determinadas por el calibrado del dispositivo
e incorporando el resultado de la calibracion como funcion de la correccion que se
aplicara a los valores del nivel gris.
Para prevenir la perdida de calidad debido a la ejecucion de las dos o tres funciones
(vease la figura 2.30) por separado, todas las funciones tienen que ser combinadas en
una tabla look-up que convierta los valores almacenados del pixel directamente
en una representacion perceptualmente correcta. Esto, sin embargo, funcionara solamente cuando todas las funciones se describen y no se almacenan matematicamente
en tablas look-up.
r
GVA-ELAI-UPM
PFC0075-2003
71
CAPITULO 2. EL ESTADO DE LA TECNICA
2.3.17.
Aplicaci
on de los Datos de las Imagenes
Sistemas de almacenamiento de im
agenes
Los sistemas de almacenamiento de imagenes usan un n
umero de atributos identificatorios para almacenar las instancias de imagen SOP.
En primer lugar, estos atributos se usan para recoger todos los datos de las
imagenes pertenecientes al mismo estudio. La instancia UID del estudio (Study Instance UID) es el atributo clave. Pero cuando este no se usa consistentemente, se
tienen que usar otros atributos como el ID del paciente, n
umero de acceso, etc.
En segundo lugar, unos atributos pueden ser usados por sistemas que quieren encontrar instancias de imagen SOP en el sistema de almacenamiento. La clave principal
72
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
en este caso es la instancia UID del estudio y la instancia UID de la serie. Son posibles
tambien b
usquedas basadas en el nombre del paciente, fecha del estudio, etc.
Para el uso de sistemas de almacenamiento un valor muy significativo para estos
tipos de atributos se tiene que suministrar por los creadores de la instancia de la
imagen SOP. Los atributos que contiene los parametros de adquisicion y los datos de
la imagen se almacenan pero no tienen significado para un sistema de almacenamiento.
Estaciones de revisi
on
Una estacion de revision es basicamente usada para visualizar las imagenes hechas
en uno o varios aparatos. Recoge o busca las instancias de imagen SOP, en un sistema
de almacenamiento, perteneciente a un cierto estudio. Mostrara la imagen junto a la
informacion del paciente, ajustes de adquisicoon, informacion del diagnostico, etc.
Los ajustes para el proceso de presentacion, como los seleccionados en el aparato de
captura, son muy importantes. Cuando los pasos de presentacion se procesan de forma
correcta, los resultados mostrados deberan ser iguales a los originales mostrados por
el aparato medico de captura de la imagen.
Para informacion adicional de otros sistemas, se usan atributos identificadores
como la instancia UID del estudio.
Estaciones de procesamiento de im
agenes
Las estaciones de trabajo capaces de procesar los datos de las imagenes tienen requerimientos adicionales. Se necesitan los parametros de adquisicion y posicionamiento para la realizacion de pasos adicionales de procesamiento. Dependiendo del tipo
de procesamiento la entrada es un conjunto de imagenes procesadas o no procesadas.
En este caso, en la relacion entre las imagenes, es importante ordenar los datos de las
imagenes de forma correcta para el procesamiento.
Los resultados de este procesamiento son nuevos datos de pxeles que son almacenados en una nueva instancia de imagen SOP que tiene su propio ciclo de vida, en la
mayora de los casos, relaciones con los datos originales usados por la imagen.
r
GVA-ELAI-UPM
PFC0075-2003
73
CAPITULO 2. EL ESTADO DE LA TECNICA
Reutilizaci
on de datos
Una categora final de las aplicaciones es el sistema que ha creado la instancia de
imagen SOP. En este caso los datos antiguos de la imagen pueden ser usados cuando
hay una nueva visita del mismo paciente con el mismo tipo de examien. Los datos
de adquisicion y el posicionamiento pueden ser reutilizados, o la imagen puede ser
visualizada como una referencia para el nuevo examen.
Categoras de aplicaci
on
Como lo mostrado arriba, las exigencias de los sistemas individuales en el ciclo
de vida de una una instancia de imagen SOP son diferentes. Cuando un sistema
produce los datos de la imagen, debe estar alerta de que todos los sistemas que estan
intentando ser parte del ciclo de vida deben recibir suficiente informacion. El estatuto
de conformidad (conformance statement) debe describir, para cada tipo de sistema,
la informacion adecuada y que procesamiento no puede ser aplicado.
Para ayudar a la seleccion de estos tipos de sistemas, los requerimientos pueden
ser divididos en categoras de aplicacion. Una categora alta numerada incluye la
categora baja numerada. Se definen las siguientes categoras:
2.3.18.
El futuro de DICOM
74
r
GVA-ELAI-UPM
PFC0075-2003
2.3. ESTANDAR
DICOM
(CTNS) que trabajan como servidores para retener imagenes y administrar la red.
Los fabricantes conectan a estos CTNS para usar su implementacion del Estandar
de DICOM, y usando el servicio clases, o envos, recibe, inquiere, o imprimen las
imagenes (imprimir sobre la pelcula que requiere un procesamiento mojado no es
factible en el area de diagnostico a causa de los requisitos de tubera). Los fabricantes
pueden escoger tambien enviar imagenes, o recibir imagenes de un fabricante diferente.
Algunos fabricantes pueden cumplir tambien una conexion al equipamiento en el area
Tecnica de documentos de prueba, y algunos pueden mostrar la implementacion de
la interfase HIS/RIS con apoyo del servicio de clases (el servicio de direccion clases).
Mediante un n
umero importante de esfuerzos independientes de implementacion, la
calidad del patron en suplementario hace efectiva la interoperatibilidad, que ya se ha
demostrado. El alcance de la imagen medica se extiende mas alla de las imagenes
radiologicas. Endoscopistas, patologos, dentistas, y dermatologos (por nombrar solo
cuatro justo areas de especialidad) todas trabajan con imagenes como parte de su
practica.
Recientemente, los representantes de las sociedades profesionales de estos grupos
han contado con un grupo de trabajo especial de ACR-NEMA para comenzar planificando, como ellos podran aprovechar del Trabajo de DICOM. El enfoque de DICOM
a objetos orientados a dise
no hace este proceso relativamente directo. Los miembros
de las sociedades profesionales pueden proveer la experiencia sobre la construccion
apropiada de objetos de informacion, y los grupos de ACR-NEMA pueden entonces
ayudar a implementarlos en el estandar de DICOM.
La mayora del nuevo equipamiento cardaco de los laboratorios producen imagenes
digitales, pero como con CT o MR, los fabricantes usan distintos formatos y medios
de almacenaje. El convencional 35 mm de pelcula evita este problema pero no es una
solucion eficaz en funcion de los costos cuando las imagenes estan en forma digital
para comenzar.
El almacenado de la informacion sobre alguna forma de medio removible. Esta es
necesaria a causa de la naturaleza no de red los laboratorios cardiacos y angiograficos,
y a causa de la necesidad de proveer de imagenes de cine a otros especialistas que
pueden un equipo solo. Se ha producido la parte 10 de DICOM que describe el Medio
de Almacenaje y el Formato de Archivos. Esta parte son unos conjunto de definiciones
de medios independiente. El formato de archivo describe como poner un conjunto de
datos de DICOM en un archivo junto con un directorio para indicar el contenido de
tales archivos. El formato de archivo incluye un area llamado Preambulo de Archivo
que es visto primero por el dispositivo que lee el archivo.
Cada aplicacion que necesita grabar archivos en un medio puede requerir medios
diferentes. Por ejemplo, la cardiologa necesita un medio de alta capacidad con acceso
rapido para pelcula de cine de 35 mm. Los especialistas de ultrasonidos no cardiacos,
sin embargo, probablemente no necesitaran tan alta capacidad, aunque ellos necesiten
r
GVA-ELAI-UPM
PFC0075-2003
75
CAPITULO 2. EL ESTADO DE LA TECNICA
2.4.
Conclusiones
76
r
GVA-ELAI-UPM
PFC0075-2003
Captulo 3
Libreras DCMTK de Offis
[KURA]
3.1.
Introducci
on
3.2.
Estandarizaci
on de la Comunicaci
on de Imagenes M
edicas
77
1. El Comit
e DICOM
El Comite DICOM ha publicado el estandar DICOM, que ha llegado a ser el
mas importante estandar de las imagenes medicas.
2. Comit
e Europeo de Normalizaci
on
El Comite Tecnico CEN/TC251 Informatica de la salud es un Comite Europeo para la estandarizacion de modelos de informacion desarrollados por los
sistemas de informacion medica, estandar para el conocimiento de representaciones y terminologias, y para la seguridad y porteccion de las imagenes y procesamiento de se
nales en medicina.
3. Organizaci
on internacional para la estandarizaci
on
El Comite ISO ISO/TC215 Informatica de la salud fue fundada en 1998 con
un alcance similar al de CEN/TC252, pero no limitado a Europa solo. En este
Comite, los modelos para los sistemas de informacion medica, as como los
estandares para el conocimiento de la representacion, terminologa, seguridad
en medicina seran desarrollados, basado en parte en los estandares de CEN.
3.3.
Descripci
on de DICOM seg
un Offis
La adquisicion de imagenes por aparatos, datos de imagenes, estaciones de trabajo, etc. de diferentes vendedores se pueden conectar en una infraestructura com
un
integrada con otros sistemas de informacion.
DICOM facilita el intercambio y procesamiento de imagenes medicas en forma
digital, as la informacion puede ser intercambiada entre hospitales, clnicas,. . .
DICOM es un estandar para una interoperatividad entre aparatos y aplicaciones,
es mas que un sistema de intercambio de imagenes medicas:
78
r
GVA-ELAI-UPM
PFC0075-2003
DE DICOM SEGUN
OFFIS
3.3. DESCRIPCION
3.3.1.
3.3.2.
Servicios de Red
3.3.3.
r
GVA-ELAI-UPM
PFC0075-2003
79
3.3.4.
Declaraci
on de Conformidad
DICOM requiere que una Declaracion de Conformidad (Conformance Statement) sea escrita para cada dispositivo o aplicacion desarrollada con DICOM. El
formato y el contenido de esta declaracion son definidos en el estandar. Esto explica
que servicios DICOM y opciones son soportados, que extensiones y particularidades
han sido puestas en practica por el vendedor, y como el dispositivo se comunica con
otros sistemas DICOM. En la teora, comparando dos declaraciones de conformidad
permite determinar si dos dispositivos DICOM son capaces de comunicarse el uno
con otro. En la practica, sin embargo, las declaraciones de conformidad son solo comprensibles para expertos y son con frecuencia inadecuados.
DICOM ha llegado a ser un indispensable componente para la integracion de
sistemas de imagenes digitales en medicina. DICOM ofrece soluciones para una multitud de comunicaciones relacinados con las aplicaciones. La palabra DICOM por
si misma no garantiza una integracion de enchufar y listo de todos los sistemas de
informacion de un hospital. Esto requiere una combinacion cuidadosa de todas las
soluciones parciales ofrecidas por DICOM.
3.4.
Libreras DCMTK
80
r
GVA-ELAI-UPM
PFC0075-2003
son un completo codigo fuente y han sido escritas en una mezcla de ANSI C y
C++. El Toolkit del DCMTK es un software libre y se puede descargar de la pagina
(http://dicom.offis.de/dcmtk.php.en).
DCMTK ha sido usado en numerosas demostraciones DICOM como proovedor
central, vendedor independiente, almacenaje de imagen y servidores worklist. Es usado
por hospitales y empresas en todo el mundo para una amplia variedad de propositos
desde ser una herramienta para pruebas de productos, a ser un componente basico
para proyectos de investigacion, prototipos y productos comerciales.
El software DCMTK puede ser compilado bajo el Windows NT o una amplia gama
de sistemas operativos Unix que incluyen Linux, Solaris, OSF/1, IRIX, FreeBSD y
MacOS X. Todo lo necesario para la configuracion y los makefiles son sumnirados. La
pagina oficial de Offis es www.offis.de
3.4.1.
Instalaci
on de libreras
El archivo necesario para la instalacion del Toolkit de Offis, depende del sistema operativo que estemos utilizando, si es Windows el archivo a descargar es
dcmtk351.zip, y si es un sistema UNIX es dcmtk351.tar.gz. La instalacion descrita
esta basada en el sistema Windows, bajo el entorno Visual C++.
Para realizar la instalacion de DCMTK hay que seguir unos pasos:
r
GVA-ELAI-UPM
PFC0075-2003
81
Este Toolkit tiene diferentes funciones basadas en el estandar Dicom. Las funciones
son agrupadas en carpetas dependiendo de la funcion que desempe
nen. Vease la figura
3.1.
82
r
GVA-ELAI-UPM
PFC0075-2003
3.4.2.
Dcmnet
Esta carpeta tiene las funciones para la conexion entre varias maquinas para crear
una asociacion entre ellas y poder transmitir los datos de los objetos DICOM.
Echoscu: Esta aplicacion implementa un Service Class User (SCU) para la verificacion SOP Class. Enva un mensage Dicom C-ECHO a un Service Class
Provider (SCP) y espera una respuesta.
Findscu: Esta aplicacion implementa un Service Class Query/Rerieve (peticion/recuperacion) y un Service Class Basic Worklist Management. Solo soporta
el mensage Dicom C-FIND, que enva una peticion al SCP y espera respuesta.
Movescu: Esta aplicacion implementa un SCP para el Service Class Query/Retrieve
y un SCU para el Storage Service Class. Para usar la funcionalidad Retrieve
(Recuperacion) usa el mensage Dicom C-MOVE que enva una peticion al SCP y
espera respuesta. El SCP aceptara la asociacion para recibir imagenes enviadas
como resultado de la peticion C-MOVE. El termino MOVE es poco apropiado,
ya que lo que hace es una copia de la imagen, la imagen nunca se borra del SCP.
Storescp: Implementa un Service Class Provider (SCP) para el Storage Service Class. Se pone a la escucha sobre un especfico puerto TCP/IP, para las
peticiones de asociacion que puedan llegar de un Storage SCU y puede recibir
imagenes seg
un el Storage Service Class.
Storescu: Implementa un Service Class User (SCU) para el Storage Service
r
GVA-ELAI-UPM
PFC0075-2003
83
Aplicaci
on para ver la conectividad entre dos m
aquinas
Esta aplicacion es realizada sobre dos maquinas, una sera Galileo que actuara de
SCP y otra sera Gauss que sera el SCU. Pondremos la opcion -v la cual nos dira en
todo momento que asociacion se esta realizando, dando detalles sobre ella.
Paso 1o : Se realiza una aplicacion Dicom Storage/Verification Service Class Provider.
Un puerto se pone a la escucha (el puerto 104 es el mas utilizado en Dicom) para la
llegada de asociaciones.
Paso 2o : La siguiente instruccion es para comenzar una aplicacion Dicom Verification Service Class User. Esto intenta construir una asociacion Dicom con una aplicacion que corra sobre Galileo, conectandolos por el puerto 104. Gauss enviara una
peticion C-ECHO y estara a la espera de una respuesta C-ECHO de Galileo. Esto es
solo para verificar que hay conexion entre las dos maquinas.
Paso3o : Se enva una imagen Dicom a Galileo (SCP), volviendo a intentar realizar
una asociacion Dicom con una aplicacion que corra sobre Galileo. Es enviada una
peticion C-STORE que contiene una imagen Dicom craneo.dcm y se espera una
respuesta C-STORE de Galileo.
84
r
GVA-ELAI-UPM
PFC0075-2003
3.4.3.
Dcmjpeg
Esta carpeta tiene las funciones para la compresion con y sin perdidas de imagenes
jpeg.
3.4.4.
DicomScope
Browser (Navegador de estudios): El cual es la base de datos local de la aplicacion donde se encuentran los estudios (imagenes, structured reports,...) de la
aplicacion.
Viewer: Para tratar y mostrar imagenes Dicom, imagenes de escalas de grises,
estados de presentacion e informes estructurados.
Print: Administra e incluye los estudios para su impresion.
Process log: Muestra los procesos que se han llevado a cabo en la transmision
de archivos Dicom.
1
2
Presentation states
Structured Reports
r
GVA-ELAI-UPM
PFC0075-2003
85
Instalaci
on
Es necesario para la instalacion un sistema compatible con Java y Windows 32
bits, para esto ha y que descargar de internet la Maquina Virtual de Java. Antes de la
instalacion del DicomScope es necesaria la instalacion de Java 2 SDK o JRE(Java 2
Runtime Environment), para conseguir esto, se puede bajar de la pagina www.offis.de.
Una vez realizada esta tarea tan solo hay que ejecutar Setup y seguir las instrucciones
dadas.
Browser
Es la base de datos del DicomScope donde se almacenan los estudios Dicom. Tiene
una estructura de arbol en la que cada estudio es una rama, y puede tener varias ramas
a su vez, puede tener imagenes, informes estructurados, imagenes de escalas de grises
y estados de presentacion.
86
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
87
GAUSS
Type = Storage
Aetitle = Storage
Hostname = Galileo
MaxPDU = 32768
Port = 10004
ImplicitOnly = false
DisableNewVRs = false
Viewer
Todas las instancias Dicom que se carguan, pasan a verse en el Viewer. Es una herramienta para tratar las imagenes Dicom y cambiar y editar informes estructurados,
88
r
GVA-ELAI-UPM
PFC0075-2003
Print
Pueden ser enviadas imagenes Dicom a imprimir desde el Browser o la imagen
que se visualiza en el Viewer. Esto lleva la imagen al Print en el que se visualiza la
imagen que se va a imprimir. Figura 3.5
Process Log
Se pueden ver los procesos se producen en la transmision de archivos Dicom. Al
iniciar el DicomScope se ve que hay dos procesos que estan realizandose. Figura 3.6
Uno es para que el DicomScope sirva como receptor de instancias Dicom con
transmision insegura, sin utilizar TLS. Este proceso utiliza la orden C-STORESCP,
con esto recibe y guarda en la base de datos los archivos Dicom mandados a
este equipo, utilizando el puerto 10004.
El otro proceso recibe las instancias Dicom utilizando TLS, de esta forma la
transmision de datos es segura. Tambien utiliza la orden C-STORESCP y el
puerto elegido es el 10007.
r
GVA-ELAI-UPM
PFC0075-2003
89
3.5.
Conclusiones
90
r
GVA-ELAI-UPM
PFC0075-2003
Captulo 4
Programaci
on en JAVA
[BOBA00] [BOBA01] [LEMA] [PAJ] [JDK]
4.1.
Introducci
on
91
EN JAVA
CAPITULO 4. PROGRAMACION
4.2.
Instalaci
on de la JVM
Hay dos instalaciones posibles de la JVM, o bien la instalacion del JRE2 , la cual
sirve para que se puedan ejecutar las apliaciones desarrolladas en Java pero no posee
2
92
r
GVA-ELAI-UPM
PFC0075-2003
DE LA JVM
4.2. INSTALACION
C:\J2SDK1.4.1_03\BIN;
3. Para crear el Classpath, en variables del sistema dar a Nueva. . . y escribir en
nombre de variable:
CLASSPATH
y en valor de variable el camino hasta la carpeta lib donde esta dt.jar que son
las clases del JDK:
C:\j2sdk1.4.1_03\lib\dt.jar;.;
3
Para la versi
on 1.4.1
r
GVA-ELAI-UPM
PFC0075-2003
93
EN JAVA
CAPITULO 4. PROGRAMACION
el valor de ;.; es para poder compilar cualquier fichero fuente desde cualquier
directorio y no deba ser desde el directorio donde esta el compilador.
4.3.
El compilador de Java
94
JDK para las antiguas versiones y SDK para las nuevas versiones
r
GVA-ELAI-UPM
PFC0075-2003
4.4.
4.4.1.
r
GVA-ELAI-UPM
PFC0075-2003
95
EN JAVA
CAPITULO 4. PROGRAMACION
4.4.2.
Identificadores
Los identificadores se utilizan como nombres de clase, metodo y variable. Un identificador puede ser cualquier sentencia descriptiva de letras en may
uscula o min
uscula,
n
umeros y los smbolos (_) y ($). Java diferencia entre may
usculas y min
usculas, lo
que significa que VALOR es un identificador diferente de Valor.
4.4.3.
Las palabras clave reservadas son identificadores especiales que el lenguaje Java
se ha reservado para controlar como esta definido su programa. Se utilizan para identificar los tipos, modificadores y mecanismos para control de secuencia incorporados.
Estas palabras clave solo se pueden utilizar para su proposito original y no se pueden
utilizar como identificadores de nombres de variable, clase o metodo.Vease la lista 4.4
4.4.4.
Variables
El tipo puede ser: byte, short, int, long, char, float, double, boolean o el nombre
de una clase o interfaz.
96
r
GVA-ELAI-UPM
PFC0075-2003
Los bloques de sentencias compuestas en Java se delimitan con dos llaves . Las
variables de Java solo son validas desde el punto donde estan declaradas hasta el final
de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas y cada una puede contener su propio conjunto de declaraciones de variables
locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una
de un ambito superior.
Tipos
Enteros que son todos los tipos numericos de Java son valores con signo. Esta
ausencia de signo reduce el n
umero de tipos de entero a cuatro:
byte es un tipo de 8 bits con signo. Su rango comprende desde -128 a 127.Su
declaracion puede ser:
byte b;
byte c = 0x55;
short es un tipo de 16 bits con signo. Su rango comprende desde -32768 a
32767. Declaracion:
short s;
short t = 0x55aa;
int es un tipo de 32 bits con signo. Su rango comprende desde -2.147.483.648
a 2.147.483.647. Es el tipo mas utilizado habitualmente para almacenar
valores enteros simples.
int n;
int m = 10;
long es un tipo de 64 bits con signo. Hay algunas ocasiones en las que
un tipo int no es lo suficientemente grande como para guardar un valor
deseado.
long j;
Los n
umeros en coma flotante, tambien conocidos como n
umeros reales en otros
lenguajes, se utilizan cuando se calculan funciones que requieren precision fraccionaria. Hay dos clases de tipos en coma flotante, float y double:
float utiliza 32 bits para almacenar un valor.
float a;
float b = 10.5;
double utiliza 64 bits para almacenar un valor.
double p;
Logico o booleano, utiliza 1 bit, y solo puede tener dos valores TRUE o FALSE
r
GVA-ELAI-UPM
PFC0075-2003
97
EN JAVA
CAPITULO 4. PROGRAMACION
boolean p;
Caracteres, dado que Java utiliza Unicode para representar los caracteres de
una cadena, el tipo char es de 16 bits sin signo.
char a = h;
Conversiones
Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar
ese valor en una variable de un tipo diferente. En algunos tipos es posible almacenar
simplemente el valor sin una conversion de tipos; lo que se denomina conversion
automatica. Esto solo es posible en Java si el compilador reconoce que la variable
destino tiene la suficiente precision para contener el valor origen, como almacenar un
valor byte en una variable int. A esto se le llama ensanchamiento o promocion, dado
que el tipo mas peque
no se ensancha o promociona al tipo compatible mas grande. Si
por el contrario, se desea asignar un valor de variable int a una variable byte se necesita
realizar una conversion de tipos explcita. A esto se le llama estrechamiento, dado que
se estrecha explcitamente el valor para que quepa en el destino. La conversion de un
tipo se realiza poniendo delante un nombre de tipo entre parentesis.
int a = 100;
byte b = (byte) a;
4.4.5.
Matrices o vectores
Las matrices son un tipo especial que agrupa un conjunto de variables del mismo
tipo. Si se desea crear una matriz de doce enteros, se crea un tipo especial, que es
una matriz de int.
int days[];
Para las matrices, hay un valor especial llamado null, que representa una matriz sin
ning
un valor. Se debe utilizar un operador especial, new (nuevo), para asignar el
espacio de una matriz. Para utilizar el operador new se debe promocionar un tipo
y un n
umero entero no negativo de elementos a asignar.
98
r
GVA-ELAI-UPM
PFC0075-2003
4.5.
4.5. OPERADORES
Operadores
Los operadores de Java son caracteres especiales que le dicen al compilador que
se desea realizar una operacion sobre algunos operandos.
4.5.1.
Operadores aritm
eticos
Operadores aritm
eticos unitarios
Preincremento: ++x
Postincremento: x++
Predecremento: - -x
Postdecremento: x- -
4.5.2.
Operadores de asignaci
on
normal: x = y
adiccion: x+=y o x=x+y
resta: x-=y o x=x-y
multiplicacion: x*=y o x=x*y
division: x/=y o x=x/y
r
GVA-ELAI-UPM
PFC0075-2003
99
EN JAVA
CAPITULO 4. PROGRAMACION
4.5.3.
Los tipos numericos enteros, long, int, short, char y byte tienen un conjunto adicional de operadores que pueden modificar e inspeccionar los bits que componen sus
valores.
4.5.4.
Operadores relacionales
Para comparar dos valores, Java tiene el siguiente conjunto de operadores relacionales
que describen igualdad y ordenamiento. Ver figura 4.5
100
r
GVA-ELAI-UPM
PFC0075-2003
4.5.5.
Operadores l
ogicos booleanos
Todos los operadores logicos booleanos combinan dos valores boolean para dar
como resultado un valor boolean. Ver 4.6
4.6.
4.6.1.
Instrucci
on condicional if-else
r
GVA-ELAI-UPM
PFC0075-2003
101
EN JAVA
CAPITULO 4. PROGRAMACION
if ( expresi
on-booleana ) sentencia1; [ else sentencia2; ]}
La clausula else es opcional. Cada una de las sentencias puede ser una sentencia
compuesta encerrada entre llaves, { }. Una expresion-booleana es cualquier expresion que devuelve un valor boolean. Podra ser una variable simple declarada como
boolean.
boolean datosdisponibles;
if (datosdisponibles)
ProcesarDatos();
else
esperarAMasDatos();
4.6.2.
Instrucci
on condicional switch
switch ( expresi
on ){
case valor1:
instrucciones;
break;
case valor2:
instrucciones;
break;
default:
}
El valor de expresion se compara con cada uno de los valores literales de las sentencias case. Si coincide con alguno, se ejecuta el codigo que sigue a la sentencia case.
Si no coincide con ninguno de ellos, entonces se ejecuta la sentencia default (por defecto). La sentencia default es opcional. La sentencia break, comentada anteriormente,
hace, en este caso, que la ejecucion salte al final del switch. Si no se pone el break, la
ejecucion continuara en el siguiente case. . La sentencia break de Java esta dise
nada
para cubrir aquellos casos en los que saltar arbitrariamente a una porcion de codigo
es una constuccion valiosa y legtima para el control del flujo. El termino break se
refiere al acto de salirse de un bloque de codigo. Le dice al interprete que retome la
ejecucion pasado el final del bloque.
102
r
GVA-ELAI-UPM
PFC0075-2003
4.6.3.
Bucles
Bucle while
Ejecuta una sentencia repetidamente mientras una expresion booleana sea verdadera. Esta es su forma general:
[ inicializaci
on; ]
while ( terminaci
on ) {
cuerpo;
[ iteraci
on; ]
}
Las partes inicializacion e iteracion son opcionales, y mientras la expresion terminacion devuelva un valor true, la sentencia cuerpo continuara ejecutandose.
Bucle do-while
La contruccion do-while se utiliza cuando se desea ejecutar el cuerpo de un
bucle while al menos una vez, incluso si la expresion booleana tiene el valor false la
primera vez. Es decir si se desea evaluar la expresion de terminacion al final del bucle
en vez de al principio como en el while.
[ inicializaci
on; ]
do { cuerpo; [ iteraci
on; ] } while ( terminaci
on );
r
GVA-ELAI-UPM
PFC0075-2003
103
EN JAVA
CAPITULO 4. PROGRAMACION
Bucle for
La sentencia for es una forma compacta de expresar un bucle.
for ( inicalizaci
on; terminaci
on; iteraci
on ) cuerpo;
Si las condiciones iniciales no provocan que la terminacion devuelva true la primera
vez, entonces la sentencia cuerpo e iteracion no se ejecutaran nunca. Ejemplo de un
bucle for:
for (int i = 1; i <= 10; i++)
System.out.println(i = + i);
4.6.4.
Otras instrucciones
return
Java utiliza una forma de subrutina llamada metodo para implementar una interfaz de procedimiento a las clases de objetos. En cualquier momento dentro de un
metodo, se puede utilizar la sentencia return para que la ejecucion salte y vuelva al
punto donde se llamo al metodo. Se utiliza para acarbar los metodos. Si es un metodo
void, la sentencia sera:
return;
continue
Del mismo modo que se desea salir prematuramente de un bucle (con break),
se podra desear continuar en el bucle, pero dejar de procesar el resto de codigo en
esta interacion en concreto. La sentencia continue de Java salta del cuerpo de bucle,
pero permaneciendo en el bucle.
for (int i = 0; i < 10; i++){
System.out.print(i + );
if (i % 2 == 0)
continue;
System.out.println( );
}
104
r
GVA-ELAI-UPM
PFC0075-2003
4.7.
4.7. CLASES
Clases
class punto{
}
Las clases de Java tpicas incluiran variables y metodos de instancia. Los programas
en Java completos constan por lo general de varias clases de Java de distintos archivos
fuente. Una clase define la estructura de un objeto y su interfaz funcional, conocida
como metodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones
de clase para crear instancias de las clases, que son objetos reales. La forma general
de una clase se muestra a continuacion.
r
GVA-ELAI-UPM
PFC0075-2003
105
EN JAVA
CAPITULO 4. PROGRAMACION
4.7.1.
Referencias a objetos
Point p; //Aqu
la variable p tiene un valor null.
4.7.2.
Los datos se encapsulan dentro de una clase declarando las variables dentro de las
llaves de apertura y cierre de la declaracion de la clase. A las variables que se declaran
en este ambito y fuera del ambito de un metodo concreto se las conoce como variables
de instancia. Este ejemplo declara una clase de nombre Point, con dos variables de
instancia enteras llamadas x e y.
class Point {
int x, y;
}
4.7.3.
Operador new
106
r
GVA-ELAI-UPM
PFC0075-2003
4.7. CLASES
4.7.4.
Operador(.)
El operador punto se utiliza para acceder a las variables de instancia y los metodos
contenidos en un objeto. Esta es la forma general de acceder a las variables de instancia
utilizando el operador punto.
p.x = 10;
p.y = 20;
System.out.println("x = " + p.x + " y = " + p.y);
4.7.5.
Declaraci
on de m
etodos
Los metodos son subrutinas unidas a una definicion de una clase especfica. Se
declaran dentro de una definicion de clase al mismo nivel que las variables de instancia.
Se debe llamar a los metodos en el contexto de una instancia concreta de esa clase.
En la declaracion de los metodos se define que devuelve un valor de un tipo
concreto y que tiene un conjunto de parametros de entrada.
tipo nombre_de_m
etodo ( lista_formal_de_par
ametros ) {
cuerpo_del_m
etodo;
}
Se podra crear un metodo en la clase Point que inicialice las variables de instancia
de la forma siguiente:
clase Point {
int x, y;
void init(int x, int y) {
this.x = x;
this.y = y;
}
}
r
GVA-ELAI-UPM
PFC0075-2003
107
EN JAVA
CAPITULO 4. PROGRAMACION
El m
etodo main()
Dado que no hay funciones globales en Java, se deba idear alguna manera de
iniciar un programa, de ah el sentido del metodo main, a partir de este metodo
es donde empiezan los programas. Esto es un concepto perdido en la creacion de
interfaces graficas. El metodo main es simplemente un lugar de inicio para que el
interprete comience. Un programa complejo tendra docenas de clases, y solo una de
ellas necesitara tener un metodo main.
4.7.6.
Llamada a m
etodos
referencia_a_objeto . nombre_de_m
etodo ( lista_de_par
ametros );
En este caso, se puede llamar al metodo init sobre cualquier objeto Point.
4.7.7.
Constructores
Las clases pueden implementar un metodo especial llamado constructor. Un constructor es un metodo que inicializa un objeto inmediatamente despues de su creacion.
Tienen exactamente el mismo nombre de la clase en la que residen; de hecho no se
puede tener ning
un otro metodo que comparta su nombre con su clase. Una vez
definido, se llama automaticamente al constructor despues de crear el objeto, antes
de que termine el operador new.
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
108
r
GVA-ELAI-UPM
PFC0075-2003
4.7. CLASES
class PointCreate {
public static void main (String args[]) {
Point p = new Point(10, 20);
System.out.println("x = " + p.x + " y = " + p.y);
}
}
4.7.8.
Sobrecarga de m
etodos
4.7.9.
Operador this
Este
es un operador que utilizan las clases para hacerse referencias a s mismas. De
esta forma un objeto siempre puede tener referencias a sus variables. Muy utilizado
en los constructores.
r
GVA-ELAI-UPM
PFC0075-2003
109
EN JAVA
CAPITULO 4. PROGRAMACION
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
Point() {
this(-1, -1);
}
}
4.7.10.
Herencia
La herencia es un concepto que relaciona clases una encima de otra de un manera jerarquica. Esto permite que los descendientes de una clase hereden todas las
variables y metodos de sus ascendientes, ademas de crear los suyos propios. A estos
descendientes se les llama subclases. Al padre inmediato de una clase se le llama su
superclase.
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
Point3D() {
this(-1, -1, -1);
}
}
La palabra clave extends se utiliza para indicar que se desea crear una subclase
de Point. No se necesita declarar las variables x e y en Point3D porque se haban
heredado de Point. Todas las variables x, y, z estan en el mismo ambito desde la
perspectiva de una instancia de Point3D.
super
Hay una variable especial en Java llamada super, que se refiere directamente a
los constructores de la superclase. Este ejemplo define una nueva version de Point3D
110
r
GVA-ELAI-UPM
PFC0075-2003
4.7. CLASES
final
Todos los metodos y las variables de instancia se pueden sobrescribir por defecto.
Si se desea declarar que ya no se quiere permitir que las subclases sobrescriban las
variables o metodos, estos se pueden declarar como final. El modificador de tipo final
implica que todas las referencias futuras a este elemento se basaran en esta definicion.
Se puede utilizar final como modificador en declaraciones de metodo cuando se desea
no permitir que las subclases sobrescriban un metodo concreto.
static
A veces se desea crear un metodo que se utilize fuera del contexto de cualquier
instancia. Todo lo que se tiene que hacer es declarar estos metodos como static
(estatico). Los metodos estaticos solo pueden llamar a otros metodos static directamente, y no se pueden referir a this o super de ninguna manera. Las variables tambien
se pueden declarar como static, pero debe ser consciente que es equivalente a declararlas como variables globales, que son accesibles desde cualquier fragmento de codigo.
Se puede declarar un bloque static que se ejecuta una sola vez si se necesitan realizar
calculos para inializar las variables static.
abstract
Las clases abstractas son aquellas cuya descripcion es incompleta. Se definen utilizando la palabra reservada abstract. No proporcionan la implementacion de todos
sus metodos. Los metodos no implementados se declaran como abstract. Una clase
con un metodo abstracto tiene que declararse como abstract. Una clase abstracta no
puede instanciarse, es decir, no pueden crearse objetos de esa clase.
r
GVA-ELAI-UPM
PFC0075-2003
111
EN JAVA
CAPITULO 4. PROGRAMACION
4.8.
4.8.1.
Paquetes e interfaces
Paquetes
Sentencia package
Lo primero que se permite en un archivo Java es una sentencia package, que le dice
al compilador en que paquete se deberan definir las clases incluidas. Si se omite la
sentencia package, las clase terminan en el paquete por defecto, que no tiene nombre.
El compilador Java utiliza directorios de sistema de archivos para almacenar paquetes.
Si se declara que una clase esta en dentro de un paquete llamado MiPaquete, entonces
el archivo fuente de esa clase se debe almacenar en un directorio llamado MiPaquete.
package nombrePaquete; //fichero como parte de un paquete
Sentencia import
Lo siguiente que se pone despues de una sentencia package y antes de las definiciones de clase en un archivo fuente en Java puede ser una lista de sentencias import.
Todas las clases interesantes estan almacenadas en alg
un paquete con nombre. Para
no tener que introducir el largo nombre de trayecto de paquete para cada clase, Java
incluye la sentencia import para que se puedan ver ciertas clases o paquetes enteros.
La forma general de la sentencia import:
import paquete1.[ paquete2 ].( nombre_clase | * );
paquete1 es el nombre de un paquete de alto nivel, paquete2 es el nombre de
un paquete opcional contenido en el paquete exterior separado por un punto (.). No
hay ning
un lmite practico a la profundidad de la jerarqua de paquetes. Finalmente,
nombre_clase explcito o un asterisco (*) que indica que el compilador Java debera
buscar este paquete completo.
import java.util.Date;
import java.io.*;
112
r
GVA-ELAI-UPM
PFC0075-2003
4.8.2.
Protecci
on de accesos
4.8.3.
Interfaces
Las interfaces son como las clases, pero sin variables de instancia y con metodos
declarados sin cuerpo. Las clases pueden inplementar varias interfaces. Para implementar una interfaz, todo lo que necesita una clase es una implementacion del conjunto completo de metodos de la interfaz. Las interfaces estan en una jerarqua distinta
de la de las clases, por lo que es posible que varias clases que no tengan la mas mnima relacion en cuanto a la jerarqua de clases implementen la misma interfaz. Por
defecto todos sus metodos son p
ublicos y abstractos, y sus atributos son p
ublicos y
constantes. Los metodos que se declaran no tienen sentencias de cuerpo. Un ejemplo
de una interfaz es:
interface Callback {
void callback(int param);
}
r
GVA-ELAI-UPM
PFC0075-2003
113
EN JAVA
CAPITULO 4. PROGRAMACION
4.9.
Gesti
on de cadenas
Una cadena es una secuencia de caracteres. Las cadenas son una parte fundamental
de la mayora de los programas, as pues Java tiene varias caractersticas incorporadas
que facilitan la manipulacion de cadenas.
Java tiene una clase incorporada en el paquete java.lang que encapsula las estructuras de datos de una cadena. Esta clase, llamada String es la representacion
como objeto de una matriz de caracteres que no se puede cambiar.
4.9.1.
Constructores
Como con todas las otros clases, se pueden crear instancias de String con el operador new.
String s = new String();
Este ejemplo crea una instancia de String sin caracteres en ella. Para crear un
String inicializado con caracteres hay que pasarle una matriz de char al constructor.
char chars[] = { a,b,c};
String s = new String(chars); // s es la cadena "abc"
La mejor forma en Java de inicializar un String es:
String s = "mejor";
4.9.2.
M
etodos de String
length
La clase String ademas tiene sus propios metodos, uno de los mas habituales es
length, que devuelve el n
umero de caracteres de una cadena.
String s = "abc";
System.out.println(s.length()); // imprime 3
114
r
GVA-ELAI-UPM
PFC0075-2003
DE CADENAS
4.9. GESTION
Concatenaci
on
El u
nico operador que utiliza Java es + , y en los objetos String. El + act
ua como
operador de concatenacion en este caso en concreto para mejorar la legibilidad, por
ser operacion muy com
un.
String s = "El tiene " + edad + " a~
nos";
Comparaci
on de cadenas
Si se desean comparar dos cadenas para ver si son iguales, puede utilizar el metodo equals() de String. Devuelve true si las cadenas de caracteres comparadas son
iguales.
String coger= "dicom";
String hol= "dicom";
boolean compara = coger.equals(hol);//devuelve true
El metodo equals y el operador = = hacen dos pruebas completamente diferentes para la igualdad. Mientras que el metodo equals compara los caracteres contenidos en una String, el operador = = compara dos referencias de objeto para ver si
se refieren a la misma instancia.
Extracci
on de caracteres
Para extraer un u
nico caracter de una cadena, se puede referir a un caracter
indexado mediante el metodo charAt:
"abc".charAt(1) // devolver
a b
La primera posicion de una cadena es la posicion 0.
4.9.3.
Conversi
on a String
Todos los objetos tienen el metodo toString() heredado de Object, de esta forma
cualquier objeto puede ser convertido en cadena. Ejemplo de int a String.
r
GVA-ELAI-UPM
PFC0075-2003
115
EN JAVA
CAPITULO 4. PROGRAMACION
int entero = 5;
String cadena = new Integer(entero).toString();
4.10.
Gesti
on de excepciones
Una excepcion es una condicion anormal que surge en una secuencia de codigo
durante la ejecucion. La gestion de excepciones de Java lleva la gestion del error
en tiempo de ejecucion al mundo orientado a objetos. Una excepcion de Java es un
objeto que describe una condicion excepcional que se ha producido en un fragmento
de codigo.
Los objetos de excepcion los crea automaticamente el interprete de Java como
respuesta a alguna condicion excepcional. Como ejemplo tomamos una division por
cero. Cuando el interprete de Java intenta ejecutar la division, observa que el denominador es cero y construye un nuevo objeto de excepcion para que se detenga este
codigo y se trate esta condicion de error. Una vez detenido el flujo del codigo en el
operador de division, se buscara en la pila de llamadas actual cualquier gestor de
excepciones (pila que contiene un registro de las llamadas a metodo). Un gestor de
excepciones es algo establecido para tratar inmediatamente la condicion excepcional.
Si no codificamos un gestor de excepciones, se ejecutara el gestor en tiempo de ejecucion por defecto. El gestor por defecto imprime el valor String de la excepcion y el
trazado de la pila del lugar donde se produjo la excepcion.
116
r
GVA-ELAI-UPM
PFC0075-2003
4.10.1.
DE EXCEPCIONES
4.10. GESTION
try y catch
class Exc {
public static void main(String args[]) {
try {
int d = 0;
int a = 42;
} catch (ArithmeticException e) {
System.out.println("divisi
on por cero");
}
}
}
4.10.2.
throw
r
GVA-ELAI-UPM
PFC0075-2003
117
EN JAVA
CAPITULO 4. PROGRAMACION
4.10.3.
finally
4.10.4.
Gesti
on incompleta de las excepciones
import java.io.*;
public class PruebaExcepciones {
public static char leer() throws IOException {
return (char) System.in.read();
}
public static void main(String args[]) {
try {
char car=leer();
System.out.println("Caracter: "+car);
} catch (IOException e) {
System.out.println("Error de entrada de datos");
}
}
}
4.11.
Hilos
118
r
GVA-ELAI-UPM
PFC0075-2003
4.11. HILOS
esperar a que se terminen cada una de estas tareas antes de proseguir con la siguiente.
Aunque la CPU este libre la mayor parte del tiempo, tiene que colocar las tareas en
la cola ordenadamente.
Los sistemas multihilo aprovechan la circunstancia de que la mayora de los hilos
computacionales invierten la mayor parte del tiempo esperando a que un recurso quede
disponible, o bien esperando a que se cumpla alguna condicion de temporizacion. Se
puede describir todas las tareas como hilos de control independientes, conmutando de
manera automatica entre una tarea que este lista para pasar a un modo de espera, y
otra que s tenga algo que hacer, consiguoendo realizar una cantidad mayor de trabajo
en el mismo intervalo de tiempo.
Prioridades de hilo
El interprete de Java utiliza prioridades para determinar como debe comportarse
cada hilo con respecto a los demas. Las prioridades de hilo son valores entre 1 y 10
que indican la prioridad relativa de un hilo con respecto a los demas.
Sincronizaci
on
Ya que los hilos permiten y potencian el comportamiento asncrono de los programas, debe existir alguna manera de forzar el sincronismo all donde sea necesario.
Java incorpora una version rebuscada de un modelo clasico para la sincronizacion,
el monitor. La mayor parte de los sistemas multihilo implementan los monitores a
modo de objetos, pero Java proporciona una solucion mas elegante: no existe la clase
monitor, cada objeto lleva asociado su propio monitor implcito, en el que puede entrar sin mas que hacer una llamada a los metodos synchronized del objeto. Una vez
que el hilo esta dentro del metodo synchronized, ning
un otro hilo puede efectuar una
llamada a otro metodo synchronized sobre el mismo objeto.
Una vez que el programa se ha dividido en sus partes logicas, a modo de hilo, es
preciso definir exactamente como se comunicaran entre si dichos hilos. Java utiliza
los metodos wait y notify para el intercambio de informacion entre hilos.
4.11.1.
Thread
En Java los hilos se representa mediante una clase. La clase Thread encapsula
todo el control necesario sobre los hilos. Hay que tomar la precaucion de distinguir
claramente un objeto Thread de un hilo en ejecucion. Un objeto Thread se define
r
GVA-ELAI-UPM
PFC0075-2003
119
EN JAVA
CAPITULO 4. PROGRAMACION
4.11.2.
Runnable
120
r
GVA-ELAI-UPM
PFC0075-2003
4.11. HILOS
}
System.out.println("saliendo del hilo hijo");
}
public static void main (String args [])
new ThreadDemo();
}
El hilo main crea un nuevo objeto Thread, con new Thread (this, Demo Thread),
pasa this como primer argumento para indicar que el nuevo hilo llame al metodo run
sobre este objeto. A continuacion se llama a start, lo que inicia el hilo t en la
ejecucion a partir del metodo run. En estos momentos hay dos hlos en ejecucion,
uno ct que contin
ua con el programa principal, lo que le lleva al primer try, y el
segundo salta desde start() al metodo run(). Despues, el hilo main se duerme durante
3000 milisegundos antes de imprimir un mensaje y despues termina. Demo Thread
todava esta contando desde cinco cuando sucede esto. Se contin
ua ejecutando hasta
que termina con el bucle de run. Esta es la salida despues de cinco segundos:
4.11.3.
El planificador de hilos hace uso de las prioridades de los mismos para decidir
cuando debe dejar a cada hilo que se ejecute, de manera que los hilos con mayor prioridad deben ejecutarse mas a menudo que lo de menor prioridad. Cuando
esta ejecutandose un hilo de baja prioridad, y otro de mayor prioridad se despierta
de su sue
no, o de la espera por un operacion de E/S, debe dejarse que se ejecute de
manera inmediata, desalojando al hilo de menor prioridad. Cuando los hilos son de
igual prioridad deben desalojarse los unos a los otros, cada cierto tiempo, utilizando
el algoritmo circular round-robin para gestionar el acceso al la CPU.
r
GVA-ELAI-UPM
PFC0075-2003
121
EN JAVA
CAPITULO 4. PROGRAMACION
4.11.4.
Sincronizaci
on
Sentencia synchronized
Si se utiliza una clase que no fue dise
nada para accesos multihilo y, por ello,
se dispone de metodos no sincronizados que manipulan el estado interno,se puede
envolver la llamada al metodo en un bloque sincronizado. El formato general de la
sentencia sincronizada es el siguiente:
synchronized(objeto) sentencia;
En el ejemplo, objeto es cualquier referencia al objeto, y sentencia suele ser un
bloque que incluye una llamada al metodo de objeto, que solo tendra lugar una vez
que el hilo haya entrado con exito en el monitor de objeto.
4.11.5.
Comunicaci
on entre hilos
122
r
GVA-ELAI-UPM
PFC0075-2003
4.11. HILOS
notify: despierta al primer hilo que realizo una llamada a wait sobre el mismo
objeto.
notifyAll_: despierta todos los hilos que realizaron una llamada a wait sobre el
mismo objeto. El hilo con mayor prioridad de los despertados es el primero en
ejecutarse.
4.11.6.
M
etodos
M
etodos de clase
Estos son los metodos estaticos que deben llamarse de manera directa en la clase
Thread.
currentThread: el metodo estatico devuelve el objeto Thread que representa al
hilo que se ejecuta actualmente.
yield: este metodo hace que el interprete cambie de contexto entre el hilo actual
y el siguiente hilo ejecutable disponible. Es una manera de asegurar que los hilos
de menor prioridad no sufran inanicion.
Sleep(int n): el metodo sleep provoca que el interprete ponga al hilo en curso
a dormir durante n milisegundos. Una vez transcurridos los n milisegundos,
dicho hilo volvera a estar disponible para su ejecucion. Los relojes asociados a
la mayor parte de los interpretes Java nos seran capaces de obtener precisiones
mayores de 10 milisegundos.
M
etodos de instancia
Estos son los metodos que deben llamarse desde instancias u objetos de la clase
Thread.
start: indica al interprete de Java que cree un contexto de hilo del sistema
y comience a ejecutarlo. A continuacion, el metodo run objeto de este hilo
sera llamado en el nuevo contexto del hilo. Debe tomarse la precaucion de no
llamar al metodo start mas de una vez sobre un objeto hilo dado.
run: constituye el cuerpo de un hilo en ejecucion. Este es el u
nico metodo de
la interfaz Runnable. Es llamado por el metodo start despues de que el hilo
apropiado del sistema se haya inicializado. Siempre que el metodo run devuelva
el control, el hilo actual se detendra.
r
GVA-ELAI-UPM
PFC0075-2003
123
EN JAVA
CAPITULO 4. PROGRAMACION
4.12.
Utilidades
La biblioteca de clases de Java contiene un conjunto de clases de utilidades utilizadas en todos los paquetes principales de Java. Estas clases estan almacenadas en
los paquetes java.lang y java.util. Se utilizan para almacenar conjuntos de objetos,
realizar la interfaz con funciones del sistema de bajo nivel, funciones matematica,
generacion de n
umeros aleatorios y manipulacion de fecha/hora.
4.12.1.
Envolturas
Number
La clase abstracta Number representa una interfaz a todos los tipos escalares
estandar: long, int, float y double. Number tiene metodos de acceso que devuelven el
valor posiblemente redondeado del objeto de cada uno de los objetos simples:
124
r
GVA-ELAI-UPM
PFC0075-2003
4.12. UTILIDADES
Double y Float
Double y Float son subclases de Number. Ambas clases tienen dos constructores
para inicializarlas con valores double y float, o, lo que es muy practico, se pueden
inicializar con una representacion tipo String del valor:
Integer y Long
La clase Integer es una envoltura alrededor de int, short y byte. Long es una
envoltura alrededor del tipo long. Ademas de los metodos heredados de Number
tienen otros muy u
tiles:
Character
Character es una envoltura simple alrededor de un char. Tiene varios metodos
u
tiles static, que se pueden utilizar para probar varias condiciones de un caracter:
r
GVA-ELAI-UPM
PFC0075-2003
125
EN JAVA
CAPITULO 4. PROGRAMACION
Boolean
Boolean es un envoltorio muy fino alrededor de valores boolean, que solo es u
til
para situaciones de paso por referencia.
4.12.2.
Enumeraciones
Java tiene matrices para almacenar grupos de datos de tipo similar, que son muy
u
tiles para modelos simples de acceso a datos. Sin embargo, las enumeraciones ofrecen
una manera mas completa y orientada a objetos para almacenar conjuntos de datos
de tipo similar. Las enumeraciones tienen su propia asignacion de memoria y posibilidad de una nueva asignacion para ampliarlas. Tienen interfaces de metodo para su
iteracion y recorrido. Se pueden indexar mediante algo mas complejo y u
til que los
simples enteros.
Interfaz de enumeraci
on
Enumeracion es una interfaz simple que permite enumerar todos los elementos de
cualquier conjunto de objetos. Especifica dos metodos. El primero, un metodo boolean
llamado hasMoreElements, devuelve true cuando todava quedan mas elementos que
extraer. El segundo, nextElement devuelve una referencia a objeto generica cuyo tipo
hay que convertir al tipo de clase de la cual el objeto es una instancia.
Vector
Un Vector es una matriz ampliable de referencias a objeto. Internamente, un
Vector implementa una estrategia de crecimiento para minimizar la reasignacion y el
espacio desperdiciado. Los objetos se pueden almacenar al final de un Vector utilizando el metodo addElement o en un ndice dado mediante el metodo insertElement. Se
puede almacenar una matriz en un Vector utilizando el metodo copyInto. Una vez se
ha almacenado un conjunto de objetos en un Vector, se puede utilizar para buscar un
126
r
GVA-ELAI-UPM
PFC0075-2003
4.12. UTILIDADES
elemento en concreto utilizando los metodos contains, indexOf, o lastIndexOf. Tambien se puede extraer un objeto de una posicion especfica de un Vector utilizando los
metodos elementAt, firstElement y lastElement.
4.12.3.
Runtime
Runtime rt = Runtime.getRuntime();
rt.exec("c:\\CntVirRel.exe");
Mediante Runtime se puede ejecutar cualquier aplicacion, mediante el metodo
exec().
4.12.4.
System
System.out.println("Este es un ejemplo");
Con el metodo println() se saca por pantalla los argumentos introducidos.
4.12.5.
Date
La clase Date se utiliza para presentar una fecha y una hora. Se pueden manipular
el da, mes, a
no, da de la semana, horas, minutos y segundos. Hay varios constructores
para objetos Date. El mas simple, Date(), inicializa el objeto con la fecha y hora
actual. Hay tres constructores mas que ofrecen niveles de especificidad mayores para
la precision que se desea para la hora:
r
GVA-ELAI-UPM
PFC0075-2003
127
EN JAVA
CAPITULO 4. PROGRAMACION
Date(a
no, mes, da) establecera la hora a las 00:00:00 del da especificado.
Date(a
no, mes, da, horas, minutos) fijara la fecha y hora, dejando los segundos
a 0.
Date(a
no, mes, da, horas, minutos, segundos) establecera la hora exacta.
4.13.
Entrada/Salida
La mayora de los programas no pueden alcanzar sus metas sin acceder a datos
externos. Estos datos se recuperan a partir de un origen de entrada. Los resultados
de un programa se envan a un destino de salida. La nocion generica de una fuente
de entrada puede representar muchos tipos de entrada distintos: desde un archivo de
disco, un teclado o un conector (socket) de red. Estas abstracciones son una manera
limpia de tratar la E/S sin necesitar que todo el codigo comprenda la diferencia entre
un teclado y una red.
Java llama flujo a esta abstraccion y la implementa con varias clases del paquete
java.io. El flujo de E/S representa todos los orgenes y destinos de los datos detras de
una interfaz uniforme. La entrada esta encapsulada en la clase InputStream y la salida
en la clase OutputStream. Estas dos clases abstractas son las que todos los objetos
deberan referenciar cuando tratan la E/S en general. Sus metodos mas importantes
son read() y write(int b); son metodos abstractos que definen la funcion basica de
lectura/escritura de un byte.
4.13.1.
File
Un File es el u
nico objeto del paquete de E/S que referencia a un archivo de
disco real. La clase File no especifica como se recupera o almacena la informacion en
los archivos; solo describe las propiedades de un objeto archivo. Los archivos son un
origen y un destino primario de los datos dentro de la mayora de los programas.
Los objetos archivo se pueden crear utilizando uno de los tres constructores
disponibles. El ejemplo siguiente crea tres archivo: f1, f2 y f3. El primer objeto File
se construye utilizando un trayecto de directorio como u
nico argumento. El segundo
128
r
GVA-ELAI-UPM
PFC0075-2003
4.13. ENTRADA/SALIDA
Directorios
Un directorio es un File que contiene una lista de otros archivos y directorios.
Cuando se crea un Objeto File y es un directorio, el metodo isDirectory devolvera true.
En este caso, se puede llamar al metodo list sobre ese objeto para extraer la lista de
los otros archivos y directorios que contiene. Si se llama al metodo list sobre un
objeto File que no sea un directorio se provoca una NullPointerException en tiempo
de ejecucion.
import java.io.File;
class Dirlist {
public static void main(String args[]) {
String dirname = "/java";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println("Directorio de " + dirname);
String s[] = f1.list();
for (int y = 0; i < s.length; y++) {
System.out.println(s[i] + " es un directorio");
}
} else {
System.out.println(dirname + " no es un directorio");
}
}
}
La ejecucion de este programa lista el contenido del directorio /java del PC.
FilenameFilter
A menudo se desea limitar el n
umero de archivos devueltos por el metodo list
para que se incluyan u
nicamente aquellos archivos que cumplan un cierto patron
r
GVA-ELAI-UPM
PFC0075-2003
129
EN JAVA
CAPITULO 4. PROGRAMACION
de nombre de archivo. Con este fin, el paquete java.io incluye una interfaz llamada
FilenameFilter. Un objeto que implemente FilenameFilter tiene un u
nico metodo,
accept, al que se llama una vez por cada archivo de una lista. El metodo accept
devuelve el valor true si se debiera incluir el archivo en la lista. El ejemplo siguiente
ampla el programa anterior restringiendo la visibilidad de los nombres de archivo
devueltos por el metodo list. La restriccion se aplica a archivos con nombres que
terminan con la extension de archivo que se pasa como parametro cuando se construye
le objeto:
import java.io.*;
public class OnlyExt implements FilenameFilter {
String ext;
public OnlyExt(String ext) {
this.ext = "." + ext;
}
public boolean accept (File dir, String name) {
return name.endsWith(ext);
}
}
4.13.2.
InputStream
InputStream es una clase abstracta que define el modelo de Java para el flujo de
entrada. Todos los metodos de esta clase lanzaran una IOException si se producen
condiciones de error. Este es un breve resumen de los metodos de InputStream:
read() devuelve una representacion como entero del siguiente byte de entrada
disponible.
read(byte[]) intenta leer hasta b.length bytes situandolos en b y devuelve el
n
umero real de bytes que se leyeron con exito.
read(byte b[], int off, int len) intenta leer hasta len bytes situandolos en b comenzando en b[off], y devuelve el n
umero de bytes que se leyeron con exito.
skip(long n) omite n bytes de la entrada, y devuelve el n
umero de bytes que se
han omitido.
available() devuelve el n
umero de bytes de entrada disponibles actualmente para
su lectura.
close() cierra el origen de entrada. Los intentos de lectura posteriores generaran
una IOException.
130
r
GVA-ELAI-UPM
PFC0075-2003
4.13. ENTRADA/SALIDA
mark(int limitelectura) coloca una marca en el punto actual del flujo de entrada
que seguira siendo valida hasta que se lean limitelectura bytes.
reset() devuelve el puntero de entrada ala marca establecida previamente.
markSupported() devuelve true si se admiten mark/reset en este flujo.
4.13.3.
OutputStream
Igual que InputStream, OutputStream es una clase abstracta que define el flujo
de salida. Todos los metodos de esta clase devuelven un valor void y lanzan una
IOException en caso de error. Esta es una lista de los metodos de OutputStream:
write(int b) escribe un u
nico byte en un flujo de salida. Observar que el parametro
en un int, lo que permite que se llame a write con expresiones sin tener que convertir su tipo a byte.
write(byte b[]) escribe una matriz completa de bytes en un flujo de salida.
write(byte b[], int off, int len) escribe len bytes de la matriz b, comenzando a
partir de b[off].
flush() inicializa el estado de la salida de manera que se limpian todos los buffers.
close() cierra el flujo de salida. Los intentos de escritura posteriores generaran
una IOException.
4.13.4.
Flujo de archivo
FileInputStream
La clase FileInputStream utiliza archivos de datos reales como base del flujo de
entrada. El ejemplo siguiente crea dos FileInputStreams que estan utilizando el mismo
archivo de disco real.
r
GVA-ELAI-UPM
PFC0075-2003
131
EN JAVA
CAPITULO 4. PROGRAMACION
FileOutputStream
FileOutputStream comparte el mismo estilo de constructores que FileInputStream.
Sin embargo, la creacion de FileOutputStream no depende de que el archivo ya exista. FiliOutputStream creara el archivo antes de abrirlo como salida cuando se crea
el objeto. Si se intenta abrir un archivo de solo lectura como punto final de un FiliOutputStream, se lanzara una IOException.
ByteArrayInputStream
ByteArrayInputStream (flujo de entrada de matriz de bytes) es una implementacion
de un flujo de entrada que utiliza una matriz de bytes como origen. Esta clase tiene
dos constructores, y ambos necesita una matriz de bytes que proporcione el origen de
los datos.
ByteArrayOutputStream
ByteArrayOutputStream tiene dos constructores. En la primera forma, se crea un
buffer de 32 bytes. En la segunda, se crea un buffer con un tama
no igual al argumento
en bytes, que en este ejemplo es 1024 bytes:
4.13.5.
Flujos filtrados
Los flujos filtrados amplan los flujos basicos, proporcionando una sincronizacion.
En un sistema de E/S multihilo, se pueden producir resultados inesperados cuando
se permite que m
ultiples hilos operen sobre el mismo flujo. Aunque es posible tener
hilos m
ultiples en Java leyendo o escribiendo en el mismo flujo, hay una buena razon
para permitir que solo un hilo tenga acceso directo a un flujo de E/S u
nico. Todos
los constructores y metodos proporcionados en esta clase son identicos a los mencionados anteriormente para InputStream y OutputStream, a excepcion de que estan
sincronizados.
132
r
GVA-ELAI-UPM
PFC0075-2003
4.13. ENTRADA/SALIDA
BufferedOutputStream
La salida a BufferedOutputStream es identica a cualquier OutputStream con la
excepcion de que se a
nade un metodo de entrada con buffer, la salida con buffer no
proporciona ninguna funcionalidad adicional. En Java, los buffers para la salida estan
ah para incrementar el rendimiento.
4.13.6.
SequenceInputStream
PrintStream
La clase PrintStream proporciona todas las utilidades de formato que hemos estado utilizando desde el principio del libro de los descriptores de archivo de System.
Pensabas que se introduca System.out.println sin pensar demasiado en las clases
que proporcionaban el formato de la salida que se presentaba. PrintStream tiene
dos constructores, PrintStream(OutputStream sal) y PrintStream(OutputStream sal,
boolean auto), donde auto controla si java vaca el flujo de salida cuando vaya a la
salida un caracter de lnea nueva \n.
Los objetos PrintStream de Java admiten los metodos print y println para todos los tipos, incluyendo Object. Si un argumento no se un tipo simple, los metodos
PrintStream llaman al metodo toString del objeto y a continuacion imprimen el resultado.
4.13.7.
Ejemplo
Este primer ejemplo se muestra una forma comoda y eficaz para la lectura ficheros
que en este caso se leen los datos del fichero LeeFichero.java y se imprimen por la
consola.
r
GVA-ELAI-UPM
PFC0075-2003
133
EN JAVA
CAPITULO 4. PROGRAMACION
import java.io.*;
public class LeeFichero {
public static void main(String[] argumentos) {
final int TAMANIO_BUFFER = 64;
byte buffer[] = new byte[TAMANIO_BUFFER];
int NumBytes;
try {
FileInputStream FicheroOrigen = new FileInputStream
("LeeFichero.java");
try {
do {
NumBytes = FicheroOrigen.read(buffer);
System.out.print(new String(buffer,0,NumBytes));
} while (NumBytes == TAMANIO_BUFFER);
FicheroOrigen.close();
} catch (IOException e){
System.out.println("Error leyendo los datos o
cerrando el fichero");
}
} catch (FileNotFoundException e) {
System.out.println("Fichero no encontrado");
}
}
}
import java.io.*;
public class EscribeFichero {
public static void main(String[] argumentos) {
final int TAMANIO_BUFFER = 64;
byte buffer[] = new byte[TAMANIO_BUFFER];
134
r
GVA-ELAI-UPM
PFC0075-2003
int NumBytes;
try {
FileOutputStream FicheroDestino = new FileOutputStream
("Salida.txt");
try {
do {
NumBytes = System.in.read(buffer);
FicheroDestino.write(buffer,0,NumBytes);
} while (buffer[0] != Character.LINE_SEPARATOR);
FicheroDestino.close();
} catch (IOException e){
System.out.println("Error escribiendo los datos
o cerrando el fichero");
}
} catch (FileNotFoundException e) {
System.out.println("Fichero no encontrado");
}
}
}
4.14.
Trabajo en Red
r
GVA-ELAI-UPM
PFC0075-2003
135
EN JAVA
CAPITULO 4. PROGRAMACION
4.14.1.
InetAddress
InetAddress ip = InetAddress.getLocalHost();
4.14.2.
Datagramas
Los datagramas son bloques de informacion del tipo lanzar y olvidar que se
transfieren a traves de la red. Para la mayora de los programas de la red, el utilizar
un flujo TCP/IP en vez de un datagrama UPD es mas sencillo y hay menos posibilidades de tener problemas. Sin embargo, cuando se requiere un rendimiento optimo, y
136
r
GVA-ELAI-UPM
PFC0075-2003
esta justificado el tiempo adicional que supone el realizar la verificacion de los datos,
los datagramas son un mecanismo realmente u
til.
Cuando se ha lanzado un datagrama hacia su destino, no hay ninguna seguridad
de que llegue o incluso de que haya alguien all para cogerlo. Igualmente, cuando se
recibe un datagrama, no es seguro que no se haya da
nado por el camino o que el que
lo haya enviado este todava ah para recibir una respuesta.
DatagramPacket
Se pueden crear los DatagramPackets utilizando dos constructores. El primero
utiliza solamente un buffer de bytes y una longitud. Ese utiliza para recibir datos a
traves de un DatagramSocket. El segundo a
nade una especificacion de direccion de
destino y un puerto, que es utilizada por un DatagramSocket para determinar donde
se enviaran los datos del paquete. Considerar que estas dos formas equivalen a crear
un un buzon de entrada en el primer caso, y a rellenar y poner una direccion en un
sobre en el segundo. Estos son los prototipos de los dos constructores:
r
GVA-ELAI-UPM
PFC0075-2003
137
EN JAVA
CAPITULO 4. PROGRAMACION
4.14.3.
Conectores
Socket cliente
Los conectores (sockets), o los conectores TCP/IP en concreto, se utilizan para
implementar conexiones basadas en flujo, punto a punto, bidireccionales y fiables entre
nodos de Internet. Se puede utilizar un conector para conectar el sistema de E/S de
Java a otros programas que pueden residir en la maquina local o en cualquier otra
maquina de Internet. La clase Socket, a diferencia de DatagramSocket, implementa
una conexion continua muy fiable entre el cliente y el servidor.
Al crear un objeto conector tambien se establece la conexion entre direcciones de
Internet. No hay metodos ni constructores que muestren explcitamente los detalles
del establecimiento de la conexion del cliente. Se puedan utilizar dos constructores
para crear conectores:
Socket(String nodo, int puerto) crea un conector que conecta el nodo local con
el nodo y puerto nombrados.
Socket(InetAddress direccion, int puerto) crea un conector utilizando un objeto
InetAddress ya existente y un puerto.
En un conector se puede examinar en cualquier momento la informacion de direccion y puerto asociada con el utilizando los metodos siguientes:
getInetAddress() devuelve la InetAddress asociada con el objeto Socket.
getPort() devuelve el puerto remoto al que esta conectado este objeto Socket.
getLocalPort() devuelve el puerto local al que esta conectado este objeto Socket.
Cuando se ha creado el objeto Socket, tambien puede ser examinado para acceder
a los flujos de entrada y salida asociados con el. Todos estos metodos pueden lanzar
una IOException si se han invalidado los conectores debido a una perdida de conexion
en la red. Estos flujos se utilizan exactamente igual que los flujos de E/S que hemos
visto en el captulo anterior para enviar y recibir datos:
getInputStream() devuelve el InputStream asociado con este conector.
getOutputStream() devuelve el OutputStream asociado con este conector.
close() cierra el InputStream y el OutputStream.
138
r
GVA-ELAI-UPM
PFC0075-2003
Socket servidor
Los ServerSockets se deben utilizar para crear servidores de Internet. Estos servidores no son necesariamente maquinas, de hecho son programas que estan esperando
a que programas cliente locales o remotos se conecten a ellos en puertos p
ublicos.
Los ServerSockets son bastante diferentes de los Sockets normales. Cuando se crea un
ServerSocket, se registrara en el sistema que tiene interes en conexiones de cliente.
Tiene un metodo adicional, accept, que es una llamada que se bloquea ya que espera
que un cliente inicie la comunicacion y despues devuelve un Socket normal.
Los dos constructores de ServerSocket reflejan el n
umero del puerto en el que
se desean aceptar las conexiones y, opcionalmente, durante cuanto tiempo se desea
esperar a que se deje de utilizar el puerto. Ambos constructores pueden lanzar una
IOExeption bajo condiciones adversas. Estos son los dos prototipos:
Funcionalmente, el metodo accept de un ServerSocket es una llamada que se bloquea y que espera que un cliente inicie la comunicacion y despues devuelve un Socket
normal. Despues, este conector se utiliza para la comunicacion con el cliente.
4.14.4.
Conexi
on
Conexi
on cliente
Lo primero debe ser crear un objeto socket diciendo con que servidor y por que
puerto se realiza la conexion. Despues para que haya una comunicacion entre las dos
maquinas es necesario abrir dos flujos uno de entrada y otro de salida, en los que por
ellos se realiza el intercambio de informacion. Es recomendable utilizar el buffer para
la transferencia de la informacion. Por u
ltimo una vez se quiera desconectar, se debe
cerrar el socket.
r
GVA-ELAI-UPM
PFC0075-2003
139
EN JAVA
CAPITULO 4. PROGRAMACION
(conexion.getOutputStream()));
//...
conexion.close();
Conexi
on servidor
Es muy interesante que el servidor sea multihilo para que pueda atender varias
peticiones de clientes distintos a la vez, por lo que la clase del servidor tiene que
derivarse de la clase Thread. Para abrir el socket del servidor vale con pasarle que
puerto es utilizado para la trasnmision de datos. Este puerto debe ponerse a la escucha
de posibles peticiones de los clientes. Tambien se deben declarar los flujos de entrada
y salida de datos.
4.15.
Interfaces Gr
aficas de Usuario
4.15.1.
Componentes AWT
140
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
141
EN JAVA
CAPITULO 4. PROGRAMACION
4.15.2.
Organizaci
on
142
r
GVA-ELAI-UPM
PFC0075-2003
4.15.3.
Componentes de men
u
4.15.4.
Componentes Swing
Administrador de dise
no
Tipos de dise
nos y composiciones:
r
GVA-ELAI-UPM
PFC0075-2003
143
EN JAVA
CAPITULO 4. PROGRAMACION
4.15.5.
Eventos
144
r
GVA-ELAI-UPM
PFC0075-2003
4.16. ENCRIPTACION
A los eventos relacionados con el raton, se les llama con una copia del evento
original y la ubicacion (x, y) del evento.
4.16.
Encriptaci
on
[ENCRI]
El soporte que da el JDK a la criptografa se divide en dos grandes bloques, el
JCA Java Cryptography Architecture y el JCE Java Cryptography Extension.
La primera parte nos define las bases del soporte criptografico de Java, y la segunda
nos provee de los algoritmos necesarios para poder encriptar y desencriptar datos.
Debido a las leyes de los Estados Unidos, que prohiben exportar software de
encriptacion de datos, el JCE no viene incluido en el JDK, y existen restricciones
para bajarlo de la site de SUN, pero existen paquetes de terceros, desarrollados fuera
de los Estados Unidos, que implementan todas las especificaciones del JCE y que no
estan sujetos a sus restricciones legales, como por ejemplo la librera CRYPTICS.
4.16.1.
Arquitectura Criptogr
afica de Java (JCA)
r
GVA-ELAI-UPM
PFC0075-2003
145
EN JAVA
CAPITULO 4. PROGRAMACION
subpaquetes), as como una serie de especificaciones a tener en cuenta por los programadores que quieran crear extensiones criptograficas (como la librera CRYPTICS,
etc).
La arquitectura criptografica de Java ha sido dise
nada teniendo en cuenta los principios de independencia de la implementacion e interoperabilidad. La independencia
de la implementacion se consigue introduciendo el concepto de Proveedor (Cryptography Package Provider). El termino Proveedor se refiere a un paquete o grupo
de paquetes que que implementan algoritmos criptograficos especficos.
El JDK 1.1 viene con un proveedor por defecto llamado SUN, el cual incluye
una implementacion del algoritmo DSA y una implementacion de los algoritmos de
Hashing MD5 y SHA-1. En el JDK se pueden instalar uno o mas paquetes proveedores.
SecureRandom
La clase SecureRandom es un generador de n
umeros pseudo-aleatorio. Para crear
objetos SecureRandom usaremos uno de los siguientes constructores:
Una vez tenemos un objeto SecureRandom, podemos utilizar los siguientes metodos:
Key
El interface Key es el interface de mas alto nivel de todas las claves y define la
funcionalidad compartida por todas las claves.
146
r
GVA-ELAI-UPM
PFC0075-2003
4.16. ENCRIPTACION
PublicKey y PrivateKey
Los interfaces PublicKey y PrivateKey son interfaces sin metodos, que derivan de
la interface Key, utilizados solamente para comprobacion de tipos.
KeyPair
La clase KeyPair es simplemente un contenedor de un par de claves (una p
ublica
y una privada). Tiene dos metodos:
PrivateKey getPrivate(): Devuelve la clave privada.
PublicKey getPublicKey(): Devuelve la clave p
ublica.
KeyPairGenerator
La clase KeyPairGenerator se utiliza para crear un par de claves. Para crear
objetos KeyParGenerator usaremos uno de los siguientes metodos:
KeyPairGenerator getInstance(String algorithm): crea un generador de claves
utilizando el algoritmo criptografico indicado.
KeyPairGenerator getInstance(String algorithm, String provider): crea un generador de claves utilizando el algoritmo criptografico indicado del proveedor
indicado.
Identity
La clase Identity se utiliza para manejar identidades. Para crear identidades usaremos el constructor siguiente:
Identity(String nombre): crea una identidad con el nombre indicado.
Signer
La clase Signer deriva de la clase Identity, y se utiliza para manejar identidades
capaces de firmar datos.
r
GVA-ELAI-UPM
PFC0075-2003
147
EN JAVA
CAPITULO 4. PROGRAMACION
Signature
La clase Signature se utiliza para crear o verificar firmas. Para crear objetos Signature usaremos uno de los siguientes metodos:
Signature getInstance(String algorithm): crea un objeto firma utilizando el algoritmo criptografico indicado.
Signature getInstance(String algorithm, String provider): crea un objeto firma
utilizando el algoritmo criptografico indicado del proveedor indicado.
4.16.2.
Extensi
on criptogr
afica de Java (JCE)
El JCE extiende el proveedor SUN e incluye una implementacion de los algoritmos DES, 3DES, los modos ECB y CBC, y el estilo de relleno PKCS#5. Para utilizar
otros algoritmos deberemos utilizar otro proveedor que los implemente. (Para utilizar
el algoritmo RSA nosotros utilizaremos la libreria CRYPTIX).
SecretKey
La interface SecretKey es una interface sin metodos, que deriva de la interface
Key, utilizada solamente para comprobacion de tipos.
KeyGenerator
La clase KeyGenerator se utiliza para crear una clave secreta. Para crear objetos
KeyGenerator usaremos uno de los siguientes metodos:
KeyGenerator getInstance(String algorithm): crea un generador de claves utilizando el algoritmo criptografico indicado.
KeyGenerator getInstance(String algorithm, String provider): crea un generador
de claves utilizando el algoritmo criptografico indicado del proveedor indicado.
148
r
GVA-ELAI-UPM
PFC0075-2003
4.17. CONCLUSIONES
Cipher
La clase Cipher se utiliza para cifrar o descifrar datos. Para crear objetos Cipher
usaremos uno de los siguientes metodos:
Cipher getInstance(String algorithm): crea un objeto Cipher utilizando el algoritmo criptografico indicado.
Cipher getInstance(String algorithm, String provider): crea un objeto Cipher
utilizando el algoritmo criptografico indicado, del proveedor indicado.
4.17.
Conclusiones
El lenguaje Java puede no ser tan potente como lo pueda ser C++ gracias a los
punteros, pero la forma de programar es mucho mas simple, rapida y encapsulada de
lo que puede ser C++. Es un lenguaje orientado a objetos mas sencillo de aprender
que C++, y ademas es mas rapido y eficiente. Tambien hay que mencionar que con
Java se pueden hacer dos tipos de programas, aplicaciones completas y Applets. Es
un sistema multihilo y es facel de aprender como administrar las prioridades de los
hilos. Da mejor soporte para las aplicaciones para internet, ya que uno de los campos
mas fuertes de este leguaje son los Applets. Las conexiones y envo de informacion a
traves de la red es verdaderamente muy facil.
En la creacion de GUI, java ha avanzado mucho con los nuevos componentes
Swing haciendo mas facil la programaion de estos. Gracias a la M
aquina Virtual
de Java, todas las aplicaciones desarrollas en este lenguaje pueden funcionar bajo
cualquier plataforma o sistema operativo, siendo por lo tanto multiplataforma. El
u
nico impedimento de esto es que para que funcionen las aplicaciones previamente
hay que instalar la JVM, lo que trae consigo una molestia mas para los usuarios de
estos programas.
r
GVA-ELAI-UPM
PFC0075-2003
149
Captulo 5
Estudio de libreras JDT
[SOFT] [TIANI]
5.1.
Introducci
on
5.2.
Terminologa
151
5.3.
5.3.1.
5.3.2.
Manipulaci
on de los atributos
Un conjunto de datos DICOM es representado por un objeto de la clase DicomObject. Los diferentes atributos de estos conjuntos de datos estan internamente almacenados en el DicomObject como objetos com.archimed.dicom.Tagvalue. El objeto
TagValue contiene un par (grupo,elemento) y los valores del atributo estan almacenados en un Vector. El tama
no del Vector corresponde a la multiplicidad del atributo.
El tipo JAVA que representa el valor de un atributo depende del tipo DICOM (Value Representation - VR) definido para ese atributo especfico. Las tablas 5.1 y 5.2
muestra la equivalencia entre los tipos DICOM y sus correspondientes tipos JAVA.
152
r
GVA-ELAI-UPM
PFC0075-2003
Manipulaci
on de atributos simples
Hay un n
umero de metodos set/get en DicomObject con los que se pueden meter,
sacar o modificar los atributos guardados en un DicomObject. La forma de hacer
esto es con la clase com.archimed.dicom.DDict. La clase DDict tiene una constante
definida para cada atributo definido en el estandar DICOM. Por ejemplo:
DDict.dPatientName
DDict.dAccessionNumber
Esas constantes pueden ser usadas en los metodos set/get del DicomObject:
Person p = (Person)dcm.get(DDict.dPatientName);
Integer acnumber = (Integer)dcm.get(DDict.dAccessionNumber);
dcm.set(DDict.dPatientName, new Person("Fernando"));
dcm.set(DDict.dAccessionNumber, new Integer(12345));
El metodo set implcitamente convierte el valor del argumento dado al tipo DICOM
correcto.
Tambien se puede acceder a los atributos de un DicomObject a traves del par
(grupo.elemento).
Person p = (Person)dcm.get ge(0x0010, 0x0010);
Integer acnumber = (Integer)dcm.get ge(0x0008,0x0050,
DDict.dAccessionNumber);
dcm.set ge(0x0010, 0x0010, new Person("Fernando"));
dcm.set ge(0x0008, 0x0050, new Integer(12345));
Hay tambien dos metodos get que convierten directamente a String o int:
String s = dcm.getS(DDict.dPatientName);
int i = dcm.getI(DDict.dAccessionNumber);
Para manipular atributos con una multiplicidad mayor de uno, se usan los metodos get/set con un argumento adicional. La multiplicidad de un atributo se obtiene
con getSize(). Por ejemplo, suponiendo que un DicomObject dcm contiene un atributo ImageType con multiplicidad 2 y valores DERIVED/SECONDARY, entonces se
puede coger esos valores de la siguiente forma:
r
GVA-ELAI-UPM
PFC0075-2003
153
dcm.set(DDict.dImageType,0,"DERIVED");
dcm.set(DDict.dImageType,1,"SECONDARY");
Secuencias
Las secuencias se tratan de una forma parecida que los valores de multiplicidad
mayor de uno. Cuando un atributo en un DicomObject representa una secuencia (tipo
SQ DICOM), entonces los items de la secuencia pueden ser insertados y cogidos
con los mismos metodos get/set del DicomObject que ahora aceptan y devuelven los
DicomObejcts completos. Por ejemplo, suponiendo que el DicomObject dcm contiene
un atributo DirectoryRecordSequence con un cierto n
umero de items:
154
r
GVA-ELAI-UPM
PFC0075-2003
Manipulaci
on de grupos de atributos
Para usuarios que quieran manipular los grupos enteros del conjunto de datos,
hay el acceso al grupo proporcionado por com.archimed.dicom.GroupList, el cual es
la superclase de com.archimed.DicomObject. Un grupo es un conjunto de atributos
que tienen el mismo n
umero de grupo en su par (grupo,elemento).
void addGroups(DicomObject o)
5.3.3.
r
GVA-ELAI-UPM
PFC0075-2003
155
Leer datasets
void read(java.io.InputStream in)
Este metodo lee todos los atributos DICOM desde un inputStream de un DicomObject. El inputStream puede contener tanto un archivo DICOM como un conjunto
de datos (datasets) DICOM. Cuando el inputStream contiene un archivo de la parte
10 DICOM, se lee y se almacena la Meta File Information en un DicomObject separado que se puede coger mediante getFileMetaInformation(). La transfer syntax se
asume que es Implicit VR Little Endian cuando el inputStream contiene un conjunto de datos DICOM. Cuando el inputStream contiene un archivo de la parte 10 de
DICOM, el transfer syntax se detecta desde la File Meta Information.
Escribir datasets
void write(java.io.OutputStream out, boolean f)
Este
es el metodo mas basico de la exportacion. Si el argumento f se fija como
true, el dataset se codifica en un archivo de la parte 10 de Dicom (archivo Dicom).
En este caso, la File Meta Information se usa si esta presente, o se crea cuando
es necesitada. Observar que la creacion de la meta information puede lanzar una
excepcion, cuando los atributos requeridos faltan (SOP Class UID, SOP Instance
UID).
156
r
GVA-ELAI-UPM
PFC0075-2003
Visualizaci
on de datasets
DicomObject contiene dos metodos para mostrar todos los atributos contenidos
en un OutputStream de forma ordenada para que el ser humano sea capaz de leerlo.
void dumpVRs(java.io.OutputStream os)
void dumpVRs(java.io.OutputStream os, boolean metainfo)
Poner metainfo como true si se quiere ver la File Meta Information.
Ejemplos
Estos trozos de codigo demuestran el facil uso de JDT. Con solo unas lneas de
codigo, es posible construir soluciones DICOM poderosas.
El codigo siguiente lee un archivo DICOM desde un archivo y muestra los atributos
(incluidos los contenidos en la meta information si existe) por la pantalla.
DicomObject dcm = new DicomObject;
dcm.read(new FileInputStream("foo.dcm"));
dcm.dumpVRs(System.out, true);
El siguiente ejemplo lee los datos de un archivo y lo escribe en otro archivo usando
una transfer syntax y una secuencia de codificacion especficas.
DicomObject dcm = new DicomObject;
dcm.read(new FileInputStream("in.dcm"));
dcm.write(new FileOutputStream("out.dcm"), true,
TransferSyntax.ExplicitVRBigEndian, true);
r
GVA-ELAI-UPM
PFC0075-2003
157
5.3.4.
M
etodos u
tiles
Enumeraci
on de los atributos de un dataset
Con el metodo enumerateVRs es posible conseguir una enumeracion (clase de java)
de todos los atributos sontenidos en un DicomObject.
Enumeration e = dcm.enumerateVRs(false);
Devuelve la File Meta Information del DicomObject dcm si existe. Se puede usar
ahora fmi para a
nadir o alterar atributos especficos de esta informacion como se
quiera.
Informaci
on general
Unos pocos metodos de com.archimed.dicom.GroupList proporcionan informacion
general sobre un conjunto de datos:
158
r
GVA-ELAI-UPM
PFC0075-2003
5.4.
5.4. DEPOSITOS
Dep
ositos
Hay unas clases en el paquete com.archimed.dicom que hacen mas facil a los programadores usar los data elements y los registros UIDs.
5.4.1.
La clase com.archimed.dicom.DDict es un almacen de los VRs (value representations) y los data elements. Contiene un n
umero de constantes que representan los
diferentes VRs y un gran conjunto de constantes para los data elements:
Los m
etodos de DDict
La clase DDict tiene metodos para obtener el par (grupo,elemento) de un atributo,
un tipo de atributo, una descripcion del atributo y para consultar una constante DDict
del atributo basada en su par (grupo,elemento).
Devuelve el n
umero de grupo para una constante DDict que representa un atributo.
Devuelve el n
umero de elemento para una constante DDict que representa un
atributo.
r
GVA-ELAI-UPM
PFC0075-2003
159
Devuelve el tipo para una constante DDict que representa un atributo. Los elementos de datos que no estan en la lista de arriba tendran un DDict.tUNKNOWN.
Da una descripcion elaborada para una constante DDict que representa un atributo.
5.4.2.
La clase com.archimed.dicom.UID contiene un deposito de los UIDs DICOM registrados (Parte 6 DICOM).Las constantes que representan los UIDs y que tienen que
ser usadas a traves de JDT se definen en subclases de UID:
160
r
GVA-ELAI-UPM
PFC0075-2003
5.5. IMAGENES
EN JDT
5.5.
Im
agenes en JDT
Esta parte habla de las capacidades de imagen de JDT. Todas las clases relacionadas con las imagenes pueden ser encontradas en el paquete com.archimed.dicom.image.
5.5.1.
La clase DicomImage
5.6.
5.6.1.
DicomImage contiene un n
umero de metodos para insertar los atributos requeridos
que no estan relacionados con los datos de imagen. Una corta descripcion son estos
metodos:
r
GVA-ELAI-UPM
PFC0075-2003
161
5.6.2.
5.6.3.
Hay otra forma de insertar los datos de la imagen. Dado una ImageProducer ip,
construyendo un objeto ImageIO y usando el metodo setImageProducer() para copiar
los datos de imagen desde la ImageProducer a la DicomImage:
162
r
GVA-ELAI-UPM
PFC0075-2003
java.awt.image.ImageProducer getImageProducer()
java.awt.image.ImageProducer getImageProducer(int i)
java.util.Vector getImageProducers()
Para imagenes de escalas de grises con profundidad de pixel mayor que 8 bits, hay
un color model (clase de java) especial com.archimed.dicom.image.GrayColorModel.
Este color model se usa en combinacion con un array int de pxeles, para producir
imagenes de 256 grises sin perdida de datos. Con este GrayColorModel, tambien es
posible meter el Window/Level usado en la produccion de la imagen.
r
GVA-ELAI-UPM
PFC0075-2003
163
5.6.4.
Compresi
on
164
r
GVA-ELAI-UPM
PFC0075-2003
5.7.
DE UNA CONEXION
5.7. CREACION
Creaci
on de una conexi
on
Para establecer una asociacion con una entidad del par DICOM, se hace uso
las clases del paquete com.archimed.dicom.network.. Es necesario un iniciador de la
asociacion y un receptor de la asociacion.
5.7.1.
Iniciador de la asociaci
on
1. Hacer una conexion TCP/IP con la entidad del par DICOM que hace uso las
clases estandares de java.net. En este ejemplo el servidor es Fourier y el puerto
104.
Socket s = new Socket("Fourier",104);
2. Crear un objeto Association con los Input and Output Streams derivadas de
Socket.
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
Association as = new Association(in,out);
3. Preparar un objeto Request con los parametros necesarios para establecer una
asociacion. Los parametros son al menos un ttulo de la entidad de la aplicacion
llamada (called), un ttulo de la entidad de la aplicacion llamar (calling) y un
abstract syntax con un sintaxis de transferencia. En el ejemplo el ttulo de la
entidad called es hola y el calling es Servicio. Estos ttulos no deben ser mas
de largos de 16 caracteres. Conectamos con hola para almacenar una imagen
secundaria de la captura con Implicit Little Endian transfer syntax.
Request request = new Request();
request.setCalledTitle("hola");
request.setCallingTitle("Servicio");
int[] transfersyntaxes = {TransferSyntax.
ImplicitVRLittleEndian};
request.addPresentationContext(SOPClass.
SecondaryCaptureImageStorage, transfersyntaxes);
4. Se enva la peticion a la entidad del par DICOM y recibe la respuesta.
r
GVA-ELAI-UPM
PFC0075-2003
165
as.sendAssociateRequest(request);
Response response = as.receiveAssociateResponse();
5. Analiza la respuesta. Se comprueba si se acepta, se rechaza o se aborta nuestra
peticion.
if (response instanceof Reject)
{
System.out.println("petici
on de asociaci
on rechazada");
System.out.println(response);
}
else if (response instanceof Abort)
{
System.out.println("petici
on de asociaci
on abortada");
System.out.println(response);
}
else
{
System.out.println("petici
on de asociaci
on aceptada");
Acknowledge ack = (Acknowledge)response;
if (ack.getPresentationContexts() != 1)
{
System.out.println("n
umero incorrecto de Contexto
de Presentaci
on");
throw something;
}
int result = ack.getResult(0);
if (result == Acknowledge.ACCEPTANCE)
{
System.out.println("Contexto de Presentaci
on para
Secondary Capture aceptada");
}
else if (result == Acknowlege.ABSTRACT_SYNTAX_NOT_SUPPORTED)
{
System.out.println("Secondary Capture no soportada");
}
else if (result == Ackn...
...
}
6. En este punto se tiene una asociacion valida para el Secondary Capture Image
Storage y podemos enviar imagenes SC a la entidad del par DICOM.
DicomObject cstorerequest;
166
r
GVA-ELAI-UPM
PFC0075-2003
DE UNA CONEXION
5.7. CREACION
DicomObject cstoreresponse;
DicomObject scimage;
7. Acabar asociacion.
as.sendReleaseRequest();
as.receiveReleaseResponse();
5.7.2.
Receptor de la asociaci
on
r
GVA-ELAI-UPM
PFC0075-2003
167
168
r
GVA-ELAI-UPM
PFC0075-2003
DE UNA CONEXION
5.7. CREACION
while (true)
{
result = as.peek();
if (result == Association.PDATA_PDU)
{
dcm = as.receiveCommand();
sopclass = dcm.getS(DDict.dAffectedSOPClassUID);
if(sopclass.equals(sc_sopclass)
{
// Se chequea para ver si es una v
alida petici
on
// C-STORE, si es as
se leen los datos con
// receiveData(), se procesan los datos para el
// almacenaje y se env
a una respuesta C-STORE
}
else if (sopclass.equals(ve_sopclass)
{
// Chequear si es una petici
on v
alida C-ECHO
// y enviar respuesta C-ECHO
}
else
{
System.out.println("sopclass " + sopclass +
" no negociada, abortado");
as.sendAbort(Abort.DICOM_UL_SERVICE_USER,
Abort.REASON_NOT_SPECIFIED);
s.close();
return;
}
}
else if (result == Association.RELEASE_REQUEST)
{
as.receiveReleaseRequest();
as.sendReleaseResponse();
s.close();
System.out.println("asociaci
on acabada");
return;
}
else if (result == Association.ABORT)
{
Abort abort = as.receiveAbort();
s.close();
System.out.println("asociaci
on acabada por el par");
System.out.println(abort);
r
GVA-ELAI-UPM
PFC0075-2003
169
return;
}
}
}
5.8.
5.8.1.
Estructura de JDT
Arbol
de clases
class java.lang.Object
class com.archimed.dicom.network.Association
class java.awt.image.ColorModel (implements java.awt.Transparency)
class com.archimed.dicom.image.GrayColorModel
class com.archimed.dicom.codec.Compression
class com.archimed.dicom.DDate
class com.archimed.dicom.DDateRange
class com.archimed.dicom.DDict
class com.archimed.dicom.DDictEntry
class com.archimed.dicom.Debug
class com.archimed.dicom.network.DimseUtil
class com.archimed.dicom.network.ExtendedNegotiation
class com.archimed.dicom.GroupList
class com.archimed.dicom.DicomObject
class com.archimed.dicom.image.DicomImage
class com.archimed.dicom.image.SCImage
class com.archimed.dicom.image.ImageIO
class com.archimed.dicom.Jdt
170
r
GVA-ELAI-UPM
PFC0075-2003
class com.archimed.dicom.Offsets
class com.archimed.dicom.Person
class com.archimed.dicom.network.Request
class com.archimed.dicom.network.Response
class com.archimed.dicom.network.Abort
class com.archimed.dicom.network.Acknowledge
class com.archimed.dicom.network.Reject
class com.archimed.dicom.network.ResponsePolicy
class com.archimed.dicom.tools.Sequences
class com.archimed.dicom.TagValue
class java.lang.Throwable (implements java.io.Serializable)
class java.lang.Exception
class com.archimed.dicom.DicomException
class com.archimed.dicom.IllegalValueException
class com.archimed.dicom.UnknownUIDException
class com.archimed.dicom.UID
class com.archimed.dicom.MetaSOPClass
class com.archimed.dicom.SOPClass
class com.archimed.dicom.SOPInstance
class com.archimed.dicom.TransferSyntax
class com.archimed.dicom.UIDEntry
class com.archimed.dicom.image.WL
5.8.2.
Packages
Com.archimed.dicom.network
Abort (Abortar): Representa el aborto de una asociacion. Los dos parametros
son, la fuente y la razon del aborto.
r
GVA-ELAI-UPM
PFC0075-2003
171
Com.archimed.dicom.codec
Compression (compresion): Es una clase que proporciona metodos para la descompresion de datos de Pixel. DICOM soporta muchos tipos de tecnicas de
compresion.
Com.archimed.dicom.image
DicomImage: Esta clase provee de metodos para construir una imagen Dicom.
GrayColorModel: Esta clase representa un ColorModel para el empleo con imagenes
de Escala de gris.
172
r
GVA-ELAI-UPM
PFC0075-2003
Com.archimed.dicom.tools
Sequences: Estos objetos proveen los atajos para coger/poner valores dentro de secuencias. La conversion de valores esta hecha usando el esquema de
conversion DicomType-JavaType dada en la clase DicomObject.
Com.archimed.dicom
DDate: Esta clase representa la fecha de un objeto, conteniendo el da, mes y
a
no. Se ha desarollado en correspondencia al tipo Dicom DA. Es u
til, cuando
se quiere buscar en una gama de fechas.
DDateRange: Esta clase representa la gama de fechas.
DDict: Esta clase provee de un diccionario (Diccionario de datos Dicom) para
los VRs y todos los elementos de datos. Cada par (grupo,elemento) es accesible por una variable static int. Por ejemplo, (0010,0010) es representado por
DDic.dPatientName.
DDictEntry: Un objeto para una etiqueta que puede ser almacenado en el diccionario de datos.
Debug: Proporciona una variable static int por si hay que imprimir informacion
de reparacion de los errores a System.err.
DicomObject: Esta es la clase base de todos los datasets. Los metodos de acceso
proporcionados aqu son el modo de obtener/poner elementos de dato (data
elements) dentro de un objeto Dicom (DicomObject).
GroupList: Provee de metodos para el acceso de datos por grupo.
Jdt: Para obtener informacion sobre este Jdt
MetaSOPClass: Extension de la clase UID.
Offsets (Compensacion): Esta clase proporciona utilidades para calcular compensaciones en un DicomObject que va a ser escrito.
Person: Esta clase representa el PN (Person Name) en Dicom.
r
GVA-ELAI-UPM
PFC0075-2003
173
5.9.
Conclusiones
Una vez trabajado y experimentado con los dos toolkit de DICOM (dcmtk y JDT),
se llegan a las siguientes conclusiones:
El toolkit dcmtk351 cuenta con la ventaja de ser un producto gratuito, pero si
no se es un gran experto en materia DICOM y en programacion en C++, la profundizacion de su estudio es muy complicada y engorrosa, debido a la poca documentacion
proporcionada con dicha herramienta y a la gran dificultad y amplitud del codigo.
Por el contrario, JDT es un producto no gratuito, pero cuenta con las grandes
ventajas que el toolkit dcmtk351 no tiene. Lo primero a se
nalar es que el lenguaje
de programacion es JAVA, con las ventajas que conlleva con respecto a C++. Por
otro lado, contiene una documentacion amplia y muy bien estructurada, gracias a la
utilidad de javadocs, lo que facilita enormemente el trabajo y su comprension. JDT
contiene un arbol de clases, informacion de los diferentes packages, informacion sobre
las clases y sus metodos.
La eleccion despues de trabajar con los dos Toolkit ha sido el Java Dicom Toolkit
(JDT), ya que es mas facil de utilizar y debido a la creacion de un Cliente/Servidor
para la Red, las aplicaciones en Java son mas faciles y potentes.
174
r
GVA-ELAI-UPM
PFC0075-2003
5.9. CONCLUSIONES
r
GVA-ELAI-UPM
PFC0075-2003
175
Captulo 6
Desarrollo de aplicaci
on
6.1.
Introducci
on
177
CAPITULO 6. DESARROLLO DE APLICACION
Por lo tanto para el desarrollo del Servidor se utiliza el compilador TextPad 4.7.0,
las libreras SDK v1.4.1, el paquete JCE para la encriptacion/desencriptacion y las
libreras DICOM JDT, mediante las cuales se va a implementar la aplicacion DICOM.
Para el desarrollo del Cliente es necesaria la utilizacion del entorno de desarrollo
JBuilder (version 7.0 Enterprise, pero compatible con la 8.0 y 9.0), las libreras del
SDK v1.4.1, el paquete JCE1 y las libreras DICOM JDT.
6.2.
Uso de SDK
6.2.1.
Introducci
on
En esta seccion se van a ver los aspectos mas importantes para la compilacion de
archivos fuentes y se van a describir las herramientas mas utilizadas en el trabajo con
Java.
Para poder realizar aplicaciones en Java es necesaria la instalacion de las librerias de SDK. Este paquete de libreras viene con la Maquina Virtual de Java, para
poder desde cualquier archivo fuente (.java) poder crear una apliacion. Esta maquina
virtual tambien es valida para poder visualizar y que se puedan ejecutar programas
desarrollados en java.
6.2.2.
Instalaci
on en Windows 98
La instalacion puede ser o bien solo de la Maquina Virtual de Java(JRE Java Enviroment Enterprise), para poder ejecutar programas de Java pero no poder compilar
ficheros fuente, o bien la instalacion de las libreras y la MVJ para poder ejecutar y
compilar programas Java.
M
aquina Virtual de Java
Para la instalacion de la Maquina Virtual de Java se debe descargar de la pagina
http://java.sun.com, teniendo que elegir la opcion del JRE para Windows. Una vez
descargado el archivo j2re-1_4_1_03-windows-i586-i.exe, se procede a la instalacion
178
r
GVA-ELAI-UPM
PFC0075-2003
SDK
La instalacion a realizar son de las libreras de la u
ltima version SDK 1.4.1 que se
puede descargar de la pagina (http://java.sun.com). Con la instalacion de las libreras
viene incluida la JVM2 .
El primer paso a realizar es descargar el archivo, eligiendo la opcion SDK para
Windows. Este archivo se llama j2sdk-1_4_1_03-windows-i586.exe.
El siguiente paso es ejecutar el archivo, de esta forma se generan las libreras y
los ejecutables de las utilidades que ofrece Java, como son el compilador javac.exe, el
javadocs,. . .
El tercer paso es el mas importantes ya que aunque se tengan las libreras y los
ejecutables, hay que decir a la computadora donde estan. Este paso es el que diferencia
Windows 95/98 con Windows NT/2000/XP. En Windows 98 hay que dar el PATH de
donde se encuentran los ejecutables y hay que crear un CLASSPATH donde debemos
dar el camino para llegar a las libreras del SDK. Los pasos para realizar esto son:
1. En el directorio raz del sistema operativo C:\, se encuentra el archivo Autoexec.bat. Este archivo se carga cuando se inicia la computadora. Para modificarlo, hay que abrir el archivo con un editor de texto, esto se puede hacer
haciendo click derecho mientras se pulsa Shift, y se elige Abrir con. . . . Saldra un
men
u y se debe elegir un editor de texto, por ejemplo el Bloc de Notas.
2. Una vez abierto, nos disponemos a escribir en el PATH. Hay una lnea en la
que pone SET PATH, pues en esa lnea debemos incluir el directorio bin del
sdk1.4.1. con lo que quedara:
SET PATH = . . . ;C:\J2SDK1.4.1_03\BIN; %Path %
3. Ahora hay que crear el CLASSPATH. Para realizar esto hay que escribir el final
del fichero:
SET CLASSPATH = C:\j2sdk1.4.1_03\lib\dt.jar;.; %Classpath %
4. Salir guardando los cambios del fichero.
De esta forma quedan instaladas las libreras del SDK y la Maquina Virtual de
Java.
2
r
GVA-ELAI-UPM
PFC0075-2003
179
CAPITULO 6. DESARROLLO DE APLICACION
Para utilizar las libreras en cualquier fichero fuente, basta realizar un import del
paquete o clase a utilizar. Para poder trabajar con SDK es muy importante disponer
de la ayuda del API de la pagina web http://java.sun.com. La figura 6.1 muestra la
organizacion de esta API.
JCE
El JCE (Java Cryptography Extension) es un paquete especial de Java, el cual es
necesario para la encriptacion y desencriptacion de la informacion que se transfiere
en las asociaciones realizadas en la aplicacion desarrollada.
Para la instalacion hay que seguir una serie de pasos:
1. Bajarse este paquete de internet, de las posibles paginas como http://java.sun.com
o bien http://snad.ncsl.nist.gov.
2. Descomprimir el archivo descargado, el jce-b1.1-socket.zip. El lugar donde hemos
descomprimido nosotros es en C:\JAVA
180
r
GVA-ELAI-UPM
PFC0075-2003
3. A
nadir en el CLASSPATH:
SET CLASSPATH = C:\j2sdk1.4.1_03\lib\dt.jar;C:\JAVA\JCE;
C:\JAVA\JCE\DemoApps;C:\JAVA\JCE\Server;C:\JAVA\JCE\SCM;
C:\JAVA\JCE\rfm;C:\JAVA\JCE\jaudio;.; %Classpath %
4. Poner en el PATH:
SET PATH = . . . ;C:\J2SDK1.4.1_03\BIN;C:\JAVA\JCE\jaudio; %Path %
5. Crear una carpeta llamada .jce en C:\ y copiar en este directorio el .jce que
viene en el archivo descargado de internet, que esta dentro de la carpeta JCE.
6.2.3.
Instalaci
on en Windows 2000
M
aquina Virtual de Java
1. Descargar de la pagina http://java.sun.com, teniendo que elegir la opcion del
JRE para Windows.
2. Una vez descargado el archivo j2re-1_4_1_03-windows-i586-i.exe, se procede
SDK
1. Descargar el archivo eligiendo la opcion SDK para Windows. Este archivo se
llama j2sdk-1_4_1_03-windows-i586.exe.
2. Ejecutar el archivo de esta forma se generan las libreras y los ejecutables de
las utilidades que ofrece Java, como son el compilador javac.exe, el javadocs,
jar.exe,. . .
3. Entrar en Inicio->Configuraci
on->Panel de Control->Sistema->Avanzado->Variables
de Entorno
4. En Variables del Sistema buscar la variable Path y pulsar Editar. . .
5. Seguido de lo que ponga escribir: C:\J2SDK1.4.1\03\BIN;
6. Pulsar Nueva. . . , y en nombre de variable escribir classpath y en valor de variable
escribir C:\j2sdk1.4.1_03\lib\dt.jar;.;
r
GVA-ELAI-UPM
PFC0075-2003
181
CAPITULO 6. DESARROLLO DE APLICACION
7. Como u
ltimo paso dar a Aceptar tres veces secuencialmente para que los cambios
se apliquen.
JCE
1. Bajarse este paquete de internet, de las posibles paginas como http://java.sun.com
o bien http://snad.ncsl.nist.gov.
2. Descomprimir el archivo descargado, el jce-b1.1-socket.zip. El lugar donde hemos
descomprimido nosotros es en C:\JAVA
3. A
nadir en el CLASSPATH, en variables de entorno:
SET CLASSPATH = C:\j2sdk1.4.1_03\lib\dt.jar;C:\JAVA\JCE;
C:\JAVA\JCE\DemoApps;C:\JAVA\JCE\Server;C:\JAVA\JCE\SCM;
C:\JAVA\JCE\rfm;C:\JAVA\JCE\jaudio;.; %Classpath %
4. Poner en el PATH, variables de entorno:
SET PATH = . . . ;C:\J2SDK1.4.1_03\BIN;C:\JAVA\JCE\jaudio; %Path %
5. Crear una carpeta llamada .jce en C:\ y copiar en este directorio el .jce que
viene en el archivo descargado de internet, que esta dentro de la carpeta JCE.
6.2.4.
Compilador
Es una herramienta del JDK o SDK3 . Realiza un analisis del sintaxis del codigo escrito en los ficheros fuente de Java (con extension *.java). Si no encuentra errores en el
codigo genera los ficheros compilados (con extension *.class). En el JDK de Sun dicho
compilador se llama javac.exe. Java.exe es el interprete para sistemas PC/Windows.
Una vez compilado no debera ser necesaria ninguna modificacion por el hecho
de cambiar de procesador o de ejecutarlo en otra maquina. La clave consistio en
desarrollar un codigo neutro el cual estuviera preparado para ser ejecutado sobre
la JVM.
Para realizar una aplicacion con el compilador del SDK, se debe escribir el codigo
en Java en un editor de texto cualquiera como puede ser el Bloc de Notas. Una vez
escrito debe ser guardado el fichero con extension .java, por ejemplo nombre.java. La
3
182
JDK para las antiguas versiones y SDK para las nuevas versiones
r
GVA-ELAI-UPM
PFC0075-2003
compilacion debe realizarse con un shell de comandos, como el del MSDOS. Para
realizar la compilacion escribir:
Javadocs
En el dise
no del lenguaje se ha tenido en cuenta la documentacion de los programas
y el mantenimiento de dicha documentacion. La documentacion y el codigo se incluyen
dentro del mismo fichero.
El tipo de comentario especfico para documentar debe ser:
/** Comentario de documentaci
on */
La generacion de la documentacion se realiza en formato HTML. Se pueden crear
etiquetas de documentacion, que luego en la documentacion en HTML, saldra como
un peque
no apartado, esto se realiza poniendo @ delante de la lnea que queramos
que sea una etiqueta.
r
GVA-ELAI-UPM
PFC0075-2003
183
CAPITULO 6. DESARROLLO DE APLICACION
Los comentarios deben aparecer inmediatamente antes de los elementos a comentar. La utilidad de documentacion javadoc es un programa que se suministra dentro
de la distribucion de J2SE4 .
/**
* La clase <em> Storagescp </em> es utilizada para poner al Servidor
DICOM a la escucha de asociaciones.
* @author Fernando Ballesteros Herranz
* @version Beta
*
*/
Modo de uso:
Javadoc [opciones] [paquetes] [archivosFuente] [@ficheros]
Hay mas de 40 opciones (consultar API) que modifican el funcionamiento de
Javadoc.
4
184
r
GVA-ELAI-UPM
PFC0075-2003
jar
Esta utilidad es usada para generar archivos .jar que contienen todas las clases
de la aplicacion realizada. Esto se realiza para su posterior distribucion. Ejecutando
el .jar generado, la MVJ podra ejecutar el programa desarrollado.
El formato basico del comando para crear un fichero JAR es:
jar cf fichero-jar fichero(s)-de entrada
Este comando tiene varias opciones y argumentos:
r
GVA-ELAI-UPM
PFC0075-2003
185
CAPITULO 6. DESARROLLO DE APLICACION
Los pasos seguidos para crear el JAR de nuestra aplicacion Servidor. Estos pasos
se realizan en el Shell de comandos de MSDOS:
1. Crear un archivo nuevo (incluyendo las clases y otros recursos que te interesen
empaquetar).
jar Main.jar c:\encri.class c:\Connection.class c:\Storagescu.class
c:\Storagescp.class
2. Extraer el archivo MANIFEST.MF del archivo .jar creado:
jar xvf Main.jar META-INF/MANIFEST.MF
3. Modicar dicho archivo (en alg
un editor de texto corriente). Lo que se hace es
agregar la lnea siguiente al archivo MANIFEST.MF (este paso no se hace en
MSDOS):
Main-Class: Storagescp
4. Actualizar el .jar con el archivo MANIFEST.MF modificado:
jar -uvfm Main.jar META-INF/MANIFEST.MF
5. Probar el funcionamiento del .jar:
java -jar prueba.jar o bien haciendo doble click sobre el fichero Main.jar.
6.3.
6.3.1.
Uso de TextPad
Introducci
on
6.3.2.
Caractersticas
186
r
GVA-ELAI-UPM
PFC0075-2003
tipeo mas comunes con comandos, y transportar palabras, caracteres y lneas. El texto puede ubicarse automaticamente en el margen, o en una columna especificada, si
no cabe en una lnea. Cualquier cambio puede ser deshecho o hecho de nuevo. Las
combinaciones con frecuencia usadas de comandos se pueden salvar como macros. El
programa posee herramientas personalizables y opciones de b
usquedas. Ver figura 6.4
6.3.3.
Con este editor se pueden escribir documentos fuentes de java. Para crearlos tan
solo hay que grabarlos con la extension .java.
El TextPad tambien tiene un compilador de java, aunque carece de maquina virtual para ejecutar programas desarrollados en java y de las libreras. Este compilador
solo funciona con la instalacion previa de las libreras del JDK o SDK.
Una vez instaladas las libreras, para instalar el TextPad tan solo hay que ejecutar
el archivo Setup del programa.
r
GVA-ELAI-UPM
PFC0075-2003
187
CAPITULO 6. DESARROLLO DE APLICACION
6.4.
6.4.1.
Uso de JBuilder
Introducci
on
En esta seccion se van a ver los aspectos mas importantes del JBuilder 7.0 Enterprise. Este entorno de desarrollo esta orientado a la creacion de interfaces graficas,
por este motivo la mayor parte de la aplicacion cliente DICOM ha sido desarrollada
con el JBuilder. La aplicacion del cliente es compatible con las nuevas versiones que
han ido saliendo a lo largo del a
no del JBuilder como las versiones 8.0 y 9.0.
6.4.2.
Instalaci
on
La instalacion es muy sencilla tan solo hay que seguir estos pasos:
188
r
GVA-ELAI-UPM
PFC0075-2003
6.4.3.
JDK y JBuilder
Al instalarse el JBuilder, instala por defecto el JDK v1.3.1 y utiliza estas libreras
para compilar.
En nuestra aplicacion ha sido necesaria la utilizacion de las JDK 1.4.1, por lo que
hay que cambiar la referencia de las libreras. Para cambiar las JDK 1.3.1 a las JDK
1.4.1 hay realizar una peque
na configuracion dentro del JBuilder.
1. Entrar en Herramientas
2. Pinchar en Configurar JDK. . .
r
GVA-ELAI-UPM
PFC0075-2003
189
CAPITULO 6. DESARROLLO DE APLICACION
6.4.4.
Creaci
on de aplicaciones en JBuilder
Se va a crear un simple editor de texto para ver como se realiza una aplicacion en
el JBuilder. A partir de este ejemplo es posible realizar aplicaciones mas completas y
complejas. Tan solo recordar que el JBuilder esta orientado a la creacion de interfaces
de usuario y con esto desarrollamos nuestra aplicaion Cliente DICOM.
Pasos:
Paso 1: Creaci
on de un proyecto
Para crear un proyecto se usa el asistente para proyectos y el asistente para aplicaciones, de esta forma:
190
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
191
CAPITULO 6. DESARROLLO DE APLICACION
Paso 2: A
nadir
area de texto
En este paso se crea un area de texto que rellena por completo el marco de la
interfaz de usuario entre la barra de men
us y la barra de estado. Para lograrlo, el
gestor de dise
no del contenedor principal de la interfaz de usuario debe utilizar BorderLayout. Como consecuencia de la utilizacion del Asistente para aplicaciones, el
principal contenedor de esta interfaz de usuario, que aparece como this en el arbol de
192
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
193
CAPITULO 6. DESARROLLO DE APLICACION
194
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
195
CAPITULO 6. DESARROLLO DE APLICACION
196
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
197
CAPITULO 6. DESARROLLO DE APLICACION
14. Guardar el archivo y ejecutar la aplicacion. Ahora la interfaz de usuario ofrecera un aspecto similar al de la figura 6.14.
Paso 4: A
nadir un cuadro de di
alogo Selector de fuentes
Se comienza a enlazar los sucesos de men
u, empezando con el elemento de men
u Edici
on->Fuente que es el que va a mostrar el cuadro de dialogo Selector de fuentes.
En primer lugar, para poder utilizar esta opcion de men
u, se debe a
nadir un
componente cuadro de dialogo Selector de fuentes a la clase TextEditFrame:
1. Abrir TextEditFrame.java en el dise
nador de interfaces.
2. Seleccionar la pesta
na Mas dbSwing de la paleta de componentes y hacer click
en el componente FontChooser.
3. Hacer click en cualquier lugar del arbol de componentes o en el dise
nador de
interfaces, para a
nadir el FontChooser al dise
no. Esto situara el componente
dentro de la clase como fontChooser1 y lo mostrara en la carpeta Otros del
arbol de componentes.
Solo se ve el componente cuadro de dialogo en el arbol de componentes, no en el
dise
nador de interfaces.
Creacion de un suceso para el elemento de men
u Edici
on->Fuente, que lanzara el
Selector de fuentes:
1. Seleccionar el elemento de men
u Edici
on->Fuente en el arbol de componentes.
Debera ser jMenuItem5 (en el segundo nodo de men
u, llamado jMenu1). Se
observa que la propiedad text para este elemento de men
u del Inspector dice
Fuente. No importa si su elemento de men
u Fuente tiene un n
umero diferente
a este. Pero aseg
urarse de seleccionar el correspondiente al men
u Fuente.
2. Hacer click en la pesta
na sucesos en el Inspector, y hacer doble click en el campo de valor (la segunda columna) del suceso actionPerformed. En los men
us,
botones y otros muchos componentes de la interfaz de usuario de Java, actionPerformed es el suceso principal de usuario, que debera capturar para responder al usuario cuando utiliza el men
u o el boton. El nombre del metodo de
tratamiento de sucesos aparece en el campo de valor. Si el metodo no existe
todava, esta operacion muestra el nombre propuesto por defecto para el nuevo
metodo de gestion del suceso. Para este nuevo manejador de sucesos, el nombre
propuesto es jMenuItem5 actionPerformed. Figura 6.15
198
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
199
CAPITULO 6. DESARROLLO DE APLICACION
Paso 5: Vinculaci
on de sucesos de elemento de men
u al cuadro de di
alogo
Selector de fuentes
Se va a utilizar el cuadro de dialogo Selector de fuentes para modificar la propiedad
font de textArea1.
200
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
201
CAPITULO 6. DESARROLLO DE APLICACION
jTextArea1.repaint();
}
3. Guardar y ejecutar la aplicacion y escribir algo en el area de texto.
4. Seleccionar el texto y utilizar el elemento de men
u Edici
on->Fuente para cambiar la fuente. En esta aplicacion, se cambia la fuente de la totalidad del area de
texto (no solamente del texto seleccionado). No espere que la configuracion de
fuentes se mantenga. No introduciremos codigo para activar esa caracterstica.
5. Cerrar la aplicacion EditorDeTexto.
Paso 6: Vinculaci
on de sucesos de elementos de men
u a JColorChooser
A continuacion se crean los sucesos de men
u Edici
on->Color de texto y Edici
on>Color de fondo y se los vincula con el cuadro de dialogo JColorChooser de Swing.
Al no necesitar asignar valores a ninguna de las propiedades de JColorChooser en
el dise
nador, no es preciso a
nadirlo a la interfaz de usuario del dise
nador. Puede llamarse directamente desde el manejador del suceso actionPerformed() de un elemento
de men
u del siguiente modo:
1. Vuelva al dise
nador de TextEditFrame.java.
2. Seleccionar el segundo elemento de men
u del arbol de componentes en Edicion
(jMenuItem6) que tiene escrito Color de texto en la propiedad actionCommand.
3. Seleccionar la pesta
na Sucesos en el Inspector y haga click tres veces en el suceso
actionPerformed() para crear el manejador del suceso:
void jMenuItem6\verb_actionPerformed(ActionEvent e) {
}
4. A
nadir el codigo siguiente en el stub del manejador del suceso:
//Gestiona el elemento de men
u "Color de texto"
Color color = JColorChooser.showDialog(this,"Color de texto",
jTextArea1.getForeground());
if (color != null) {
jTextArea1.setForeground(color);
}
//pinta el men
u de nuevo una vez que el elemento
//se ha seleccionado
this.repaint();
202
r
GVA-ELAI-UPM
PFC0075-2003
5. Volver al dise
nador.
6. Seleccionar el tercer elemento de men
u en el arbol de componentes, en Edicion
(menuItem7), que debe tener la etiqueta Color de fondo en la propiedad
actionCommand. Crear un suceso actionPerformed() para el, tal como hizo con
jMenuItem6
7. Insertar el siguiente codigo en el suceso actionPerformed() de jMenuItem7:
// Gestiona el elemento de men
u "Color de fondo"
Color color = JColorChooser.showDialog(this,"Color de fondo",
jTextArea1.getBackground());
if (color != null) {
jTextArea1.setBackground(color);
}
//pinta el men
u de nuevo una vez que el elemento
//se ha seleccionado
this.repaint();
8. Guardar el archivo, compilar y ejecutar la aplicacion. Escribir texto y hacer
pruebas con los colores de primer plano y de fondo.
9. Cerrar la aplicacion EditorDeTexto.
Paso 7: Adicci
on de un manejador a un suceso de men
u para borrar el
area de texto
Se va a capturar el elemento de men
u Archivo->Nuevo con un manejador que borra
el contenido del area de texto.
1. Vuelva al dise
nador.
2. Seleccionar el elemento de men
u Archivo->Nuevo del arbol de componentes
(jMenuItem1).
3. Crear un suceso actionPerformed() e introducir en el este codigo:
// Gestiona el elemento de men
u Archivo|Nuevo.
// Borra el texto del
area del texto.
jTextArea1.setText("");
4. Guardar y ejecutar la aplicacion, escribir algo en el area de texto y ver que sucede
al seleccionar Archivo->Nuevo. Debera borrarse el contenido. Observar que no
se pregunta si se desea guardar el archivo antes. Para poder tratar este aspecto,
se tiene que configurar la infraestructura para la lectura y escritura de archivos
de texto, para controlar si el archivo ha cambiado y necesita guardarse.
r
GVA-ELAI-UPM
PFC0075-2003
203
CAPITULO 6. DESARROLLO DE APLICACION
Paso 8: A
nadir un cuadro de di
alogo selector de archivos
Se va a enlazar el elemento de men
u Archivo->Abrir con un manejador de un suceso
que presenta al usuario un JFileChooser (cuadro de dialogo para abrir archivos) para
archivos de texto. Cuando el usuario selecciona un archivo y hace click en Aceptar
el manejador del suceso abre el archivo de texto y coloca su contenido dentro de
JTextArea.
1. Volver al dise
nador y seleccionar el componente JFileChooser de la ficha Swing
Containers de la paleta de componentes.
2. Hacer click en la carpeta IU del arbol de componentes para colocar el componente.
3. Seleccionar el elemento de men
u Archivo->Abrir en el arbol de componentes
(jMenuItem2).
4. Crear un suceso actionPerformed() e introducir este codigo:
//Gestionar el elemento de men
u Archivo|Abrir.
//Utilizar la versi
on OPEN del cuadro de di
alogo, comprobar
//el valor devuelto de Aceptar/Cancelar
if (JFileChooser.APPROVE_OPTION == jFileChooser1.
showOpenDialog(this)) {
// Muestra el nombre del directorio y archivos abiertos en
//la barra de estado.
statusBar.setText("Abierto "+jFileChooser1.getSelectedFile().
getPath());
// El c
odigo debe ir aqu
para cargar realmente el texto
// en el TextArea.
}
5. Salvar y ejecutar la aplicacion. En el men
u Archivo->Abrir, seleccionar un archivo y pulsar aceptar. Debe aparecer el nombre del archivo y el directorio completo
en la lnea de estado en la parte inferior de la ventana. Sin embargo, el area de
texto seguira vaca.
6. Cerrar la aplicacion EditorDeTexto antes de continuar.
204
r
GVA-ELAI-UPM
PFC0075-2003
Paso 9: A
nadir c
odigo para leer texto de un archivo
Se va a a
nadir codigo para leer el texto del archivo seleccionado por el usuario y
ponerlo en el JTextArea.
En primer lugar, hay que a
nadir un nuevo metodo a la clase para realizar la
operacion de apertura del archivo. Este metodo se llamara openFile().
1. Cambiar el editor a TextEditFrame.java e introducir el siguiente metodo openFile(). Se puede poner en cualquier lugar de la clase (fuera de otros metodos).
Un buen lugar para ubicarlo es justo despues del codigo del metodo jbInit() y
justo antes del suceso jMenuFileExit_actionPerformed().
// Abrir el archivo con nombre; lee el texto del archivo al
//jTextArea1; informar a la barra de estado.
void openFile(String fileName)
{
try
{
// Abrir un archivo con nombre.
File file = new File(fileName);
// Obtener el tama~
no del archivo abierto.
int size = (int)file.length();
// Asignar cero a un contador para realizar un recuento de
// los caracteres que se han le
do del archivo.
int chars_read = 0;
// Crear un lector de entrada basado en el archivo,
//para leer los datos.
// FileReader gestiona las conversiones de c
odigo de
//caracteres internacionales.
FileReader in = new FileReader(file);
// Crea una matriz de caracteres del tama~
no del archivo,
// para utilizarla como b
ufer de datos, en el que leer
// los datos del texto.
char[] data = new char[size];
// Leer todos los caracteres disponibles en el b
ufer.
while(in.ready()) {
// Incrementar el recuento de cada car
acter le
do,
// y acumularlos en el b
ufer de datos.
r
GVA-ELAI-UPM
PFC0075-2003
205
CAPITULO 6. DESARROLLO DE APLICACION
206
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
207
CAPITULO 6. DESARROLLO DE APLICACION
208
r
GVA-ELAI-UPM
PFC0075-2003
showSaveDialog(this)) {
// Asignar al nombre de archivo actual la selecci
on
//del usuario
// a continuaci
on realizar un saveFile normal
currFileName = jFileChooser1.getSelectedFile().getPath();
//pinta el men
u de nuevo una vez que el elemento se ha
//seleccionado
this.repaint();
return saveFile();
}
else {
this.repaint();
return false;
}
}
7. Volver al dise
nador y crear un manejador del suceso actionPerformed() para el
elemento de men
u Archivo->Guardar (jMenuItem3). Insertar el siguiente codigo:
//Gestionar el elemento de men
u Archivo|Guardar.
saveFile();
8. Crear un manejador de sucesos actionPerformed() para el elemento de men
u Archivo>Guardar como. . . (jMenuItem4) e introducir este codigo:
//Gestionar el elemento de men
u Archivo|Guardar como.
saveAsFile();
9. Guardar y compilar el archivo. Ejecutarlo e intentar guardar texto en un archivo.
10. Cerrar la aplicacion EditorDeTexto.
r
GVA-ELAI-UPM
PFC0075-2003
209
CAPITULO 6. DESARROLLO DE APLICACION
2. A
nadir el codigo siguiente al final de este metodo para borrar el contenido de
las variables dirty y currFileName. Colocarlo inmediatamente detras de la lnea
jTextArea1.setText();, y antes de la llave de cierre.
// borra el nombre de archivo actual y define el
// archivo como limpio:
currFileName = null;
dirty = false;
Se utiliza el componente cuadro de dialogo JOptionPane para presentar un
cuadro de mensaje de confirmacion para constatar si el usuario desea guardar un
archivo modificado antes de cerrarlo cuando selecciona Archivo->Abrir, Archivo>Nuevo o Archivo->Salir. Este cuadro de dialogo se abre con una llamada a
un metodo de clase en JOptionPane, por lo que no es necesario a
nadir un
componente JOptionPane al programa.
3. A
nadir el metodo okToAbandon() siguiente al codigo fuente. Puede situar este
metodo justo a continuacion del metodo saveAsFile():
// Comprobar si el archivo se ha modificado.
// Si es as
obtener del usuario una decisi
on ">Guardar?
// s
/no/cancelar".
boolean okToAbandon() {
int value = JOptionPane.showConfirmDialog(this,
">Guardar cambios?", "Editor de texto", JOptionPane.
YES_NO_CANCEL_OPTION) ;
switch (value) {
case JOptionPane.YES_OPTION:
// s
, por favor guardar cambios
return saveFile();
case JOptionPane.NO_OPTION:
// no, abandonar modificaciones
//por ejemplo devolver true sin guardar
return true;
case JOptionPane.CANCEL_OPTION:
default
// cancelar
return false;
}
}
4. Situar las llamadas a este metodo okToAbandon() en la parte superior de los
manejadores de los sucesos de Archivo->Nuevo y Archivo->Abrir, as como en
el manejador del suceso de Archivo->Salir generado por el asistente. En cada
210
r
GVA-ELAI-UPM
PFC0075-2003
r
GVA-ELAI-UPM
PFC0075-2003
211
CAPITULO 6. DESARROLLO DE APLICACION
System.exit(0);
}
}
Ahora, estos metodos de tratamiento de los sucesos de men
u realizan su
funcion solo si okToAbandon() devuelve true.
5. Guardar y ejecutar el programa e intentar abrir, editar y guardar varios archivos.
6. Cerrar la aplicacion EditorDeTexto.
Con estos pasos se tiene un conocimiento basico de como crear un GUI (graphical
user interface) que es nuestro punto basico para construir nuestra aplicacion DICOM.
6.5.
Instalaci
on de JDT
Estas son las libreras de Java utilizadas que implementan funciones del estandar
DICOM. Es necesario hacer una instalacion manual como la realizada con las JDK.
Tambien al realizar el programa se han utilizado las libreras JDT que se distribuyen
de forma gratuita por lo que tienen un perodo de validez, este perodo se acaba el
22 de Abril del 2003, pues bien para poder utilizarlas, lo que hacemos es retrasar el
reloj del ordenador hasta el 22 Abril del 2002 y as tenemos un a
no completo para
poder utilizar las libreras.
Para realizar la instalacion es com
un en todos los sistemas operativos el crear una
carpeta que se llame como se quiera, en nuestro caso se llama classpath. En esta
carpeta hay que guardar los archivos enviados por softlink que son jdt.jar y jdt.key.
La pagina para hacer la peticion de las libreras es www.softlink.be.
En nuestro caso hemos creado una carpeta llamada classpath en el disco D:\, por
lo que hay que copiar los archivos jdt.jar y jdt.key en D:\classpath.
6.5.1.
Instalaci
on en Windows 95/98
Para la instalacion de las libreras JDT en este sistema operativo, hay que abrir el
archivo autoexe.bat que se encuentra en C:\ con un editor de texto (click derecho
sobre el archivo mientras se deja pulsado Shift, y elegimos el Bloc de Notas). En la
variable classpath creada anteriormente cuando instalamos las libreras JDK, hay que
escribir el path o camino para llegar a los archivos de las libreras JDT. En nuestro
caso es:
212
r
GVA-ELAI-UPM
PFC0075-2003
DE JDT
6.5. INSTALACION
D:\classpath\jdt.key;D:\classpath\jdt.jar;
Una vez realizado esto, hay que hacer una copia del archivo jdt.key en los
directorios donde haya archivos fuente que utilicen estas libreras. Por ejemplo si
tenemos en la carpeta C:\java un archivo fuente main.java que utilice estas libreras,
hay que poner en la carpeta al archivo jdt.key.
6.5.2.
Instalaci
on en Windows NT/2000/XP
Para la instalacion de JDT, hay que entrar en las variables de entorno. Para llegar
a las variables de entorno ir a Inicio->Configuraci
on->Panel de Control->Sistema>Avanzado->Variables de entorno. . . y en variables del sistema pinchar en la variable
classpath creada anteriormente, ah a
nadir:
D:\classpath\jdt.key;D:\classpath\jdt.jar;
Una vez realizado esto, hay que hacer una copia del archivo jdt.key en los
directorios donde haya archivos fuente que utilicen estas libreras. Por ejemplo si
tenemos en la carpeta C:\java un archivo fuente main.java que utilice estas libreras,
hay que poner en la carpeta al archivo jdt.key.
6.5.3.
Una vez instaladas las libreras ahora hay que incluir las libreras en el proyecto
que se este realizando una aplicacion DICOM. Este proceso es el mismo para cualquier
tipo de libreras que se quieran utilizar. Para ello hay que realizar los siguientes pasos:
r
GVA-ELAI-UPM
PFC0075-2003
213
CAPITULO 6. DESARROLLO DE APLICACION
214
r
GVA-ELAI-UPM
PFC0075-2003
DE SERVIDOR DICOM
Fernando Ballesteros Herranz 6.6. IMPLEMENTACION
Con esto podemos declarar nuevos objetos de las clases de JDT, por ejemplo:
DicomObject CT = new DicomObject();
Las libreras instaladas ya son utilizables en el proyecto y se puede trabajar con
ellas.
6.6.
6.6.1.
Implementaci
on de Servidor DICOM
Introducci
on
La aplicacion Servidor DICOM implementa todas las funciones DICOM que puede
realizar un servidor con las libreras JDT. Se ha realizado un programa multiplataforma que estara en ejecucion indefinidamente y que el mismo es capaz de administrarse
sin mantenimiento exterior.
El programa se ha elaborado con Java usando el TextPad como compilador con
el soporte las libreras SDK 1.4.1 y JDT de DICOM.
El servidor realizado da m
ultiples elementos servicio a los clientes como son CSTORE, C-MOVE, C-FIND, C-GET y C-CANCEL. Con estos elementos de servicio
se ha podido implementar las funciones query, guardar, enviar, editar y listar una los
archivos Dicom que se encuentran en el servidor. Todos estos servicios de red estan
codificados mediante algoritmos DES5 de encriptacion.
El servidor DICOM realizado es multiusuario (multihilo), lo que quiere decir que
si hay varios clientes intentando acceder al servidor y haciendo peticiones al este,
el mismo administra las peticiones en diferentes hilos y as puede dar servicios a
diferentes clientes a la vez.
El servidor va dando informes sobre lo que se va desrrollando e informacion acerca
de los servicios que esta realizando y le estan pidiendo los clientes.
Vamos a analizar cada funcion que realiza el servidor. Los pasos previos a todas las
funciones es el que se eralice una asociacion entre cliente y servidor y esten deacuerdo
en la informacion que van a compartir.
5
r
GVA-ELAI-UPM
PFC0075-2003
215
CAPITULO 6. DESARROLLO DE APLICACION
6.6.2.
Listar
EL servidor a peticion del cliente, realiza una lista de los archivos Dicom contenidos
en la base de datos. Esta lista es enviada y codificada por el servidor a los clientes
que la soliciten.
216
r
GVA-ELAI-UPM
PFC0075-2003
DE SERVIDOR DICOM
Fernando Ballesteros Herranz 6.6. IMPLEMENTACION
System.out.println(si[i]);
ps.println(si[i]);
ps.println(a);
}
return;
Donde primero se mira cuantos archivos Dicom hay en la base de datos y luego
sabiendo este n
umero se van listando. Tambien es importante saber cuantas imagenes
tiene cada archivo Dicom ya que es una informacion que el cliente debe de conocer.
Toda esta informacion es enviada al cliente cada vez que hace una peticion de la base
de datos.
6.6.3.
Enviar
.......
DicomObject scimage = new DicomObject();
scimage.read(fin,true);
fin.close();
.......
as.send(SOPClass.CTImageStorage,cstorerequest,scimage);
.......
r
GVA-ELAI-UPM
PFC0075-2003
217
CAPITULO 6. DESARROLLO DE APLICACION
6.6.4.
Guardar
Cuando el cliente enva archivos Dicom al servidor, este debe saber administrar
la forma de guardarlo sabiendo que nombre debe dar al archivo recibido y donde se
producira su almacenaje.
.......
DicomObject im = new DicomObject();
.......
//recibe los VRs
im = as.receiveData();
im.write(fin,true);
fin.close();
.......
Para esto se ha tenido que crear un objeto Dicom DicomObject im = new DicomObject() que sera quien reciba los datos que se estan recibiendo del cliente va
network. Estos datos son los data sets con los valores correspondientes del archivo
Dicom. El objeto Dicom recibe los datos mediante el metodo receiveData() de la clase
218
r
GVA-ELAI-UPM
PFC0075-2003
DE SERVIDOR DICOM
Fernando Ballesteros Herranz 6.6. IMPLEMENTACION
Association y luego los guarda para no perderlos y as crear un nuevo archivo Dicom
en la base de datos del servidor. Esto se realiza con im.write(fin,true), siendo fin el
objeto tipo archivo donde se guarda el objeto Dicom.
6.6.5.
Query/Retrieve
El servidor da informacion o partes de informacion de los archivos Dicom almacenados en la base de datos. Esta funcion es muy importante y u
til para saber que
archivos queremos ya que nos da la informacion del estudio realizado.
La informacion que da el servidor de nuestra apliacion es:
Esta informacion es de suma importancia para tener conocimiento del estudio que
queremos analizar, modificar, borrar o eliminar.
La implementacion del codigo:
.......
FileInputStream fin = new FileInputStream("c://BaseDeDatos//"+nombre);
DicomObject scimage = new DicomObject();
scimage.read(fin,true);
String nombres = scimage.getS(DDict.dPatientName);
ps.println(nombres);
String nombr = scimage.getS(DDict.dPatientAge);
.......
ps.println(nombr);
String nom = scimage.getS(DDict.dPatientSex);
ps.println(nom);
String dia = scimage.getS(DDict.dPlanes);
ps.println(dia);
r
GVA-ELAI-UPM
PFC0075-2003
219
CAPITULO 6. DESARROLLO DE APLICACION
6.6.6.
Editar
Esta funcion permite modificar los archivos Dicom del servidor sin necesidad el
cliente de tener que traerse todo el archivo Dicom. Es muy u
til para modificar los
estudios de los pacientes o poner notas que los medicos creen convenientes, de una
forma rapida y sencilla.
Los datos que se pueden modificar en nuestra aplicacion son:
El codigo es:
.......
String nomb = in.readLine();
String archiv = in.readLine();
String edad = in.readLine();
String sexo = in.readLine();
String dia = in.readLine();
String mes = in.readLine();
String ano = in.readLine();
FileInputStream fin = new FileInputStream
("c://BaseDeDatos//"+archiv);
220
r
GVA-ELAI-UPM
PFC0075-2003
DE SERVIDOR DICOM
Fernando Ballesteros Herranz 6.6. IMPLEMENTACION
DicomObject scimage = new DicomObject();
scimage.read(fin,true);
.......
scimage.set(DDict.dPatientName,nomb);
scimage.set(DDict.dPatientAge,edad);
scimage.set(DDict.dPatientSex,sexo);
scimage.set(DDict.dPlanes,dia);
scimage.set(DDict.dAccessionNumber,mes);
scimage.set(DDict.dAcquisitionNumber,ano);
FileOutputStream salvar = new FileOutputStream
("c://BaseDeDatos//"+archiv);
scimage.write(salvar,true);
.......
De esta forma se reciben los datos que el cliente quiere modificar del archivo que
desee y mediante el metodo set de la clase DicomObject se van modificando los datos.
Una vez hecho esto se deben guardar los cambios realizados en el objeto con el metodo
write().
6.6.7.
Encriptaci
on/Desencriptaci
on
La encriptacion realizada en la aplicacion tanto de servidor como de cliente esta basada en los algoritmos DES.
En la criptografa tradicional, (tambien llamada criptografa de clave secreta)
tanto el emisor como el receptor poseen una misma clave o password. El emisor utiliza
esta clave para cifrar el mensaje obteniendose el mensaje cifrado, que es ilegible.
El receptor utiliza la misma clave utilizada para el cifrado para descifrar el mensaje
y obtener as el mensaje original. Si esta clave es conocida u
nicamente por emisor
y receptor, se asegura que el mensaje recibido es el original y que es enviado por la
u
nica persona (ademas del receptor), que tiene la clave.
La criptografa realizada en esta aplicacion solo se ha realizado en la informacion
o partes de informacion de los objetos Dicom y en los elementos de servicio que se
deseaban realizar. No se ha aplicado en la transmision de archivos Dicom enteros ya
que las libreras JDT no lo soportan.
La implementacion del algoritmo es de caractersticas faciles:
.......
byte caracterEncriptacion=n;
r
GVA-ELAI-UPM
PFC0075-2003
221
CAPITULO 6. DESARROLLO DE APLICACION
String cadenaEncriptada="";
int caracterEncriptado=0;
String cadenaDesencriptada="";
String encriptar(String cadenaEncriptar)
{
// Encriptaci
on seg
un los algoritmos DES
// Devuelve la cadena encriptada
for (int x=0;x<cadenaEncriptar.length();x++)
{
caracterEncriptado=cadenaEncriptar.charAt(x)
^ caracterEncriptacion;
cadenaEncriptada+=(char)caracterEncriptado;
}
return(cadenaEncriptada);
}
String desencriptar(String cadenaEncriptada)
{
// Desencriptaci
on seg
un los algoritmos DES
// Devuelve la cadena desencriptada
for (int x=0;x<cadenaEncriptada.length();x++)
{
caracterEncriptado=cadenaEncriptada.charAt(x)
^ caracterEncriptacion;
cadenaDesencriptada+=(char)caracterEncriptado;
}
return(cadenaDesencriptada);
}
.......
6.7.
6.7.1.
Implementaci
on de Cliente DICOM
Introducci
on
Esta aplicacion sigue todos los pasos del estandar DICOM en la implementacion de
las funciones. Se ha querido realizar un programa multiplataforma y que este deacuerdo con las especificaciones requeridas.
Este programa ha sido elaborado en Java en el entorno JBuilder con soporte de
222
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
6.7.2.
Panel Cliente-Servidor
r
GVA-ELAI-UPM
PFC0075-2003
223
CAPITULO 6. DESARROLLO DE APLICACION
se puede coger cualquier archivo de esa base de datos, se pueden enviar archivos a
la base de datos, se pueden modificar estos archivos desde el cliente y se puede ver
partes de la informacion que contienen estos archivos Dicom que estan en la base de
daros del servidor. Ver figura 6.22
Antes de realizar cualquier accion en este panel, se debe escribir el nombre del
servidor del que queremos tener estos servicios.
Base de Datos
Mediante el boton Base De Datos, se hace una peticion al servidor de los archivos
que contenga. Estos archivos contenidos en la base de datos del servidor, se muestran
en el cliente en un arbol, en el que se ve tambien por cuantas imagenes esta compuesto
el archivo. Ver figura 3.2.
Para que el funcionamiento de este boton sea correcto, hay que poner el nombre
del servidor con el que queremos crear una asociacion en el espacio creado para ello.
Despues de presionar el boton Base De Datos, saldra una orden a su derecha que nos
dira Haz click en Dicom, entonces hay que hacer click en la palabra Dicom que
esta escrita en el arbol.
La implementacion consta basicamente:
jTree1.addMouseListener(ml);
// Al pulsar la tecla, haga la peticion de la lista.
String servidor = textoServidor.getText();
Storagescu BasedeDatos = new Storagescu(servidor,104,
"storecp","storecu");
BasedeDatos.lista();
//creamos arbol y lisening
createNodes(top);
jTree1.setEditable(true);
jTree1.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
jTree1.setShowsRootHandles(true);
jTree1.addTreeSelectionListener(new javax.swing.event.
TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
jTree1_valueChanged(e);
}
});
224
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
jScrollPane9.setVerticalScrollBarPolicy(JScrollPane.
VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane9.setViewportBorder(BorderFactory.
createEtchedBorder());
jScrollPane9.setBounds(new Rectangle(313, 308, 378, 255));
Al pulsar el boton Base de Datos, creamos un listening para el raton para actuar
con sus eventos, pedimos una lista al servidor sobre su base de datos y creamos un
arbol de los archivos.
Enviar
Para enviar estudios o archivos Dicom al servidor para que los almacene en la base
de datos, implementamos este boton, el boton Enviar. Ver figura 6.23.
Para enviar los datos, primero hay que poner el nombre del servidor con el que
queremos conectar en el JTextArea que hemos creado para ello. Este boon cogera con
que servidor queremos conectarnos y nos abrira un browser para buscar el archivo
que queremos enviar.
r
GVA-ELAI-UPM
PFC0075-2003
225
CAPITULO 6. DESARROLLO DE APLICACION
Coger
Este boton ha sido implementado para poder hacer peticiones al servidor de que
enve al cliente el archivo marcado en el arbol. El archivo enviado por el servidor se
guardara en el cliente y podra ser visualizado en el panel Visor Dicom. Ver figura
6.24.
226
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
Coge el nombre del servidor al que esta conectado y el nombre del archivo que se
quiere traer, luego se crea un objeto de la clase Storagescu que es la encargada de
establecer la asociacion con el servidor. Este objeto llama a la funcion coger() que
la que hace el elemento de servicio necesario para traer el archivo especificado del
servidor.
Editar
Su funcion es modificar los datos de los archivos que estan en el servidor sin
tener que traernos el objeto entero. Cada vez que se pinche sobre un archivo se trae
la informacion necesaria no todo el archivo. La informacion que se trae y se puede
modificar es:
Para modificar estos datos hay que escribir en los espacios JTextField (ver figura
6.25) dispuestos para ver y para escribir en ellos. Para que las modificaciones se
conserven, hay que escribir los datos que se quieran en los campos y darle al boton
Editar, de esta forma se modifican los datos de los arhivos Dicom del Servidor.
El codigo de la GUI es basicamente:
r
GVA-ELAI-UPM
PFC0075-2003
227
CAPITULO 6. DESARROLLO DE APLICACION
6.7.3.
Panel VisorDicom
Este panel sirve para poder visualizar todo tipo de archivos DICOM: archivos
comprimidos, no comprimidos, en color, en escala de grises y de una o varias imagenes,
tambien es capaz de insertar datos de texto en los campos ya existentes de un archivo
228
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
Visualizar datos
Esta clase tiene un constructor de la forma public Imagedos(DicomObject dcm) al
cual vamos a llamar y a pasarle un objeto de la clase DicomObject.
Este parametro que se pasa es un archivo DICOM sacado de archivos .dcm (formato DICOM).
La forma de pasar de un archivo .dcm a una instancia de la clase DicomImage
(subclase de DicomObject) se consigue mediante este codigo, implementado en nuestra clase principal MarcoCuatro.java en el metodo open():
r
GVA-ELAI-UPM
PFC0075-2003
229
CAPITULO 6. DESARROLLO DE APLICACION
.......
if (JFileChooser.APPROVE OPTION == jFileChooser1.
showOpenDialog(this))
openFileName = jFileChooser1.getSelectedFile().
getAbsolutePath();
f = new File(openFileName);
fin = new FileInputStream(f);
bis = new BufferedInputStream(fin);
dcm.read(bis, true);
.......
230
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
imagen = imagedcm.getBufferedImage(numeroImagen);
etiquetaMostrarImagen.setIcon(new ImageIcon(imagen));
r
GVA-ELAI-UPM
PFC0075-2003
231
CAPITULO 6. DESARROLLO DE APLICACION
232
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
if((x1>x2)&(y1>y2))
{
zonaBImagen= zoomBufferedImagen.getSubimage
(x2,y2,ancho,alto);
}if((x1<x2)&(y1>y2))
{
zonaBImagen= zoomBufferedImagen.getSubimage
(x1,y2,ancho,alto);
}if((x1<x2)&(y1>y2))
{
zonaBImagen= zoomBufferedImagen.getSubimage
(x1,y1,ancho,alto);
}if((x1>x2)&(y1<y2))
{
zonaBImagen= zoomBufferedImagen.getSubimage
(x2,y1,ancho,alto);
}
Image zonaZoomImage = zonaBImagen.
getScaledInstance(4*ancho,4*alto,Image.SCALE DEFAULT);
Marco PantallaCompleta marcoZonaZoom = new Marco
PantallaCompleta(zonaZoomImage);
Dimension dlgSize = marcoZonaZoom.getPreferredSize();
Dimension frmSize = getSize();
Point loc = getLocation();
marcoZonaZoom.setLocation((frmSize.width - dlgSize.
width) / 2 + loc.x, (frmSize.height - dlgSize.height)
/ 2 + loc.y);
marcoZonaZoom.setModal(true);
marcoZonaZoom.pack();
}
}
});
r
GVA-ELAI-UPM
PFC0075-2003
233
CAPITULO 6. DESARROLLO DE APLICACION
234
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
Donde, como se puede ver, se cargan todas las imagenes en un array de Images
y mas tarde se crea una instancia de la clase ImageSequenceTimer con la cual
se crea el panel donde se va a visualizar la secuencia.
r
GVA-ELAI-UPM
PFC0075-2003
235
CAPITULO 6. DESARROLLO DE APLICACION
236
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
r
GVA-ELAI-UPM
PFC0075-2003
237
CAPITULO 6. DESARROLLO DE APLICACION
= new JComboBox(opcionesCombobox);
Por lo que al pinchar sobre la flecha del combobox, aparecen todos estos campos. Ahora hay que interconectarlos para que al seleccionar uno y escribir sobre las
JTextArea se inserte y visualicen los datos.
Para insertar:
void botonInsertarDato actionPerformed(ActionEvent e)
{
try
{
String opcion = (String)jComboBox1.getSelectedItem();
String dato = areaTextoInsertarDato.getText();
if(opcion=="dPatientName")
dcm.set(DDict.dPatientName, new Person(dato));
.....
Donde new Person(dato) es el dato del nombre del paciente que se inserta en el
campo del archivo DICOM DDict.dPatientName.
Hecho esto, el dato estara en el objeto DicomImage pero no todava en el
archivo .dcm, para lo que se implementa estas otras lneas de codigo:
FileOutputStream save = new FileOutputStream(openFileName);
dcm.write(save,true);
Siendo write un metodo de la clase DicomObject que lo que hace es escribir a
traves de un FileOutputStream todos los datos de la instancia DicomImage en
un archivo .dcm que, si no existe, crea uno.
Para ver lo insertado:
238
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
C
omo a
nadir campos nuevos al archivo DICOM
Existe la posibilidad de crear nosotrosmismos nuestros propios campos, para utilizar seg
un convenga.
Se ha visto como insertar datos en los campos del archivo DICOM existentes ya,
como el sexo del paciente, nombre del fabricante, ID del paciente, etc, pero es muy
importante ser capaces de crear nuestros propios campos, como por ejemplo el n
umero
de virus, diagnostico del medico, y en definitiva, los que se crean convenientes.
Para ello se han dispuesto en la GUI ciertos botones (figura 6.33) que son capaces
hacer este servicio.
r
GVA-ELAI-UPM
PFC0075-2003
239
CAPITULO 6. DESARROLLO DE APLICACION
240
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
Donde lo u
nico que cambia es el tipo de dato que vamos a insertar, por lo que el
tercer parametro que se pasa al constructor de la clase DDictEntry es DDict.tST.
6.7.4.
Panel Procesamiento
Este panel sirve para poder procesar una imagen mediante un algoritmo desarrollado por el GVA. Este panel visualiza la imagen de origen a procesar y ejecuta el
r
GVA-ELAI-UPM
PFC0075-2003
241
CAPITULO 6. DESARROLLO DE APLICACION
Introducci
on del algoritmo en la aplicaci
on
Pasos a seguir:
1. Lo primero que se debe hacer es poner en las variables de entorno los caminos
para encontrar las libreras necesarias:
C:/AWouter/bin/win32; C:/AWouter; C:/matlab6p5/bin/win32;
Esto significa que antes se ha debido copiar en estas carpetas los archivos solicitados.
En la carpeta C:/AWouter se deben copiar los archivos applylut.dll y dataread.dll.
242
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
2. Despues se debe ejecutar el setup mglinstaller.exe que instala las libreras necesarias de Matlab.
3. Se debe copiar el ejecutable en la carpeta C:/AWouter.
4. Copiar los archivos
5. Despues se tiene que crear una carpeta donde se ponen las libreras para solo
este algoritmo:
C:/matlab6p5/toolbox/images/images/private y se incluyen en esta bwlabel1.dll
y bwlabel2.dll.
Si hubiera alg
un error con los ficheros MSVCRTD.DLL y MSVCIRTD.DLL,
copiarlos en las carpetas C:\WINNT\system32, en C:\AWouter y en C:\Matlab6p5\win32.
Esto es a nivel de sistema. Una vez hecho esto se debe realizar una implementacion
para que este algoritmo se pueda ejecutar desde nuestro GUI (graphical user interface). Para hacer esto se dan estos pasos:
En el panel de procesamiento se han creado dos JLabel donde poner las imagenes
de origen y la de salida o procesada. Se ha incluido ademas un JTextArea para decir el
camino y el nombre de la imagen procesada y dos botones, uno para abrir la imagen
a procesar y otro para empezar el procesamiento. Figura 6.35.
Pasos en JBuider7.0:
r
GVA-ELAI-UPM
PFC0075-2003
243
CAPITULO 6. DESARROLLO DE APLICACION
244
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
6.7.5.
Inserci
on de una sola imagen
En esta parte vamos a ver la forma de como insertar los datos de una sola imagen.
r
GVA-ELAI-UPM
PFC0075-2003
245
CAPITULO 6. DESARROLLO DE APLICACION
1. Boton Monochrome:
La implementacion de la funcion de este boton es de la forma:
void botonCrearDicomGris actionPerformed(ActionEvent e)
{
.......
String rutaArchivoDicomGuardar = jFileChooser1.
getSelectedFile().getAbsolutePath();
int[] pix = image2IntArray(imagenJPG);
dcmNueva.set(DDict.dSOPClassUID,"1.2.840.10008.5.1.4.1.1.7");
dcmNueva.set(DDict.dSOPInstanceUID,"1.2.840.10008.5.1.4.1.1.7");
246
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
r
GVA-ELAI-UPM
PFC0075-2003
247
CAPITULO 6. DESARROLLO DE APLICACION
Compresi
on de archivos Dicom Monochrome
Se ha visto como crear un archivo DICOM de escala de grises, pero al hacer esto
se tiene un problema: el tama
no de los archivos es muy grande debido a que no se ha
248
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
r
GVA-ELAI-UPM
PFC0075-2003
249
CAPITULO 6. DESARROLLO DE APLICACION
No comprimido: tama
no = X
Comprimido: tama
no = X / 2
Inserci
on de varias im
agenes
Para este caso se ha introducido en un array de Image todas las imagenes que se
quieren insertar en el archivo DICOM.
Una vez insertadas, se procede a sacar los datos de pxel de estas instancias Image.
En este caso se van a guardar estos datos en una matriz de bytes en vez de array int.
250
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
r
GVA-ELAI-UPM
PFC0075-2003
251
CAPITULO 6. DESARROLLO DE APLICACION
imagenesTotales);
todosBytesJuntos = todoJunto;
if (JFileChooser.APPROVE OPTION == jFileChooser1.
showSaveDialog(this))
{
try
{
String rutaArchivoDicomGuardar = jFileChooser1.
getSelectedFile().getAbsolutePath();
........
dcmNueva.imagePixelData(imagenJPG.getHeight(null),
imagenJPG.getWidth(null),8,8,7,todosBytesJuntos);
........
dcmNueva.write(salvar,true);
........
}
}
}
Como se ve en este codigo, una vez recogidas todas las instancias Image en el
array, se pasa a sacar de cada objeto Image sus datos de pxel y se reunen en
una matriz de bytes llamada arrayDeArrayDeBytes.
Una vez hecho esto, se unen esos array de bytes en uno solo mediante el metodo
unirBytesArray(byte[][] secuencia, int numeroDeImagenes), el cual es el dato a
insertar en nuestro archivo DICOM, donde se recogen todas nuestras imagenes.
Este archivo esta sin compresion. Se puede realizar una compresion como la indicada antes y la reduccion de tama
no es de la relacion 2 a 1 aproximadamente, es decir
el tama
no del archivo comprimido es la segunda parte del archivo sin comprimir.
El u
nico sistema de compresion soportado sigue siendo JPEGLossless de estas
libreras y mas particularmente de la clase Compression.
252
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
6.7.6.
Distribuci
on e instalaci
on de la aplicaci
on
Generaci
on de ejecutables
Una vez creada la version Beta de nuestra aplicacion Cliente DICOM es importante
poder distribuirla para que sea ejecutada sobre cualquier sistema operativo, siendo
de esta manera una aplicacion multiplataforma.
r
GVA-ELAI-UPM
PFC0075-2003
253
CAPITULO 6. DESARROLLO DE APLICACION
Pasos a seguir:
1. Seleccionar Asistentes->Creador de ejecutables nativos. . .
2. Escribir el nombre del ejecutable. En nuestro caso DICOM.
3. Seleccionar: incluir siempre todas las clases y recursos.
4. Seleccionar: JDT e incluir siempre todas las clases y recursos.
5. Pulsar Siguiente en los pasos 4 y 5, con las opciones marcadas por defecto.
6. Marcar en el paso 6 los ejecutables que queramos crear dependiendo del sistema
operativo en el que se vaya a utilizar.
7. Pulsar Finalizar
8. Una vez realizado esto, se generara en el panel de proyectos un archivo que
se llama igual a como habamos llamado al ejecutable que queremos generar.
Entonces lo marcamos y pulsamos en Proyecto->Generar Make del proyecto,
de esta forma se generaran los ejecutables que pueden ser para Windows, para
Linux, para Solaris, para Mac/OS y multiplataforma como el .jar.
254
r
GVA-ELAI-UPM
PFC0075-2003
DE CLIENTE DICOM
6.7. IMPLEMENTACION
Instalaci
on
Para la instalacion de la aplicacion cliente hay que seguir los siguientes pasos:
Para poner el programa, tan solo hay que ejecutar el programa cliente, en nuestro
caso CuatroW.exe
Para la instalacion del servidor DICOM:
r
GVA-ELAI-UPM
PFC0075-2003
255
CAPITULO 6. DESARROLLO DE APLICACION
6.8.
Conclusiones
256
r
GVA-ELAI-UPM
PFC0075-2003
Ap
endice A
Administraci
on de sistemas
[GUNT] [LEBLA] [RUSSE97] [STIN]
En este apendice se recopilan los aspectos mas importantes en el amplio mundo
de Windows NT 4.0 y Windows 2000 para que cualquier persona con un mnimo de
conocimientos en informatica sea capaz de manejar esta plataforma.
A.1.
Introducci
on a Windows NT y 2000
A.1.1.
Presentaci
on del sistema operativo NT
257
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Seguridad. NT ha sido escrito para satisfacer criterios de seguridad tpicos
de organismos oficiales y empresas cuyos datos y aplicaciones deben quedar a
salvo de accesos no autorizados. Practicamente cada objeto del sistema posee
un esquema de seguridad asociado que indica que usuarios pueden acceder al
objeto y con que privilegios pueden acceder.
Portabilidad. El dise
no de NT permite que se pueda adaptar facilmente a otras
arquitecturas para las que no fue originalmente desarrollado. Actualmente soporta las arquitecturas de Intel X86, MIPS, Alpha y PowerPC. Su dise
no modular y el estar escrito en lenguaje facilmente portable, como es el C, permite
esta rapida migracion.
Compatibilidad con las aplicaciones Windows. La capacidad de NT para ejecutar aplicaciones MSDOS y Windows permite disponer de gran cantidad de
software escrito que permite sacar rendimienteo al sistema sin tener que migrar las aplicaciones. Incluso las nuevas aplicaciones Win32 corren en modo
nativo en las diferentes plataformas de NT, simplemente recompilandolas para
cada plataforma, o incluso a traves de los emuladores-compiladores JIT (Just
In Time) como son el X86, distribuido gratuitamente para las plataformas no
Intel soportadas.
Velocidad. NT esta desarrollado para hacer frente a las aplicaciones que necesitan gran cantidad de recursos y altas velocidades de ejecucion, tpicas de entornos cliente/servidor y de ingeniera, como pueden ser servidores de recursos
de red, de bases de datos y programas de calculo cientfico y dise
no grafico.
A.1.2.
Sistemas de archivos
Hay varios tipos de gestores de archivos para los equipos, estos son utilizados
dependiendo del sistema operativo y la gestion realizada por el administrador de la
red:
FAT: 16 bits, es compatible con Windows 95/98/NT/2000/XP y MS-DOS. Es
el mas utilizado en la gestion de los archivos en los disquetes. Los cl
uster son
de 32 KB, esto quiere decir que los datos se guardan en paquetes de 32 KB. Un
fichero que ocupe 33KB, ocupara 2 cl
uster, por lo que se desperdician 31 KB
del 2o cl
uster.
FAT 32: 32 bits, compatible con Windows 95/98/2000/XP. Mas eficiente que
las particiones FAT.
NTFS: Utilizado por los sistemas basados en Red, Windows NT/2000/XP. Los
cl
uster son de menor tama
no, son de 4 KB, de esta forma se aprovecha mejor
el espacio en el disco.
258
r
GVA-ELAI-UPM
PFC0075-2003
A WINDOWS NT Y 2000
A.1. INTRODUCCION
Ext 32: sistema de gestion de archivos utilizado por equipos Unix y sistema
operativo Linux.
A.1.3.
El interfaz de usuario de NT
r
GVA-ELAI-UPM
PFC0075-2003
259
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
las hojas de calculo. Esto evita al usuario largos tiempos de espera en su trabajo
habitual.
Aplicaciones POSIX. Son aplicaciones basadas en el estandar com
un POSIX,
un subconjunto de las APIs de UNIX. El susbsistema POSIX emula el comportamiento de las aplicaciones UNIX, incluyendo elementos como el uso de
enlaces (links) para los ficheros. Para desarrollar aplicaciones POSIX para NT
se puede utilizar el compilador que se distribuye en el kit de recursos, o una
nueva distribucion del popular GCC de GNU (distribucion Cignus) que incluye
un soporte mucho mas avanzado tanto de aplicaciones Win32 como de aplicaciones POSIX. Este compilador se puede encontrar en los espejos de GNU en
la red.
Aplicaciones OS/2. Se pueden ejecutar aplicaciones OS/2 de modo texto. Las
aplicaciones basadas en Presentation Manager se pueden ejecutar utilizando un
modulo adicional disponible a traves de Microsoft.
A.2.
Para ver el funcionamiento de la red Microsoft hay que distinguir dos partes:
A.2.1.
En los grupos de trabajos los servidores y estaciones de trabajo configuran una red
local del tipo de igual a igual. En este modo de funcionamiento, en principio todos los
ordenadores pueden ser clientes y servidores simultaneamente. Los grupos de trabajo
fueron introducidos por Microsoft cuando introdujo en el mercado Windows para
Trabajo en Grupo. Este esquema de funcionamiento es bastante sencillo, ya que no
precisa de la existencia de la figura del administrador del grupo.
260
r
GVA-ELAI-UPM
PFC0075-2003
A.2.2.
Los dominios NT
A.2.3.
r
GVA-ELAI-UPM
PFC0075-2003
261
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
superar las decenas, la estructura creada por el dominio aporta numerosas ventajas.
La primera y mas importante es la seguridad del dominio.
En un dominio la base de datos de usuarios y de equipos es u
nica, y esta centralizada. A cada usuario se le asigna una cuenta que le identifica en el dominio. En
principio la autenticidad del usuario esta garantizada por el uso de su contrase
na.
Esto facilita al usuario el acceso a los recursos del dominio, ya que la mayor parte
de las veces no necesitara introducir su contrase
na. El esquema de dominios permite
ademas crear grupos de usuarios. Los grupos de usuarios facilitan la administracion
de los dominios ya que permite asignar seguridad, aplicaciones y otros recursos del
dominio a grupos de usuarios con caractersticas comunes. El sistema de grupos de
usuarios es muy flexible, permitiendo adaptar el dominio a la estructura corporativa.
Un usuario del dominio puede pertenecer a varios grupos, de manera que cada uno
de los grupos a los que pertenece le permita realizar una serie de tareas diferentes.
El sistema de dominios simplifica la administracion de servidores y estaciones de
trabajo. A medida que se a
naden estaciones y servidores al dominio, el administrador
utiliza las herramientas administrativas para darlos de alta en el dominio. Cuando
un equipo es dado de alta en el dominio puede comunicarse de una manera segura
con los demas miembros del dominio. De esta manera puede reconocer a los demas
usuarios y equipos del dominio. Esta tarea es realmente sencilla. Durante el proceso
de instalacion de una estacion de trabajo o servidor NT, aparece un cuadro de dialogo
en el que se da la oportunidad de a
nadir el equipo al dominio. Para a
nadir el equipo
basta escribir el nombre del dominio y nombre de usuario y contrase
na con privilegios
de administrador valido en el dominio. El proceso de instalacion se pone en contacto
con el controlador del dominio y da de alta al ordenador en el dominio. Una vez que se
ha dado de alta en el dominio, el programa de instalacion configura automaticamente
el sistema para que sea miembro del dominio. El proceso completo se desarrolla en
pocos segundos y sin intervencion del usuario.
El sistema de dominios simplifica enormemente la gestion de grandes dominios, ya
que los cambios introducidos en la configuracion del dominio se reflejan automaticamente en todos los miembros del dominio. Si por ejemplo se a
nade un nuevo equipo
al dominio, queda disponible para el uso por los demas miembros del dominio.
A.2.4.
Elementos de un dominio
262
r
GVA-ELAI-UPM
PFC0075-2003
A.2.5.
En una red Microsoft se pueden compartir varios tipos de recursos, como pueden
ser impresoras y unidades de red. En una red Microsoft el nombre de los recursos
sigue el siguiente convenio:
\\servidor\recurso
escrito en el formato UNC (Universal Name Convention). Servidor es el nombre
del servidor que comparte el recurso. Recurso es el nombre que se le da al recurso.
En el caso de recursos del tipo unidad de red, detras del nombre de recurso se puede
poner la ruta completa de directorios, y el nombre de un archivo cuando nos estamos
refiriendo a un archivo remoto, de este modo:
\\servidor\recurso\directorio\directorio\fichero.exetension
Ademas de poder compartir unidades de disco e impresoras, se pueden compartir
r
GVA-ELAI-UPM
PFC0075-2003
263
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
otro tipo de recursos, como unidades CD-ROM, modems, fax (con el software adecuado, no incluido en NT), y otros tipos de recursos especiales, como pueden ser las
tuberas creadas entre el controlador del dominio y los ordenadores conectados a el.
Para crear los recursos se deben utilizar las herramientas apropiadas en cada caso:
Para unidades de red, se utiliza el explorador de Windows NT, o el administrador de archivos (Winfile.exe)
Para compartir impresoras se utiliza el administrador de impresion.
Para tipos especiales de recursos, normalmente hay herramientas especiales que
lo hacen. Normalmente todos los recursos compartidos aparecen en los listados
de recursos de red de todos los clientes. Se puede modificar el nombre de recurso
para que no aparezca en los listados de recursos. A este tipo de recursos se les
llama recursos compartidos en modo administrativo.
264
r
GVA-ELAI-UPM
PFC0075-2003
Otra forma de acceder los administradores a los discos de las estaciones de trabajo
del dominio es:
Este
es un buen metodo para escanear con antivirus las maquinas desde otras
maquinas.
r
GVA-ELAI-UPM
PFC0075-2003
265
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
A.2.6.
Inicio de sesi
on en un grupo de trabajo
Cuando un usuario va a acceder a una red, lo primero que debe realizar es un inicio
de sesion. El inicio de sesion consiste en que el usuario debe introducir un nombre de
usuario y una contrase
na, que seran utilizados por el sistema para acceder a la red.
Ya que en el grupo de trabajo no hay servidores dedicados a validar los inicios de
sesion, el inicio de sesion en Windows para trabajo en grupo es simple. El inicio de
sesion es un mero anuncio de que el usuario se dispone a utilizar los recursos de red.
No se realiza ninguna comprobacion de seguridad, es decir, cualquier usuario puede
iniciar sesion con cualquier nombre dentro del grupo de trabajo. No existe ning
un
mecanismo que impida al usuario iniciar sesion de red.
Durante el inicio de sesion en un grupo de trabajo, al usuario se le pide su nombre de usuario y su contrase
na. En Windows para Trabajo en Grupo el nombre de
usuario se utiliza como identificador del usuario, aunque no hay ninguna garanta de
la verdadera identidad del usuario. La contrase
na facilitada por el usuario se utiliza
para dos tareas:
266
r
GVA-ELAI-UPM
PFC0075-2003
A.2.7.
Inicio de sesi
on en un dominio
r
GVA-ELAI-UPM
PFC0075-2003
267
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
El sistema de seguridad de NT no solo permite gestionar el acceso de los usuarios
a los recursos, sino que incluso se pueden crear grupos de usuarios a los que se les
asignan privilegios, por lo que la gestion de la seguridad se simplifica dentro del
dominio.
A.2.8.
Todo dominio tiene una base de datos de usuarios. La copia original de esta base
de datos reside en el controlador principal del dominio. En esta base de datos quedan
registradas todas las caractersticas de los usuarios, sus cuentas, y de los ordenadores
que forman parte del dominio.
Ademas del controlador principal del dominio, puede haber dentro de un dominio
varios controladores secundarios del dominio. En estos controladores se mantiene una
copia de la base de datos de usuarios del dominio. Si el controlador del dominio
esta muy cargado o simplemente esta inactivo, cualquier controlador del dominio
puede validar el inicio de sesion en el dominio.
El proceso de inicio de sesion en los controladores del dominio comienza en el
cliente por obtener la lista de controladores del dominio. Para ello el servicio Examinador de computadoras obtiene dicha lista, bien mediante una pregunta por difusion
(broadcast), o bien preguntando a los servidores WINS del dominio. Una vez obtenida
la lista, el cliente enva una peticion de inicio de sesion a los diferentes controladores
del dominio. El cliente elegira al primer controlador de dominio que le conteste para
intentar el proceso de inicio de sesion. Este metodo asegura que siempre el cliente
pueda iniciar sesion en el dominio.
El mantenimiento de la base de datos del dominio es automatico. Las herramientas administrativas de NT permiten modificar la base de datos, mediante el Administrador de usuarios para dominios.
Los cambios se realizan siempre sobre el controlador principal del dominio, y son
enviados automaticamente a los demas controladores del dominio. Hay que tener en
cuenta que esto se realiza con una peque
na demora temporal, que se puede reducir
sincronizando los servidores con el administrador de servidores.
A.2.9.
268
r
GVA-ELAI-UPM
PFC0075-2003
A.3.
El Administrador de usuarios
En NT hay dos tipos de usuarios, aquellos que pertenecen a una maquina que
corre NT WK o Server y aquellos que pertenecen a un dominio NT. Para cada uno de
estos tipos de usuarios existe una herramienta de administracion: el administrador de
usuarios incluido en NT Workstation y el administrador de usuarios para dominios
incluido en NT Server (ver figura A.2).
r
GVA-ELAI-UPM
PFC0075-2003
269
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
para dominios dispone de mas opciones. Por ello, se describira el administrador de
usuarios para dominios.
Las tareas que se pueden realizar con el administrador de usuarios:
A
nadir, modificar y eliminar usuarios del dominio.
A
nadir, modificar y eliminar grupos locales y globales del dominio.
Fijar el plan de cuentas y contrase
nas en el dominio.
Fijar la poltica de derechos de usuario en el dominio.
Establecer el sistema de auditoria en el dominio.
Establecer relaciones de confianza entre dominios.
A.3.1.
Creaci
on y modificaci
on de usuarios en el dominio
270
r
GVA-ELAI-UPM
PFC0075-2003
Al final del cuadro de dialogo aparecen varios botones (ver figura A.3).
r
GVA-ELAI-UPM
PFC0075-2003
271
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Grupos Permite establecer los grupos a los que pertenece un usuario (ver figura
A.4). En NT hay dos tipos de grupos:
Grupos globales Validos para dominios en los que se confan. Aparecen marcados con el icono de grupo global.
Grupos locales Son grupos locales al servidor o estacion de trabajo.
Perfil Permite controlar las caractersticas del entorno de un usuario (figura A.5).
Se puede establecer:
Perfil Nombre del fichero que representa el perfil del usuario para NT. Hay que
escribir un fichero en formato UNC (Univer name convention), es decir:
\\servidor\recurso\directorio\fichero.bat.
272
r
GVA-ELAI-UPM
PFC0075-2003
Iniciar desde Este cuadro de dialogo permite seleccionar los ordenadores desde los
cuales un usuario puede iniciar sesion. Se pueden especificar hasta 8 ordenadores
que ejecuten NT, o permitir el inicio en todos los ordenadores del dominio. Ver
figura A.7.
r
GVA-ELAI-UPM
PFC0075-2003
273
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Modificar un usuario
Utilizando el men
u Usuario\Propiedades o haciendo doble clic sobre un usuario
o grupo se puede modificar el mismo.
Al modificar un usuario se acceden a los mismos cuadros de dialogo empleados
al crearlo salvo que ahora aparece una casilla para cuentas bloqueadas. Si el bloqueo
274
r
GVA-ELAI-UPM
PFC0075-2003
A.3.2.
Creaci
on de grupos
r
GVA-ELAI-UPM
PFC0075-2003
275
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Creaci
on de un grupo global nuevo
Para a
nadir un grupo global nuevo se selecciona el men
u Usuario\Grupo Global nuevo y se proporcionan en el cuadro de dialogo el nombre del grupo y una
descripcion opcional. Podemos ademas a
nadir usuarios al grupo.
Creaci
on de un grupo local nuevo
Para a
nadir un grupo local nuevo se selecciona el men
u Usuario\Grupo Local nuevo y se proporcionan en el cuadro de dialogo el nombre del grupo y una
descripcion opcional. Podemos ademas a
nadir usuarios al grupo.
276
r
GVA-ELAI-UPM
PFC0075-2003
A.4.
Permisos y seguridad
En NT se pueden fijar una serie de directivas comunes para todo el dominio. Entre
estas se puede fijar el plan de cuentas para el dominio, que fija propiedades de las
cuentas tales como la poltica de contrase
nas, el plan de derechos de usuarios, que
permite asignar determinados permisos genericos usuarios o grupos del dominio, o el
plan de auditoria, que permite activar los elementos del sistema de auditoria en el
dominio.
A.4.1.
Administraci
on del plan de cuentas
Desde el men
u Directivas\Cuentas podemos acceder al cuadro de dialogo Plan
de cuentas.
En este cuadro podemos fijar las limitaciones de las contrase
nas y el sistema de
bloque de cuentas. Cuando se ha seleccionado caducidad para la contrase
na de un
usuario, la contrase
na utilizara las opciones elegidas en este cuadro de dialogo. Se
puede elegir:
r
GVA-ELAI-UPM
PFC0075-2003
277
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Tambien en este cuadro de dialogo se puede seleccionar si los usuarios remotos
seran desconectados de los servidores al acabar su tiempo de conexion y si un usuario
debe iniciar sesion en una estacion de trabajo para poder cambiar su contrase
na.
A.4.2.
Administraci
on del plan de derechos de usuarios
Los derechos de usuarios son una serie de permisos que no se aplican sobre un
objeto concreto, como un fichero, impresora o directorio, sino que se aplican al sistema
completo. Estos permisos tienen prioridad sobre los permisos asignados sobre los
objetos del sistema. Se pueden asignar a cada tipo de derecho de usuario los usuarios
o grupos de usuarios a los que se necesite otorgar ese derecho.
Los derechos de usuarios pueden ser modificados desde el cuadro de dialogo Plan
de derechos de usuarios accesible desde el men
u Directivas\Derechos de usuarios. Ver figura A.10.
278
r
GVA-ELAI-UPM
PFC0075-2003
Iniciar sesion como proceso por lotes. Este derecho esta pensado para los servicios que atienden las peticiones de usuarios en forma de transacciones, como
por ejemplo servidores POP3 y otros. Actualmente no esta implementado en
el sistema operativo, pero algunos servicios verifican que el usuario posea este
derecho antes de atender su peticion.
A.5.
Permisos y seguridad en NT
A.5.1.
Los perfiles de usuario de NT permiten especificar las opciones del entorno para
cada usuario de Windows NT. En Windows 3.x estas opciones habitualmente se guardaban en archivos .ini que eran archivos de texto normalmente compartidos por todos
los usuarios de la aplicacion. En NT todas las opciones y configuraciones del sistema
y de las aplicaciones se guardan en el registro.
El registro es una base de datos jerarquizada donde se guarda toda la informacion
de configuracion. En NT existe un registro completo para el sistema y uno para cada
uno de los usuarios que han iniciado sesion en el sistema, que son los llamados perfiles
de usuario.
Cuando un usuario inicia una sesion por primera vez en NT, el sistema crea un
registro personalizado para el usuario. Si no se ha definido previamente un perfil para
el usuario, el sistema utilizara una copia del perfil de usuario por defecto. Tanto los
perfiles de usuario como el perfil de usuario por defecto se puede editar para establecer
de antemano las opciones del entorno de usuario.
r
GVA-ELAI-UPM
PFC0075-2003
279
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
A.5.2.
Se pueden eliminar perfiles antiguos de usuarios del sistema. Para ello, deberemos
abrir el men
u Opciones/Eliminar perfil del icono Instalaci
on de Windows
en la carpeta principal del administrador de programas.
A.5.3.
Local Este perfil es especfico del ordenador en el que se ha creado. El usuario solo
puede acceder al perfil local al iniciar sesion interactiva en el ordenador en el
que reside el perfil.
M
ovil Este tipo de perfil puede ser usado por el usuario en cualquier NT del dominio.
Es parecido al perfil movil de Windows 95, pero es mas completo.
Obligatorio Son perfiles moviles que el usuario no puede modificar. Normalmente
son asignados a un usuario o grupos de usuario por el administrador.
280
r
GVA-ELAI-UPM
PFC0075-2003
A.5.4.
El directorio de perfiles en NT
r
GVA-ELAI-UPM
PFC0075-2003
281
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
A.5.5.
Creaci
on de un perfil en NT 4.0
Si vamos a mantener un gran grupo de perfiles conviene crear un recurso compartido de tipo unidad de red en un servidor adecuado. No es necesario que sea
el controlador de dominio. Por ejemplo:
\\servidor\perfiles
Configuramos la seguridad del recurso para que los usuarios tengan acceso a su
perfil.
Iniciamos sesion con una cuenta con privilegios de administrador.
Modificamos el entorno (opciones, accesos directos, etc).
Ahora se abre el icono Sistema del Panel de Control, en la pesta
na Perfiles de
usuario. Se selecciona el perfil del usuario actual y se pulsa Copiar a . Ver
figura A.11.
282
r
GVA-ELAI-UPM
PFC0075-2003
Perfiles Obligatorios
Para asignar un perfil a un usuario de manera que el usuario no pueda actualizar
el perfil con los cambios introducidos se utiliza el perfil obligatorio. Los perfiles obligatorios ayudan al administrador a gestionar los perfiles, ya que aseguran que el usuario
cada vez que inicia la sesion encuentre un entorno coherente. Esto suele ser necesario
cuando los usuarios son inexpertos o por simples motivos de seguridad. Cuando el administrador debe mantener una gran cantidad de cuentas de usuarios, puede asignar
perfiles obligatorios a un grupo. Por ejemplo, puede crear un perfil para los usuarios
del grupo Neumatica, de manera que todos ellos tengan el mismo perfil.
Para crear un perfil obligatorio hay que:
Este u
ltimo paso impide en NT 4.0 que el usuario pueda iniciar sesion con el perfil
cache si el perfil principal no esta disponible (el servidor de perfiles esta fuera de
servicio).
A.6.
Las directivas del sistema permiten a los administradores controlar la configuracion y la capacidad de modificar el entorno por parte de los usuarios, o lo que es
lo mismo imponer ciertas reestricciones a los mismo. Esto puede ser realizado de una
forma centralizada para todo el dominio sobre:
r
GVA-ELAI-UPM
PFC0075-2003
283
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Ordenadores Se puede modificar la configuracion predeterminada de los servidores
y estaciones de trabajo.
Usuarios Se puede eliminar la capacidad de un usuario para acceder a partes delicadas de la configuracion del sistema, como es la configuracion de red o partes
del escritorio de NT.
Grupos Se pueden asignar configuraciones para grupos de usuarios, lo que simplifica
notablemente la administracion del dominio.
A.6.1.
El modo de trabajo de las directivas del sistema consiste en modificar ciertas claves
del registro, que son las que cierran el paso a las partes del registro mas sensibles.
Las herramientas de administracion y el panel de control utilizan estas claves para
permitir o denegar el acceso del usuario para la modificacion de estas partes. Cuando
se manejan directivas del sistema y perfiles de usuario hay que tener en cuenta que:
A.6.2.
Creaci
on de las directivas del sistema para un dominio
284
r
GVA-ELAI-UPM
PFC0075-2003
A.6.3.
El editor de directivas trabaja modificando las claves del registro. Para ello al crear
una nueva directiva el editor carga desde unas plantillas un conjunto de directivas.
Por defecto, el editor de directivas dispone de tres plantillas:
Activado (casilla marcada). El editor de directivas modificara convenientemente las claves del registro para aplicar la directiva.
Desactivado (casilla en blanco). El editor de directivas modificara convenientemente las claves del registro para no aplicar la directiva.
Sin cambios (casilla en gris). Es editor de directivas no realizara ninguna
modificacion en el registro.
r
GVA-ELAI-UPM
PFC0075-2003
285
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
El ejemplo mas sencillo es la directiva que indica el protector de pantallas que
debe usar un usuario. Por defecto el usuario utiliza el protector de pantallas que dicta
su perfil, que puede haber sido fijado por el propio usuario, residir en un perfil movil,
en un perfil obligatorio o haber sido creado por defecto automaticamente. Al activar
esta directiva se puede modificar el comportamiento, obligando a un usuario a utilizar
otro protector de pantalla (quizas el que tiene el logotipo corporativo y obliga a usar
contrase
na). En este caso de no activarse la directiva se utilizara la del perfil. Figura
A.13.
A.6.4.
286
r
GVA-ELAI-UPM
PFC0075-2003
Hay que tener en cuanta que las directivas se aplican de modo acumulativo. Si un
usuario pertenece a varios grupos para los que se han fijado directivas, el orden de
aplicacion se obtiene seg
un se halla fijado en el cuadro de dialogo directivas de
grupo
A.7.
El protocolo TCP/IP
A.7.1.
Introducci
on
El protocolo TCP/IP nacio de los trabajos del ARPA (Advanced Research Project
Agency)del Departamento de Defensa de los EEUU, durante las decadas de los 60 y
70. A traves de las universidades y centros de investigacion se trato de construir una
red que fuese capaz de resistir las cadas parciales de la misma (por ejemplo en caso
de guerra). As surgio ARPANET, la primera red de intercambio de paquetes.
En 1974 V. Cerf y R. Kahn propusieron un nuevo conjunto de protocolos basicos
de red que solventaban gran parte de los problemas de los protocolos usados en
ARPANET. As se pusieron los cimientos de los protocolos IP (Internet Protocol) y
TCP (Transmission Control Protocol). En 1980 se comenzo la migracion de los aproximadamente 100 servidores que formaban la red ARPANET a los nuevos protocolos.
En 1983 el Departamento de Defensa estandarizo el protocolo TCP/IP como protocolo basico de red. Rapidamente otras agencias del gobierno adoptaron el protocolo,
lo que obligo a las empresas proveedoras de equipos a implementarlo en sus sistemas
operativos y equipos de comunicaciones. Ademas el Departamento de Defensa impulso el protocolo TCP/IP al recomendar a la Universidad de Berkeley la inclusion
del protocolo en la distribucion BSD 4.2 del UNIX.
A.7.2.
El sistema operativo NT da soporte directamente a tres protocolos de red: NETBEUI, usado en las redes de Microsoft e IBM principalmente, IPX/SPX, usado en
las redes Novell Netware y el TCP/IP, parte basica de las redes UNIX, y principal
protocolo de la Internet.
Cada uno de estos protocolos tiene sus propias ventajas e inconvenientes. De un
modo general se recomienda cada uno de estos protocolos:
Netbeui Para compartir ficheros e impresoras en redes sencillas. Para este tipo de
r
GVA-ELAI-UPM
PFC0075-2003
287
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
redes se muestra muy eficaz, dada su practicamente nula necesidad de configuracion. No es encaminable.
IPX/SPX De aplicacion en redes en las que existan servidores Novell Netware. Tiene
un buen rendimiento en ficheros e impresion y poca dificultad de administracion.
TCP/IP Es el que peor rendimiento ofrece para uso en ficheros e impresion, pero es
el que presenta mayores herramientas para crear grandes redes de ordenadores.
Es encaminable y es imprescindible en Internet. Microsoft ha implementado
todas las caractersticas de Netbios dentro del protocolo TCP/IP. Es el que
obliga al mayor esfuerzo administrativo.
A.7.3.
Una red de ordenadores esta compuesta de dos partes: la red fsica en s y el protocolo que utilizan los ordenadores para comunicarse entre s. La red fsica esta compuesta normalmente de una serie de subredes, a las que se conectan los diferentes
equipos (ordenadores, impresoras...).
Esta red puede tener una topologa muy variada. Actualmente existen dos tipos
de topologas:
Ethernet, que es del tipo bus, Token Ring, que tiene topologa de testigo y utiliza topologa de bus con paso de testigo. El protocolo TCP/IP fue desarrollado
inicialmente para Ethernet , pero admite sin problemas las otras dos tecnologas.
Actualmente se esta imponiendo la tecnologa Ethernet en las redes peque
nas, sobre todo sobre cableado de par trenzado (10 Base T), y por su bajo coste y buen
rendimiento.Normalmente una red tpica estara compuesta por una serie de ordenadores conectados entre s, ademas de impresoras y otros elementos de la red.
Cada ordenador tendra al menos una tarjeta de red. Esta red se puede unir a otras
redes o al resto de la Internet a traves de puentes, encaminadores y otros tipos de
enlaces.
El protocolo TCP/IP permite identificar cada elemento de la red y proporciona
los mecanismos para el intercambio de informacion entre estos elementos.
El protocolo TCP/IP esta formado por un protocolo generico de envo y recepcion
de paquetes, llamado IP por ser el protocolo nativo de Internet (Internet Protocol),
sobre el que se construyen otros protocolos de mayor nivel. El mas importante de
ellos, el protocolo TCP (Transmission Control Protocol), da nombre, junto con el IP,
al protocolo TCP/IP. A su vez estos protocolos pueden incluir subprotocolos dentro
de ellos. Esto se vera claramente en el protocolo TCP.
288
r
GVA-ELAI-UPM
PFC0075-2003
A.7.4.
A cada servidor de la red TCP/IP se le asigna al menos una direccion IP, que
es un n
umero de 4 octetos. En la red Internet no hay dos ordenadores con el mismo
n
umero IP. En caso de necesidad se pueden asignar mas n
umeros IP a ese ordenador.
Ademas cada direccion IP tiene un nombre asociado. Ese nombre esta formado por el
nombre del servidor, que es u
nico dentro de una subred, y por el nombre del dominio,
que identifica a la subred dentro del conjunto de las subredes de Internet. La forma
de asignar IP, nombres y nombres de dominio en Internet sigue una serie de criterios
que permiten el encaminamiento de los paquetes IP por la red y la traduccion de
nombres de ordenadores en n
umeros IP.
En Internet hay tres tipos de organizaciones de IP:
Organizaciones tipo A El primer octeto del IP es el mismo para toda la organizacion. La organizacion asigna del IP es el mismo para toda la organizacion.
La organizacion asigna al resto de los octetos a cada IP de su organizacion. La
organizacion dispone de direcciones para asignar. Este tipo de organizaciones
r
GVA-ELAI-UPM
PFC0075-2003
289
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
solo se asignan a pases.
Organizaci
on tipo B Los dos primeros octetos del IP estan fijos. La organizacion
dispone de 65536 direcciones IP para asignar. Suelen ser organizaciones de
tama
no medio (universidades, grandes empresas).
Organizaci
on tipo C Se fijan los tres primeros octetos, dejando 256 posibles direcciones.Se utilizan en peque
nos proveedores de servicios Internet (ISP).
Resoluci
on de nombres en el protocolo IP
290
r
GVA-ELAI-UPM
PFC0075-2003
A.7.5.
El mecanismo de difusi
on (broadcast) en el protocolo
IP
El protocolo IP al igual que el protocolo Ethernet tambien dispone de un mecanismo de difusion (broadcast), que permite enviar paquetes desde un ordenador a todos
los ordenadores de la red. Cada tipo de subred (A,B o C)tiene una mascara de subred
asociada (255.0.0.0 para la A, 255.255.0.0 para la B y 255.255.255.0 para la C) que
determina las direcciones IP que escuharan los paquetes de difusion. El protocolo de
difusion es ampliamente usado por Netbios sobre TCP/IP en la implementacion de
Microsoft, lo que permite emular al protocolo TCP/Ipde Windows el comportamiento
del protocolo Netbeui.
El protocolo de difusion de paquetes tiene dos grandes desventajas: la primera
es que sobrecarga la red. Por ello en las redes basadas en Windows se introduce el
protocolo WINS, que intenta evitar en la medida de lo posible el envo de paquetes de
difusion. La segunda desventaja es que los puentes y encaminadores que comunican
las subredes, si entienden el protocolo IP, no permiten el paso de paquetes de difusion.
A.7.6.
Implementaci
on del protocolo TCP/IP en NT
La implementacion del protocolo TCP/IP en NT persigue dos metas: implementar completamente el protocolo TCP/IP en NT, tanto a nivel de protocolos
(IP,TCP;UDP,etc) como la inclusion de los servicios mas habituales (FTP, TELNET
(Cliente solo), SNMP y otros). Por otro lado permite utilizar el protocolo TCP/IP como u
nico protocolo de la red, ya que los servicios de Netbios sobre TCP/IP permiten
la comparticion de ficheros e impresoras en la red Windows.
La mayor parte de los clientes TCP/IP tienen version para NT. Se esta haciendo
un gran esfuerzo a su vez para dotar a NT de todos los servidores tpicos de Internet.
Hay servidores de dominio p
ublico de FTP, DNS, Gopher, TELNET, SMTP, POP3
Y WEB, aparte de las propias incluidas en el NT Server. ademas existen versiones
comerciales de dichos servidores, normalmente mas potentes y seguras.
A.7.7.
Configuraci
on del protocolo TCP/IP en NT
r
GVA-ELAI-UPM
PFC0075-2003
291
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
Red del Panel de Control (ver figura A.14).
En NT 3.51 debemos elegir la opcion Protocolo TCP/IP y elementos relacionados. En estecuadro de dialogo nos aparecen las opciones que se pueden instalar. En
Nt 4.0 se elige en Panel decontrol\Red\Protocolos\Agregar el Protocolo TCP/IP y
elementos relacionados. Figura A.15.
En este cuadro se pueden se
nalar las opciones a instalar. Las mas comunes son
las utilidades de conectividad (clientes ftp, telnet, finger, etc.), y son basicamente las
u
nicas necesarias. En este cuadro de dialogo tambien se puede seleccionar la configuracion automatica va el protocolo DHCP. En NT 4.0 el cuadro de dialogo se ha
modificado de manera que ahora la configuracion del protocolo TCP/IP esta organizada por bloques funcionales. En el caso de configuracion manual debemos conocer
una serie de parametros. El primero es la direccion IP del ordenador. En NT se puede
asignar una direccion IP a cada adaptador de red instalado, e incluso a un mismo
adaptador se le pueden asignar varias direcciones IP. Esto u
ltimo se usa en Internet
para crear servidores virtuales. Luego se debe incluir una de las tres mascaras de
subred posibles, para redes de tipo A, B o C. Si la red en la que se halla conectado
el ordenador esta conectada con otras redes va una pasarela (gateway), que puede
292
r
GVA-ELAI-UPM
PFC0075-2003
ser un puente o encaminador, hay que incluir su direccion en la casilla para puerta
de enlace.
Si en la red hay servidores WINS, podemos incluir la direccion de un servidor
WINS primario y otro secundario.
Si en la red hay un servidor DNS (obligatorio en las redes conectadas a Internet)
podemos completar las opciones de DNS.
Como nombre de host, NT por defecto usa el de Windows, pero debera coincidir
con el que se le ha asignado en el servidor de nombres. En la lista Orden de b
usqueda
del servicio de nombres de dominio debemos proporcionar una lista con las direcciones IP de los servidores de nombres que debe usar. Se pueden incluir servidores
de nuestra red y de otras, aunque suelen ser mas lentos. Debemos a
nadir a la casilla
nombre de dominio el nombre de dominio de la subred local. Si no se proporciona
un dominio, el protocolo TCP/IP usa por defecto el dominio local.
Podemos a
nadir otros dominios para que se usen por defecto, a
nadiendo entradas
a la lista orden de b
usqueda del sufijo de dominio.
Se pueden configurar varias opciones avanzadas para cada adaptador de red o pulsando el boton avanzadas del cuadro de dialogo Configuraci
on de TCP/IP,
en la seccion Direccion IP (ver figura A.16).
Tambien se puede activar el protocolo PPTP (Point to Point Tunneling Protocol)
r
GVA-ELAI-UPM
PFC0075-2003
293
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
que es el Protocolo de T
unel Punto a Punto. Este protocolo permite construir redes
privadas seguras dentro de redes de transmision p
ublicas, siendo capaz de encapsular
los diferentes protocolos de red empleados en NT, como son NETBEUI, TCP/IP y
IPX/SPX. Este protocolo utiliza cifrado de los paquetes, y algoritmos de clave p
ublica
que hacen muy difcil examinar los paquetes enviados a traves de una red como puede
ser Internet. En este cuadro se pueden:
Asignar m
ultiples direcciones IP a un mismo adaptador. Esto se usa cuando
un mismo adaptador de red debe poseer varias direcciones IP. En Internet es
muy com
un el asignar m
ultiples direcciones IP a un adaptador. El mejor uso
de este mecanismo consiste en reservar una direccion IP y un nombre de ordenador para cada servicio Internet que se instale en el servidor. Si por ejemplo
se planea instalar un servidor FTP y un servidor WWW sobre el servidor, se
deben reservar dos direcciones separadas de la principal del servido, e instalar
cada uno de los servicios en cada direccion. De esta manera es muy facil llevarse
294
r
GVA-ELAI-UPM
PFC0075-2003
Activar el agente de Proxy WINS, para lo cual la red debe disponer de servidor
WINS. Un agente de proxy WINS es un equipo que permite que otros equipos
que no estan configurados para acceder a un servidor WINS puedan acceder a
los nombres contenidos en ese servidor WINS. Normalmente esta situacion se da
cuando el servidor WINS esta en una red remota, por lo que los equipos de la red
local que no tienen activado el cliente WINS no pueden acceder a los nombres
registrados en ese servidor. Al activar el proxy WINS las peticiones de b
usqueda
y registro de nombres Windows realizadas en modo local (va broadcast) son
atendidas y redirigidas sobre el servidor WINS por el servidor proxy WINS.
Configurar los parametros de red de Windows, que funcionan con el protocolo
Netbios sobre TCP/IP. El archivo En NT 4.0 se ha introducido el agente Rele de
DHCP. Normalmente el protocolo DHCP funciona sobre una red local, ya que
se trabaja siempre en modo de difusion de paquetes (broadcast). En este modo
los paquetes no pueden saltar los encaminadores, salvo que estos soporten el
protocolo de reenvo de paquetes BOOTP. Si es necesario que en una red se
tenga acceso a un servidor DHCP remoto, se puede instalar un rele DHCP,
que es un servicio que se conecta con un servidor DHCP remoto para realizar la
configuracion dinamica en la red local. Se pueden a
nadir en el cuadro de dialogo
de Rele DHCP varios servidores DHCP, as como configurar los parametros de
funcionamiento del rele.
r
GVA-ELAI-UPM
PFC0075-2003
295
DE SISTEMAS Fernando Ballesteros Herranz
APENDICE
A. ADMINISTRACION
En el cuadro de dialogo de Enrutamiento (encaminamiento) se puede activar
el encaminamiento IP, si se disponen de 2 o mas direcciones IP en el ordenador. Esta
situacion es habitual cuando se disponen de dos tarjetas de red, cada una conectada
a una red fsica diferente. Ver figura A.18.
296
r
GVA-ELAI-UPM
PFC0075-2003
Bibliografa
[ANDRE] Andrews, Mark. Aprenda Visual C++ Ya. McGraw-Hill, 1999.
[BARBA] Barba Mir, C. A prop
osito del est
andar DICOM 3.0. Hospital Clnico
Universitario Lozano Blesa (Zaragoza).
http://www.hcu-lblesa.es/mane/noticia/didcom3.htm
[BATE] Bates, Jon. & Tompkins, Tim. Microsoft Visual C++ 6. 2000, Prentice
Hall.
s. & Sancho ,Adela. Comunicaciones y Bases de
[BOBA00] Bobadilla, Jesu
datos con Java a traves de ejemplos. 2003, Ra-Ma
s. Java a traves de ejemplos. 2003, Ra-Ma
[BOBA01] Bobadilla, Jesu
s, A. &
[CASCA] Cascales, B. & Lucas, P. & Mira, JM. & Pallare
A
297
BIBLIOGRAFIA
298
r
GVA-ELAI-UPM
PFC0075-2003