Академический Документы
Профессиональный Документы
Культура Документы
ndice general 2
ndice de guras
1. Introduccin
1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11
1.2.
Entorno
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.3.
Planteamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.4.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
1.4.1.
16
1.4.2.
. . . . . . . . . . . . . . . . .
18
1.4.2.1.
18
1.4.3.
Formato DICOM . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
1.4.4.
Segmentacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.4.4.1.
Denicin de segmentacin
. . . . . . . . . . . . . . . . .
22
1.4.4.2.
Tcnicas de segmentacin . . . . . . . . . . . . . . . . . .
22
1.4.4.2.1.
. .
23
1.4.4.2.2.
23
1.5.
Organizacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2. Herramientas
2.1. Visual Studio 2008 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26
2.1.1.
27
2.2.
Qt
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.2.1.
Instalacin de Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.2.2.
29
2.3.
CMake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.3.1.
Instalacin de CMake
. . . . . . . . . . . . . . . . . . . . . . . . .
30
2.4.
31
2.4.1.
Instalacin de ITK . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.4.2.
Compilacin de ITK
. . . . . . . . . . . . . . . . . . . . . . . . . .
32
2.4.3.
. . . . . . . . . . . . . .
34
2.4.3.1.
. . . . . . . . . . . . . . . . .
38
2.5.
39
2.5.1.
Instalacin de VTK
. . . . . . . . . . . . . . . . . . . . . . . . . .
41
2.5.2.
Compilacin de VTK . . . . . . . . . . . . . . . . . . . . . . . . . .
41
2.5.3.
43
47
47
3.1.1.
47
3.2.
49
3.3.
. . . . . . . . . . . . . . . . . . . . . .
52
3.4.
55
3.4.1.
Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
3.4.2.
56
3.4.3.
Crear un botn . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
3.4.3.1.
Ejemplo de botn
. . . . . . . . . . . . . . . . . . . . . .
58
3.4.4.
59
3.4.4.1.
Ejemplo de etiqueta . . . . . . . . . . . . . . . . . . . . .
59
3.4.5.
60
3.4.5.1.
. . . . . . . . . . . . .
61
3.4.6.
Crear un spinbox
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
3.4.6.1.
Ejemplo de un spinbox
. . . . . . . . . . . . . . . . . . .
63
3.4.7.
Crear un combobox . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
3.4.7.1.
Ejemplo de un combobox
. . . . . . . . . . . . . . . . . .
64
3.4.8.
Crear un frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
3.4.8.1.
Ejemplo de un frame
. . . . . . . . . . . . . . . . . . . .
66
3.5.
68
3.6.
. . . . . . . . . . . . . . . . . . . . . . . . . . .
71
4. Resultados
4.1. Interfaz Grca de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . .
74
74
4.2.
. . . . . . . . . . . . . . . . . . . . . . .
74
4.2.1.
Primera ventana
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
4.2.2.
Segunda ventana
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
4.3.
Evaluacin de la herramienta
. . . . . . . . . . . . . . . . . . . . . . . . .
79
83
Bibliografa
85
ndice de guras
1.1. Ubicacin del hgado en la anatoma humana. . . . . . . . . . . . . . . . . 14
1.2.
14
1.3.
15
1.4.
. . . . . . . . . . . . . . . . . . . . . . . . .
16
1.5.
1.6.
. . . . . . . . . . . . . . . . .
18
1.7.
19
1.8.
. . . . . . . . . . . . . . . . . . . . . . . .
20
1.9.
20
2.1.
26
2.2.
. . . . .
27
2.3.
Logotipo de Qt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.4.
29
2.5.
29
2.6.
30
2.7.
Logotipo de CMake.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.8.
31
2.9.
Logotipo de ITK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
32
33
33
2.13.
34
34
. . . . . . . . . . . . . .
35
38
. . . . . . . . . . . . . . . .
38
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
40
40
41
. . . . . . . . . . . . . . . .
42
42
. . . . . . . . . . . . . . . . . . . . . .
42
2.25.
43
3.1.
. . . . . . . . . . . . . . . .
49
3.2.
. . . . . . . . . . . . . . . . . . . . .
50
3.3.
. . . . . . . . . . . . . . . . . .
50
3.4.
. . . . . . . . .
51
3.5.
51
3.6.
52
3.7.
. . . . . . . . . . . . .
52
3.8.
. . . . . . . . . . . . . . . . . . . . .
53
3.9.
Clase QWidget
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
59
60
61
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
3.20. QComboBox.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
. . . . . . . . . . . . . . . . . . . . . . . . . .
66
66
4.1.
. . . . . . . . . . . . . . . . . . . . .
76
4.2.
. . . . . . . . . . . . . . . . . . . . .
78
4.3.
79
4.4.
79
4.5.
4.6.
. . . . . . . . . . . . . . . . .
80
4.7.
4.8.
4.9.
. . . . . . . .
82
Agradecimientos
Quiero dar las gracias a mis dos tutoras de proyecto, Valery y M Jos, por haber conado en mi y haber podido contar con ellas en todo momento.
A Fernando, porque no slo ha sido un muy buen amigo, sino que tambin ha sido como un tutor para mi; siempre dispuesto a ayudarme y sin perder jams la paciencia conmigo.
Tambin quiero mencionar a Carlos y a los dems miembros del proyecto NaRALAp, que junto con mis compaeros de LabHuman han hecho que estos meses de trabajo hayan sido ms fciles.
Especial mencin merecen mis padres, por estar junto a mi dndome su cario y su apoyo incondicional, da tras da, todos los das de mi vida. No imagino mejores padres que los que tengo. Gracias por ensearme a ser feliz a pesar de las dicultades. Gracias por nuestra pequea familia.
A Christian, mi novio y adems mi mejor amigo, porque desde que nos conocimos no me ha dejado ni un solo momento. Hace mucho tiempo que no somos uno y uno, sino dos, y juntos afrontamos los retos que se nos presentan. Gracias por hacerme tan feliz.
Por ltimo, quiero darles las gracias a todas y cada una de las personas que siempre han credo en mi, mis amigos y mi familia.
Captulo 1
Introduccin
1.1. Objetivos
El principal objetivo de este proyecto es el desarrollo de una herramienta software que permita la segmentacin y visualizacin tridimensional (3D) de los diferentes tejidos de hgados reales a partir de un volumen de imgenes procedentes de dispositivos clnicos de escaneo 3D no invasivos. Estos instrumentos de exploracin no invasiva pueden ser por ejemplo, la resonancia magntica (MR: Magnetic Resonance ) o la tomografa computerizada (CT: Computer Tomography ).
Estudio, anlisis y evaluacin de los diferentes algoritmos de imgenes mdicas aplicados al hgado.
Implementacin de aquellos algoritmos que mejor se ajustan a la segmentacin de tejidos buscada en este proyecto.
Desarrollo de una interfaz grca de usuario (IGU) que permita la visualizacin 3D de los tejidos del hgado segmentados. Los tejidos segmentados podrn visualizarse desde diferentes puntos de vista, esto permitir la seleccin de aquellos tejidos sobre los que se podrn aplicar diferentes niveles de transparencia.
Este ltimo objetivo permitir analizar la bondad de los diferentes algoritmos de segmentacin implementados.
11
El proyecto nal de carrera se engloba dentro del proyecto NaRALAp, un proyecto nacional del plan Avanza. NaRALAp tiene como objetivo el diseo e implementacin de un sistema de Realidad Aumentada para la asistencia en ciruga abdominal as como el desarrollo de un modelo biomecnico de hgado que, junto con el sistema de Realidad Aumentada permitar la navegacin intra-operatoria a los cirujanos durante la ciruga laparoscpica de dicho rgano. NaRALAp tiene como objetivo avanzar en la creacin de tecnologa para el desarrollo de un sistema de navegacin laparoscpica fundamental para la realizacin de intervenciones laparoscpicas ms seguras y acordes con la planicacin preoperatoria.
1.2. Entorno
Hoy en da, el entorno hospitalario est equipado con aparatos mdicos que habitualmente proporcionan valiosa informacin en forma de imagen mdica como soporte al diagnstico o al tratamiento de un paciente en particular. La tomografa computarizada (CT), la resonancia magntica (MR), la ecografa y la tomografa por emisin de positrones (PET) son ejemplos de modalidades de imgenes que se utilizan con frecuencia.
Los algoritmos para la extraccin de informacin a partir de imgenes son conocidos como algoritmos de segmentacin, y se utilizan en numerosas aplicaciones biomdicas de tratamiento de imagen. La segmentacin de las imgenes permite extraer y clasicar una regin especca o un volumen de inters, aunque para ello a menudo es necesario dividir los datos de la imagen en sus componentes. La segmentacin de imgenes proporciona informacin cuantitativa acerca de la anatoma pertinente, sirve por ejemplo para determinar el tamao o volumen. Tambin permite la visualizacin tridimensional de una estructura particular, con la triangulacin de supercie, isosuperfcies (isosurfaces ) o volume rendering. No existe un nico enfoque que pueda resolver el problema de la segmentacin, y los diferentes mtodos sern ms ecaces en funcin de la modalidad de imagen que est siendo procesada [1].
El procesamiento y anlisis de imgenes biomdicas es una herramienta importante en la mejora de la calidad y cantidad de informacin dada por mtodos no invasivos, es por ello, que juega un papel muy importante para el diagnstico, tratamiento y seguimiento
12
de patologas. La identicacin de los diferentes tejidos es importante para la planicacin de los tratamientos a seguir, principalmente en los casos de pacientes con tumores.
Los principales objetivos del anlisis de imgenes biomdicas son segn Rangaraj et al.[2]:
Recopilacin de informacin: A travs de la medicin de un fenmeno para poder interpretar un rgano, un proceso o un sistema.
Terapia y control: Modicacin de la conducta de un sistema basndose en los resultados de las actividades mencionadas anteriormente para garantizar un resultado especco.
Evaluacin: Anlisis de los objetivos para determinar la capacidad para satisfacer los requisitos funcionales, rendimiento, control de calidad o cuanticar el efecto del tratamiento.
Es en este entorno donde un sistema de visualizacin 3D que nos muestre la segmentacin de los diferentes tejidos o regiones de un rgano puede ser de gran utilidad, tanto para la recopilacin de informacin, cmo para el diagnstico, tratamiento de una enfermedad, o planicacin de una ciruga.
13
1.3. Planteamiento
El hgado es el rgano ms grande del cuerpo y tal y como muestra la Figura 1.1, tiene una posicin estratgica en la circulacin, ya que recibe la sangre proveniente del intestino. Por tanto, absorve nutrientes, toxinas y microorganismos, pudindose verse afectado por muchas y diferentes enfermedades. Las imgenes en tres dimensiones permiten una evaluacin precisa de la ubicacin de las lesiones, y su relacin con las venas, arterias y otros rganos circundantes[1].
La herramienta sotfware desarrollada en este proyecto leer y visualizar imgenes del hgado procedientes de tcnicas no invasivas almacenadas en formato DICOM, aplicar diferentes tcnicas de segmentacin y permitir la visualizacin 3D de dichas segmentaciones (Figura 1.2). Resultando, por tanto, de utilidad para los radilogos para la evaluacin, seguimiento y planicacin quirrgica de pacientes con enfermedades hepticas, ya sea para realizar porteriormente ciruga u cualquier otro tratamiento de intervencin.
14
En esta aplicacin se utiliza el lenguaje de programacin Visual C++ como cdigo de unin y las siguientes herramientas(Figura 1.3):
Las libreras ITK para la segmentacin de las imgenes biomdicas del hgado.
Las libreras VTK para el renderizado y visualizacin de las estructuras del hgado en 3D.
15
El hgado es el rgano ms grande del cuerpo humano. Pesa en cadver alrededor de 1500 gramos y en vivo este peso aumenta 400 gramos por la sangre contenida en el rgano. En los humanos consiste en una masa continua de clulas, dividida en forma incompleta por separaciones de tejido conectivo. Dentro de esta masa de clulas continua, las subdivisiones de los conductos biliares y de los vasos hepticos tienen numerosas conexiones.
El hgado est situado en la parte superior del abdomen, debajo del diafragma y est mantenido en su posicin por:
Vena cava inferior, a la cual est unido a travs de las venas supra-hepticas.
Ligamento redondo del hgado, que remplaza en el adulto la vena umbilical del feto.
Repliegues peritoneales.
A pesar de la estructura monoltica del hgado arbitrariamente se lo considera compuesto por lbulos. Consta de dos lbulos principales, el derecho y el izquierdo que estn divididos por un ligamento llamado falciforme, comprendiendo el lbulo derecho cinco
16
sextos y el lbulo izquierdo un sexto de la masa heptica. Un tercer lbulo ms pequeo llamado cuadrado y el lbulo de Spiegel (lbulo caudado) (Figura 1.4).
Cuando el cirujano planea una ciruga, hace una divisin del hgado en segmentos (Figura 1.5). Los segmentos del hgado se denen como las regiones servidas por una subdivisin de la vena porta, de la arteria heptica y del conducto heptico comn, que viajan juntos a travs de toda la masa heptica. Esta segmentacin es una segmentacin anatmica (clasicacin de Couinaud) que divide al hgado en ocho segmentos funcionales independientes. Cada segmento es independiente porque tiene su propio ujo de entrada vascular, su ujo de salida vascular y su ujo de salida biliar.
Figura 1.5: Divisin anatmica del hgado en segmentos segn la nomenclatura de Couinaud.
Hay muchos trabajos relacionados con esta segmentacin [3]-[10] entre otros, ya que es la segmentacin utilizada habitualmente en ciruga. De hecho, una herramienta de visualizacin 3D que permitiese visualizar los diferentes tejidos del hgado sera de gran ayuda a la hora de planicar una intervencin que requiera de esta segmentacin.
Se han estudiado algunos de los mtodos de segmentacin del hgado por tejidos ms recientes ([11]-[15]) y se ha llegado al siguiente conjunto de conclusiones:
1. El nmero de tejidos que se diferencian en el hgado escaneado son el portal heptico, las venas hepticas, las arterias hepticas y el sistema biliar.
17
3. Para la segmentacin se utilizan contrastes y como la toma de imgenes se realiza en diferentes instantes de tiempo para cada contraste, hay que hacer un registro de las imgenes para situarlas en un sistema de coordenadas comn.
1.4.2.1.
Entre los procedimientos no invasivos habitualmente usados se encuentran la tomografa computarizada y la resonancia magntica.
Tomografa computarizada
La tomografa computarizada (CT) consiste en la obtencin de imgenes detalladas de los rganos y estructuras internas del cuerpo, por medio de una fuente emisora de radiacin ionizante (rayos X) (Figura 1.6).
18
La fuente emisora de radiacin emite un haz de rayos X que incide sobre el objeto a estudiar. Parte de dicha radiacin es absorvida por el objeto y el resto es recogida por un receptor. Tanto emisor como receptor giran en crculo alrededor del objeto sobre un eje que cambia su inclinacin. Una vez completados los 360
o se habrn
obtenido las proyecciones de un corte del objeto. Se producen mltiples imgenes como consecuencia de dicha rotacin. Un ordenador combina todas esas imgenes en una imagen nal que representa un corte. A continuacin, se mueve una pequea distancia y se repite el proceso para obtener un nuevo corte. Las tomografas computarizadas muestran ms detalles que las radiografas estndar. Mientras que con las radiografas estndar se obtiene una nica imagen, la tomografa permite obtener varias imgenes en distintos planos de la zona anatmica a estudio y por tanto, tener muchas vistas diferentes del mismo rgano o de la misma estructura proporcionando as, mayor detalle. La informacin de los rayos X es enviada a un ordenador que interpreta los datos de los rayos X y los presenta en forma bidimensional en un monitor.
Resonancia magntica
La resonancia magntica (MR) consiste en la obtencin de las imgenes de los rganos y estructuras internos del cuerpo mediante el empleo de un campo electromagntico (imn), un emisor/receptor de ondas de radio (escner) y un ordenador (Figura 1.7).
La resonancia magntica permite obtener imgenes del organismo de forma no invasiva sin emitir radiacin ionizante (rayos X) y en cualquier plano del espacio. Las ondas de radio y el campo electromagntico excitan a los protones (ncleos de los tomos de hidrgeno) que se encuentran en los tejidos que van a ser estudiados,
19
provocando que se alineen unos con otros. Cuando la radiacin electromagntica deja de emitirse los protones se liberan y regresan a su posicin inicial liberando energa en forma de ondas de radio que son recogidas por el escner y enviadas a un ordenador para su procesamiento en forma de imagen.
DICOM (Digital Imaging and Communication in Medicine ) es un estndar para el intercambio de imgenes mdicas, pensado para el manejo, almacenamiento, impresin y transmisin de imgenes mdicas (Figura 1.8). El estndar DICOM especica la forma en que se debe guardar la informacin relativa a las exploraciones en archivos digitales y el contenido que estos archivos pueden tener. Adems, ofrece la oportunidad de interconectar sistemas informticos de diferentes fabricantes y hace posible que se comuniquen entre s.
Los cheros DICOM tienen una extensin .dcm y consisten en dos partes diferenciadas (Figura 1.9):
20
Cabecera En la cabecera se especican datos administrativos (datos del paciente, tipo de exploracin, equipo de adquisicin, condiciones en que se tom la imagen, hospital etc.) y datos sobre la imagen (tamao etc.). La cabecera est compuesta por:
Prembulo El estndar DICOM especica que un chero en formato DICOM debe de comenzar con un prembulo. Este prembulo tiene un tamao jo de 128 bytes y est pensado para tener un uso denido por la implementacin. Puede contener informacin sobre el nombre de la aplicacin usada para crear el chero o informacin que permita a aplicaciones acceder directamente a los datos de la imagen almacenada en el chero.
Prejo Este prejo consiste en cuatro bytes que contienen la cadena de caracteres DICM. El propsito de este prejo es permitir a las implementaciones diferenciar si un chero es DICOM o no.
Imagen Una imagen se dene como una funcin bidimensional compuesta por sus coordenadas espaciales (x,y) y su intensidad o nivel de gris. La imagen consiste en un mapa de de densidades. Esta informacin puede interpretarse como una imagen en escala de grises si se hace una superposicin de la escala de grises sobre la escala de densidades (unidades Hounseld). La escala de densidad o intensidad va de -1000 a 1000 o de -1000 a 4000. Por otra parte, slo contamos con 255 niveles de grises, donde 0 es blanco y 255 negro, por lo que se hace una transformacin de unidades de Hounseld a la escala de grises. La forma en que se hace esta transformacin de escalas est denida por el estndar DICOM [16].
21
1.4.4. Segmentacin
1.4.4.1. Denicin de segmentacin
La segmentacin de imgenes es el proceso mediante el cual asignamos una etiqueta a cada uno de los pxeles de una imagen, de manera que pxeles con caractersticas comunes son agrupados como pertenecientes a una misma entidad.
El objetivo de la segmentacin de una imagen consiste en separar los distintos objetos que aparecen en la misma del fondo y diferenciarlos entre ellos. Tras la segmentacin, cada pxel de la imagen quedar identicado como perteneciente a uno de los objetos que la forman o al fondo.
Las propiedades deseables de una regin seran la homogeneidad del color o intensidad dentro de la misma, la homogeneidad de su textura y la existencia de bordes claros con las regiones adyacentes.
La segmentacin no tiene porque limitarse a la imagen bidimensional, sino que el mismo concepto puede ser extendido a volmenes tridimensionales.
1.4.4.2.
Tcnicas de segmentacin
Las tcnicas de segmentacin se pueden dividir en tcnicas basadas en pxeles o tcnicas basadas en regiones de la imagen. Las primeras asignan la misma etiqueta a pxeles con intensidades similares, independientemente de si los pxeles etiquetados forman un conjunto espacialmente compacto. Las tcnicas basadas en regiones asignan la misma etiqueta slo a pxeles que forman una regin compacta.
A continuacin se describen las tcnicas de segmentacin que se van a aplicar en este proyecto: una basada en pxel, la umbralizacin, y otra basada en regiones, el crecimiento de regiones y sus variantes.
22
1.4.4.2.1.
Umbralizacin La umbralizacin (thresholding ) es un mtodo de segmentacin de imgenes que acta segn el nivel de intensidad de las mismas. La umbralizacin trata de determinar un valor de intensidad, denominado umbral (threshold ), que separa las diferentes partes de la imagen. La segmentacin se logra agrupando todos los pixeles con mayor intensidad cercanos a los diferentes umbrales. En el caso de la umbralizacin binaria (binary
thresholding ) la segmentacin resultante ser una imagen con los pxeles agrupados
a nivel 1 y el resto (fondo de la imagen) a valor 0. La umbralizacin es una tcnica efectiva para obtener la segmentacin de imgenes donde estructuras diferentes tienen caractersticas diferenciables. Existen mtodos interactivos, basados en la apreciacin visual del usuario, pero tambin existen mtodos automticos. Generalmente, la umbralizacin es el paso inicial de una secuencia de operaciones de procesamiento de imgenes. Su principal limitacin es que es sensible al ruido e inhomogenidades de intensidad, las cuales pueden ocurrir en imgenes de resonancia magntica. Estos factores corrompen el histograma de la imagen, haciendo la separacin ms difcil.
1.4.4.2.2.
Crecimiento de regiones El crecimiento de regiones (region growing ) es una tcnica para extraer regiones de la imagen que estn conectadas segn cierto criterio predenido. Este criterio puede estar basado en informacin de intensidades y/o bordes de la imagen. Este mtodo requiere un punto semilla (seed point ) que es seleccionado manualmente por el usuario, y extrae todos los pxeles conectados a la semilla, que tengan el mismo valor de intensidad. Una regin homognea crece alrededor de la semilla y los pxeles vecinos con intensidades similares se van aadiendo iterativamente a la regin.
23
Su desventaja principal es que requiere interaccin manual para obtener el punto semilla. La regin creciente tambin puede ser sensible al ruido, causando que las regiones extradas tengan agujeros e inclusive que se desconecten. Los algoritmos de crecimiento de regiones varan segn el criterio utilizado para decidir si un pxel debe ser incluido en una regin o no, la conectividad usada para determinar los vecinos y la estrategia utilizada para visitar los pxeles vecinos [17]. Algunos de esos algoritmos son:
Connected Threshold
Un criterio simple para la inclusin de pxeles en una regin es evaluar el valor de intensidad en el interior de un intervalo especco. Los valores de lmite inferior y superior deben ser proporcionados por el usuario. El algoritmo incluye todos aquellos pxeles cuya intensidad se encuentran dentro del intervalo:
para
todos los pxeles que guran actualmente en la regin donde hemos situado la semilla. El usuario proporciona el factor que se utiliza para multiplicar la desviacin estndar y denir un rango alrededor de la media. Los pxeles vecinos cuyos valores de intensidad se hallan dentro del rango son aceptados e incluidos en la regin. Cuando no hay ms pxeles vecinos que cumplan el criterio, se considera que el algoritmo ha terminado su primera iteracin. En ese punto, se vuelven a calcular la media y desviacin estndar de los niveles de intensidad, utilizando todos los pxeles que guran actualmente en la regin. Esta media y desviacin estndar denen un nuevo rango de intensidad que se utiliza para visitar a los vecinos de la regin actual y evaluar si su intensidad est dentro del rango. Este proceso iterativo se repite hasta que no haya ms pxeles que aadir o se alcanza el nmero mximo de iteraciones.
I(x) [m f , m + f ]
24
1.5. Organizacin
Durante los siguientes captulos se pretende mostrar con detalle cada una de las tareas que se han realizado para la consecucin de los objetivos del proyecto.
En el captulo 2 se explicar detalladamente las distintas herramientas utilizadas para llevar a cabo la aplicacin implementada en este proyecto y los pasos previos para la instalacin de tales herramientas.
En el captulo 3 se mostrarn los conceptos bsicos de la programacin orientada a objetos, los pasos para la creacin de un proyecto nuevo y la estructura interna que posee la aplicacin. Adems se detallarn los elementos bsicos para crear la interfaz grca de usuario.
Por ltimo, en el captulo 5 se expondrn las conclusiones obtenidas junto con las lneas futuras.
25
Captulo 2
Herramientas
En la aplicacin desarrollada en el presente proyecto se han utilizado el siguiente conjunto de herramientas y libreras de programacin que sern descritas en este captulo:
Qt
CMake
ITK
VTK
26
El entorno de desarrollo integrado de Visual Studio ofrece un conjunto de herramientas destinadas a ayudar al programador a escribir y modicar cdigo, as como a detectar y corregir errores.
Los tres pilares bsicos de Visual Studio 2008 son: el desarrollo rpido de aplicaciones, la colaboracin eciente entre equipos y la innovacin en experiencias de usuario.
27
2.2. Qt
Qt (Figura 2.3) es una biblioteca multiplataforma para desarrollar interfaces grcas de usuario, programacin web, bases de datos y tambin para el desarrollo de programas sin interfaz grca como herramientas de la consola y servidores. Qt utiliza el lenguaje de programacin orientado a objetos C++, aunque adicionalmente puede ser utilizado con otros lenguajes de programacin.
Permite realizar una programacin visual y dirigida por eventos. En el caso de la programacin visual, el programador centra su atencin en disear el aspecto grco de la aplicacin, la distribucin de los elementos visuales llamados widgets, la interaccin entre los mismos, los distintos tipos de ventanas existentes, etc. En tanto a lo concerniente a la programacin dirigida por eventos, el programador escribe el cdigo que se ejecutar en respuesta a determinados eventos. No existe la idea de un control de ujo secuencial en el programa, sino que el programador toma el control cuando se dispara un evento. La labor del programador, es por tanto, asociar a cada evento el comportamiento adecuado.
2.2.1. Instalacin de Qt
En el presente proyecto se ha utilizado la versin 4.5.0 de Qt. Para su instalacin se ejecutar el chero con extensin .exe , de la versin comercial o de la versin de prueba proporcionado en la pgina web
http://qt.nokia.com/downloads
y se instalarn las
28
http://qt.nokia.com/downloads/visual-studio-add-in
y se instalarn
Para comprobar que se ha instalado correctamente entramos en Visual Studio 2008 y vemos como aparece un men de Qt (Figura 2.6).
29
2.3. CMake
CMake (Figura 2.7) es una multiplataforma basada en un sistema de cdigo abierto. Se utiliza para controlar el proceso de compilacin. La compilacin es un proceso de traduccin de las instrucciones escritas en un determinado lenguaje de programacin a lenguaje mquina, el cul es interpretado por la computadora.
www.cmake.org,
http://www.cmake.org/cmake/
30
ITK est organizado en torno a una arquitectura de ujo de datos, es decir, los datos se representan mediante objetos que a su vez son procesados por ltros, conectados entre s mediante tuberas (pipelines ). Los ltros se pueden combinar entre s.
31
www.itk.org,
http://www.itk.org/ITK/resources/
software.html.
comprimidos con xtensin .zip , por lo que habr que descomprimir ambos.
Al ejecutar la aplicacin CMake (Figura 2.10), donde indica Where is the source
code: habr que poner el directorio donde estn las ITK descomprimidas del apartado
anterior (InsigthToolkit ). Mientras que en Where to build the binaries habr que poner una carpeta creada por el usuario donde estarn las ITK compiladas que se van a crear.
Una vez hecho esto, se har click en Congure. El siguiente paso pedir la plataforma en la que se va a hacer la compilacin de las libreras (Figura 2.11). Se pondr la versin Visual Studio 9 (que corresponde al Visual Studio 2008).
A continuacin se har de nuevo click en Congure. Saldrn una serie de variables en rojo en la pantalla que pueden ser modicadas o hacer click en Congure, una vez ms.
32
Las variables pasarn de estar en rojo a estar en gris y estar disponible la opcin ok . Se pulsar y el programa se cerrar por si solo al nalizar (Figura 2.12).
Cmake ha convertido los archivos binarios en C++ a Visual C++. Al abrir la carpeta creada por el usuario donde estarn las ITK compiladas (el directorio que se introdujo en Where to build the binaries ) aparece un proyecto llamado en Visual Studio 2008.
En el proyecto
derecho y se dar a Generar (Figura 2.13). Este proceso tardar alrededor de una hora y lo que se van a crear ahora son las libreras que posteriormente se usarn en los programas. Se puede ver simultneamente cmo se van creando estas libreras en la carpeta bin/debug , que se habr creado en el directorio Where to build the binaries (la carpeta donde estn las ITK compiladas). Una vez hecho esto, se podrn incluir las libreras ITK en cualquier proyecto (Figura 2.13).
33
Figura 2.13:
34
1. Aadir los directorios de inclusin adicionales: $(PATH_ITK_INCLUDES)\Code\Algorithms $(PATH_ITK_INCLUDES)\Code\BasicFilters $(PATH_ITK_INCLUDES)\Code\Common $(PATH_ITK_INCLUDES)\Code\IO $(PATH_ITK_INCLUDES)\Code\Numerics $(PATH_ITK_INCLUDES)\Code\Numerics\FEM $(PATH_ITK_INCLUDES)\Code\Numerics\NeuralNetworks $(PATH_ITK_INCLUDES)\Code\Numerics\Statistics $(PATH_ITK_INCLUDES)\Code\SpatialObject $(PATH_ITK_INCLUDES)\nifti\znzlib $(PATH_ITK_INCLUDES)\nifti\niftilib $(PATH_ITK_INCLUDES)\Utilities\vxl\core $(PATH_ITK_INCLUDES)\Utilities\vxl\vcl $(PATH_ITK_INCLUDES)\Utilities\vxl\v3p\netlib $(PATH_ITK_INCLUDES)\Utilities $(PATH_ITK_INCLUDES)\Utilities\DICOMParser $(PATH_ITK_INCLUDES)\Utilities\expat $(PATH_ITK_INCLUDES)\Utilities\gdcm\src
35
$(PATH_ITK_INCLUDES)\Utilities\itkExtHdrs $(PATH_ITK_INCLUDES)\Utilities\NrrdIO $(PATH_ITK_INCLUDES)\Utilities\MetaIO $(PATH_ITK_LIBS)\Utilities $(PATH_ITK_LIBS)\Utilities\DICOMParser $(PATH_ITK_LIBS)\Utilities\expat $(PATH_ITK_LIBS)\Utilities\gdcm $(PATH_ITK_LIBS)\Utilities\NrrdIO $(PATH_ITK_LIBS)\Utilities\vxl\core $(PATH_ITK_LIBS)\Utilities\vxl\vcl $(PATH_ITK_LIBS)\Utilities\vxl\v3p\netlib
Las variables $(PATH_ITK_INCLUDES) y $(PATH_ITK_LIBS) hacen referencia a la ruta donde se encuentra el cdigo fuente de las libreras ITK y las libreras compiladas, respectivamente. En el apartado siguiente se explicar como crear dichas variables.
ITKStatistics.lib ITKFEM.lib ITKAlgorithms.lib itkNetlibSlatec.lib ITKNumerics.lib ITKBasicFilters.lib ITKIO.lib ITKNrrdIO.lib itkgdcm.lib itkjpeg12.lib itkjpeg16.lib
36
itkopenjpeg.lib itkpng.lib itkti.lib itkjpeg8.lib ITKSpatialObject.lib ITKCommon.lib itkvnl_inst.lib itkvnl_algo.lib itkv3p_netlib.lib itkvnl.lib itkvcl.lib ITKMetaIO.lib itksys.lib ITKDICOMParser.lib ITKEXPAT.lib ITKniftiio.lib ITKznz.lib itkzlib.lib
37
2.4.3.1.
Una variable de entorno es un valor almacenado en memoria que simplica el valor al que corresponde y puede ser utilizado en varios procesos que funcionan simultneamente. As, para evitar especicar en Visual Studio 2008 todas las rutas donde se encuentran las libreras ITK podemos crear nuevas variables de entorno que simpliquen este paso. Para ello, se debe ir al Panel de control, a travs del men Inicio de Windows y hacer
A continuacin, hacer click en Opciones avanzadas y despus acceder a la pestaa llamada Variables de entorno. Por ltimo hacer click en el botn Nueva de Variables de usuario (Figura 2.17).
38
VTK es una de las herramientas estndar ms importante en la programacin para el anlisis de imgenes ya que cuenta con una amplia funcionalidad tanto para la imagen, como para tratamiento de supercies y visualizacin. No slo nos permite visualizar guras geomtricas, sino que adems soporta una amplia variedad de algoritmos de visualizacin y otras modernas tcnicas de modelado en 2D y 3D. Debido a su gran potencia, se hacen necesarios amplios recursos de memoria en el ordenador para poder aprovechar la totalidad de sus funcionalidades.
La comprensin de la estructura de la jerarqua orientada a objetos. Para generar una imagen 3D se necesitan unas entidades llamadas actores, luces y cmaras. Los actores hacen referencia a los objectos que aparecen en la imagen y poseen diversas propiedades que permiten cambiar su apariencia. La imagen 3D est iluminada por un conjunto de luces y el usuario mira la imagen como si lo hiciera a travs de una cmara virtual que enfoca dicha imagen tridimensional. Se puede cambiar la posicin y orientacin de las luces y las cmaras.
La comprensin de su arquitectura basada en tuberas. El procesamiento de los datos se realiza a travs de una arquitectura basada en
pipelines o tuberas tal y como se muestra en las Figuras 2.19 y 2.20 y se compone
de:
39
1. Fuentes: Producen datos. 2. Filtros: Operan en algunos datos para producir una versin modicada. 3. Mappers : Denen la interfaz entre los datos (por ejemplo, imgenes) y las primitivas grcas o software de representacin. 4. Actores/Volmenes: Generan la representacin visible de los datos. 5. Renderers : Generan una imagen 2D a partir de una escena 3D. Un renderer es un objeto que controla el proceso de convertir la geometra, una especicacin para las luces y una vista de cmara en una imagen. 6. Render Window : Hace referencia a la ventana de presentacin, es decir, es el espacio en pantalla en el que la imagen de la cmara virtual se muestra.
40
Al ejecutar la aplicacin CMake, donde indica Where is the source code habr que poner el directorio donde estn las VTK descomprimidas del apartado anterior (vtk-
5.4.2 ). Mientras que en Where to build the binaries habr que poner una carpeta creada
por el usuario donde estarn las VTK compiladas que se van a crear.
Despus se har click en Congure y el siguiente paso pedir la plataforma en la que se va a hacer la precompilacin de las libreras (Figura 2.11). Se pondr la versin Visual Studio 9 (que corresponde al Visual Studio 2008). A continuacin se har de nuevo
click en Congure. Saldrn una serie de variables en rojo en la pantalla, de las cuales se
cambiar VTK_USE_GUISUPPORT de OFF a ON (Figura 2.21).
41
Se repetir el proceso, haciendo click en Congure. Esta vez se cambiar VTK_USE_QVTK de OFF a ON (Figura 2.22).
Una vez ms se repetir el proceso, haciendo click en Congure . Esta vez se introducir en DESIRED_QT_VERSION la versin utlizada de Qt (en el proyecto actual correspondera con la versin 4, ya que se trata de la versin) y se cambiar VTK_USE_QVTK_QTOPENGL de OFF a ON (Figura 2.23).
Por ltimo se vuelve a hacer click en Congure y cuando las variables aparezcan el gris se hace click en Ok (Figura 2.24).
42
Cmake ha convertido los archivos binarios en C++ a Visual C++. Al abrir la carpeta creada por el usuario donde estarn las VTK compiladas (el directorio que se introdujo en
Where to build the binaries ) aparece un proyecto llamado Vtk.sln y que se ejecutar
en Visual Studio 2008.
Al situarse encima de ALL_BUILD, se pulsar el botn derecho y se dar a Generar (Figura 2.25). Este proceso tardar ms de una hora y lo que se van a crear ahora son las libreras que posteriormente se podrn usar en los programas. Se puede ver cmo se van creando simultneamente estas libreras en la carpeta bin/debug, que se habr creado en el directorio Where to build the binaries (la carpeta donde estn las VTK compiladas). Una vez hecho esto, se podrn incluir las libreras VTK en cualquier proyecto.
Figura 2.25:
43
1. Aadir los directorios de inclusin adicionales: $(PATH_VTK_INCLUDES)\Auxiliary\vtk" $(PATH_VTK_INCLUDES)\Common $(PATH_VTK_INCLUDES)\Common\Testing\Cxx $(PATH_VTK_INCLUDES)\Filtering $(PATH_VTK_INCLUDES)\GenericFiltering $(PATH_VTK_INCLUDES)\Geovis $(PATH_VTK_INCLUDES)\Graphics $(PATH_VTK_INCLUDES)\GUISupport\Qt $(PATH_VTK_INCLUDES)\IO $(PATH_VTK_INCLUDES)\Imaging $(PATH_VTK_INCLUDES)\Hybrid $(PATH_VTK_INCLUDES)\Infovis $(PATH_VTK_INCLUDES)\Rendering $(PATH_VTK_INCLUDES)\Rendering\Testing\Cxx $(PATH_VTK_INCLUDES)\Utilities $(PATH_VTK_INCLUDES)\Utilities\DICOMParser $(PATH_VTK_INCLUDES)\Utilities\MaterialLibrary $(PATH_VTK_INCLUDES)\Utilities\vtkalglib $(PATH_VTK_INCLUDES)\Utilities\verdict $(PATH_VTK_INCLUDES)\Utilities\vtkexodus2\include $(PATH_VTK_INCLUDES)\Utilities\vtkfreetype\include $(PATH_VTK_INCLUDES)\Utilities\vtklibproj4 $(PATH_VTK_INCLUDES)\Utilities\vtknetcdf $(PATH_VTK_INCLUDES)\Views $(PATH_VTK_INCLUDES)\VolumeRendering $(PATH_VTK_INCLUDES)\Widgets $(PATH_VTK_LIBS)\Common $(PATH_VTK_LIBS)\GUISupport\Qt
44
$(PATH_VTK_LIBS)\Rendering $(PATH_VTK_LIBS)\Utilities $(PATH_VTK_LIBS)\Utilities\DICOMParser $(PATH_VTK_LIBS)\Utilities\MaterialLibrary $(PATH_VTK_LIBS)\Utilities\verdict $(PATH_VTK_LIBS)\Utilities\vtkalglib $(PATH_VTK_LIBS)\Utilities\vtkexodus2\include $(PATH_VTK_LIBS)\Utilities\vtkfreetype\include $(PATH_VTK_LIBS)\Utilities\vtklibproj4 $(PATH_VTK_LIBS)\Utilities\vtknetcdf $(PATH_VTK_LIBS)\VolumeRendering
Las variables $(PATH_VTK_INCLUDES) y $(PATH_VTK_LIBS) hacen referencia a la ruta donde se encuentra el cdigo fuente de las libreras VTK y las libreras compiladas, respectivamente, cmo crear dichas variables se ha explicado en el apartado 2.4.3.1
vtkRendering.lib vtkGraphics.lib vtkHybrid.lib vtkImaging.lib vtkIO.lib vtkFiltering.lib vtkCommon.lib vtkftgl.lib vtkfreetype.lib vtkDICOMParser.lib vtkpng.lib
45
vtkti.lib vtkzlib.lib vtkjpeg.lib vtkexpat.lib vtksys.lib vtkexoIIc.lib vtkNetCDF.lib vfw32.lib vtkverdict.lib vtkmetaio.lib vtksqlite.lib QVTK.lib QVTKWidgetPlugin.lib vtkQtChart.lib
46
Captulo 3
Clases
Una clase es una agrupacin de atributos (datos) y mtodos que operan sobre esos atributos.
47
Objetos
Un objeto es la instancia de una clase concreta.
Herencia
La herencia es la propiedad que permite contruir clases a partir de otras. Se utiliza para crear clases (hijas) que incorporen propiedades y mtodos de otras clases (padres). As, podremos construir clases a partir de otras sin tener que reescribirlo todo. Una clase nueva creada a partir de una clase existente ser una subclase de esta clase ya existente. En resumen, las clases forman una estructura jerrquica de clasicacin, ya que los objetos heredan las propiedades y atributos de todas las clases a las que pertenecen.
Polimorsmo
El polimorsmo es la capacidad que tienen los objetos de una clase para responder al mismo mensaje o evento en funcin de los parmetros utilizados durante su invocacin.
A continuacin se describirn los pasos bsicos para crear una clase y un objeto perteneciente a dicha clase:
1. La forma bsica para denir una clase es: class nombre_clase { //Atributos de la clase tipo_atributo nombre_atributo; //Mtodos de la clase tipo_mtodo nombre_mtodo (prametros_mtodo); } Siendo class una palabra reservada para declarar una clase y las dos barras inclinadas // indicadores de que lo que sigue es un comentario.
2. Una vez denida la clase, se puede crear un objeto de la clase que hemos declarado de la siguiente forma: class nombre_clase nombre_objeto;
48
Como veremos despus, las deniciones de clases, as como las declaraciones de sus respectivos mtodos, y la creacin de objetos de clases se programarn en distintas partes del proyecto.
Como tipo de proyecto se elegir un proyecto basado en Qt: Qt4 Projects y despus Qt Application. Habr que indicar el nombre y la ubicacin del proyecto (en el caso que se muestra, se ha elegido como nombre nuevoproyecto). Una vez hecho esto, se abrir un asistente para la creacin de un proyecto Qt.
49
Mediante el asistente se podrn incluir disintos mdulos de libreras (SQL, OpenGL, XML etc), pero se recomienda utilizar las opciones por defecto. El ltimo paso del asistente permite modicar los nombres de los archivos que se generarn automticamente y la clase base a partir de la cual se generar el proyecto (Figura 3.2).
Al nalizar el asistente, en el men llamado Explorador de soluciones se mostrarn todos los archivos generados automticamente y que estn incluidos dentro del nuevo proyecto (Figura 3.3).
Los archivos generados (Figura 3.3) corresponden a uno de los siguientes tipos:
.h: Los archivos .h sirven para declarar clases, las cuales se denen como hemos
visto en el apartado anterior.
.cpp: Los archivos .cpp sirven para implentar los mtodos, tal y comos hemos visto
50
.ui: Los archivos .ui sirven para implementar una interfaz de usuario a travs de
la aplicacin Qt Creator, sin embargo en el presente proyecto la implementacin se realizar directamente por cdigo mediante los archivos .cpp. Para diferenciar unos archivos .cpp de otros, utilizaremos el atributo ui (user interface ) para hacer referencia a aquellos dnde se implementan los objectos de la interfaz de usuario.
.pro y .moc: Los archivos .pro y .moc sirven para compilar el programa y se
generan automticamente, por lo que el usuario ser ajeno a ellos.
Al abrir los archivos generados podemos observar (Figuras 3.4, 3.5 y 3.6) que stos han sido creados por defecto con una serie de instrucciones. Adems, se han destacado las lneas que se deben aadir para incluir las libreras, ya que es conveniente tener en cuenta que se debe realizar una inclusin de los diferentes archivos que se generan y de las libreras que se utilicen en la aplicacin. Para ello, bastar aadir # include archivo.extensin al principio de cada archivo.
Figura 3.5: Archivos .h y .cpp generados por defecto al crear un proyecto.
51
Mdulo principal
El programa contiene un mdulo principal donde se encuentra la funcin main. El archivo main.cpp contiene el cdigo para inicializar la aplicacin y los archivos de cabecera que contienen la lgica de la aplicacin personalizada y los componentes de la IGU. Se realiza slo una instancia por aplicacin y debe crearse antes de cualquier objeto relacionado con la IGU.
52
En el archivo main.cpp de la aplicacin implementada en el presente proyecto se incluyen los archivos de cabecera para los componentes de aplicacin. Posteriormente, se crea un objeto de la clase QApplication llamado a. La clase QApplication administra el ujo de control de la aplicacin de la IGU. Contiene el bucle de eventos principal, donde todos los eventos del sistema de ventanas y otras fuentes son procesadas y enviadas. Tambin se ocupa de la inicializacin de la aplicacin y nalizacin. A continuacin, se dene una ventana de dilogo llamada w, se muestra la ventana w y se ejecuta la aplicacin a. Por ltimo, se hace una llamada al mtodo exec() de la clase QApplication para iniciar el ciclo de eventos de Qt y de este modo el control pasa a Qt. El archivo main.cpp de la aplicacin se dene entonces, como en la Figura 3.8.
ImageFrame
La clase ImageFrame se ha creado con la nalidad de visualizar las imgenes DICOM. Se utilizar tanto en la primera ventana (Myproject ) de la aplicacin como en la segunda (Mysecondwindow ). Myproject y Mysecondwindow son dos clases asociadas a las dos ventanas sobre las que est implementada la herramienta. En la clase ImageFrame se han denido todos los objetos, variables y funciones relacionadas con las imgenes que se van a procesar y visualizar en ambas ventanas.
ImageFrame hereda de la clase QFrame. Utilizamos esta clase para crear un marco
o frame en que visualizar imgenes. En el captulo 5 se explicar con mayor detalle en que consiste dicha clase QFrame.
53
Para visualizar una imagen DICOM se deben seguir los siguientes pasos:
1. Leer la imagen DICOM mediante las libreras ITK: Para leer la imgenes se recorrern todos los pxeles que la constituyen y sus valores se almacenar en un buer, al cul tendremos acceso mediante un puntero creado en la clase ImageFrame. Este paso est ampliamente explicado en [17]. 2. Convertir la imagen de ITK a Qt: A partir del puntero que tiene acceso a la imagen, se realiza una conversin de ITK a un objeto llamado image de la clase QImage. Esta clase es la utilizada en Qt para dibujar imgenes. 3. Dibujar y visualizar la imagen en la interfaz grca de usuario: Para dibujar los objetos de tipo QImage se ha asociado un evento llamado paintEvent a la clase ImageFrame y que automticamente dibuja una imagen dentro de unos objetos llamados frames que actan a modo de marco para contener en ellos la imagen.
Adems de visualizar las imgenes DICOM tambin se han implementado los mtodos de segmentacin de dichas imgenes mediante las libreras ITK [17] y los mtodos para visualizar el volumen 3D a partir de dichas imgenes, gracias a las libreras VTK [18].
Primera ventana
Para implementar la primera ventana se ha denido la clase Myproject. En esta clase se denen todos los widgets y funciones que aparecen y se ejecutan al lanzar la aplicacin.
Segunda ventana
Al igual que ocurre en la primera ventana, se ha denido una clase para la segunda ventana llamada Mysecondwindow. En esta clase se denen todos los widgets y funciones que aparecen y se ejecutan al lanzar la aplicacin . Se ha creado una variable de la clase Mysecondwindow en la clase Myproject, para tener acceso a todos los atributos y mtodos de la segunda ventana. Mediante esta variable se lanzar la segunda ventana apretando un botn en la primera.
54
#include <QtGui>, donde QtGui es la coleccin bsica de componentes grcos para crear cualquier interfaz.
3.4.1. Widgets
Los widgets son los bloques de construccin bsicos de la interfaz grca de usuario, es decir, un widget es todo aquel elemento visual dentro de una interfaz de usuario. Los botones y etiquetas son ejemplos de widgets. Cada componente de la interfaz grca de usuario puede ser colocado dentro de una interfaz existente o mostrarse como una ventana independiente.
Cada tipo de componente es proporcionada por una subclase particular de QWidget, que es en s misma una subclase de QObject, siendo QObject a su vez, la clase base del sistema de objetos de Qt (Figura 3.10). Todo widget y la mayora de las otras clases de Qt heredan de l.
55
Los widgets emiten seales llamadas signals, para indicar que se ha producido una accin del usuario o ha ocurrido un cambio de estado. Por ejemplo, cuando el usuario apreta un botn, que es un objeto perteneciente a la clase QPushButton, ste emite una seal llamada clicked(). Seran tambin ejemplos de signals elegir una opcin del men, abrir o cerrar una ventana, etc.
Una seal se puede conectar a una funcin llamada slot. As pues, cuando la seal es emitida, el slot es ejecutado automticamente. Normalmente, la manera de hacerlo sera:
A continuacin se van a analizar los widgets utilizados en la aplicacin para disear la interfaz grca de usuario.
56
Un pushButton es un botn de comandos. Quizs sea el widget ms utilizado en cualquier interfaz de usuario, ya que es sencillo hacer que al activar dicho botn se pueda ordenar al ordenador que realice alguna accin o responda a alguna pregunta.
Un pushbutton emite la seal clicked() cuando es activado mediante el ratn o el teclado. Por tanto, conectaremos esta seal con la accin que deseemos asociar al botn.
Un pushbutton es rectangular y normalmente muestra una etiqueta de texto describiendo su accin y opcionalmente un icono. Para ello utilizaramos las propiedades
setText() y setIcon().
57
3.4.3.1.
Ejemplo de botn
Para crear un botn como el de la Figura 3.13 se deben incluir las siguientes instrucciones en el programa:
1. QPushButton *openButton;
3. openButton->setObjectName(QString::fromUtf8(openButton ));
5. openButton->setCheckable(true);
Mediante las instrucciones (1) y (2) se crea el botn llamado openbutton de la clase
En las instrucciones (3), (4), (5), (6) y (7) se establecen algunas propiedades del botn: ponerle el nombre al objeto, denir su dimensin, habilitar el botn, poner el texto que llevar el botn y por ltimo, poner en negrita el texto.
58
Para todos lo ejemplos sobre widgets que aparecen en este captulo conviene remarcar que existen ms propiedades que se podran aplicar y para ello, se recomienda consultar el asistente de Qt que proporciona el software, junto con la referencia [19].
En este caso, al apretar el botn openButton se emitir la seal clicked() y se ejecutar la funcin clickopenButton() de la clase MyprojectClass.
QLabel se utiliza para mostrar un texto o una imagen. El aspecto visual de la etiqueta
se puede congurar de varias maneras. Es imporante remarcar que cuando el contenido se cambia cualquier contenido anterior se borra.
3.4.4.1.
Ejemplo de etiqueta
Para crear una etiqueta como la de la Figura 3.15 se deben incluir las siguientes instrucciones en el programa:
59
1. QLabel *label;
3. label->setObjectName(QString::fromUtf8(label ));
Mediante las instrucciones (1) y (2) se crea la etiqueta llamada label de la clase
QLabel y que a su vez pertenece a la clase MyprojectClass. Mediante (3) y (4) denimos
el nombre del objecto, su tamao y el texto que aparecer en la etiqueta. En las etiquetas no podemos utilizar la funcin connect ya que no se puede interactuar con ninguna ellas.
60
setValue() para establecer el deslizador directamente a un cierto valor. setSingleStep() y setPageStep() para establecer los pasos. setMinimum() y setMaximum() para denir el rango de la barra de desplazamiento.
3.4.5.1.
Para crear una barra deslizadora como la de la Figura 3.17 de deben incluir las siguientes instrucciones en el programa:
1. QSlider *horizontalSlider;
3. horizontalSlider->setObjectName(QString::fromUtf8(horizontalSlider ));
5. horizontalSlider->setSliderPosition(0);
6. horizontalSlider->setOrientation(Qt::Horizontal);
7. horizontalSlider->setPageStep(1);
Mediante las instrucciones (1) y (2) se crea la barra deslizadora llamada horizontalSlider de la clase QSlider y que a su vez pertenece a la clase MyprojectClass.
En las instrucciones (3), (4), (5), (6) y (7) se establecen algunas propiedades: ponerle el nombre al objeto, denir su dimensin, indicar la posicin inicial, denir la orientacin (horizontal, en este ejemplo) y el salto que dar al desplazarse.
61
Para conectar la barra deslizadora con una funcin que se ejecute al desplazarse sobre ella:
En este caso, al desplazar la barra se emitir la seal valueChanged(int), indicando que el valor ha cambiado y se ejecutar la funcin slider(int) de la clase MyprojectClass.
QSpinBox permite al usuario elegir un valor haciendo click en los botones arriba/abajo
o pulsando la tecla de arriba/abajo en el teclado para aumentar o disminuir el valor que se muestra actualmente. El usuario puede tambin escribir el valor en forma manual.
Cada vez que cambia el valor de QSpinBox emite la seal valueChanged(). El valor actual se puede obtener con el value() y establecer con setValue().
62
3.4.6.1.
Ejemplo de un spinbox
Para crear un spinbox como la de la Figura 3.19 se deben incluir las siguientes instrucciones en el programa:
1. QSpinBox *spinBox;
3. spinBox->setObjectName(QString::fromUtf8(spinBox ));
5. spinBox->setValue(0);
De igual modo que ocurra en la barra deslizadora, mediante las instrucciones (1) y (2) se crea el spinbox llamado spinBox de la clase QspinBox y que a su vez pertenece a la clase MyprojectClass.
En las instrucciones (3), (4) y (5) se establecen algunas propiedades: ponerle el nombre al objeto, denir su dimensin e indicar el valor inicial.
Para conectar el spinbox con una funcin que se ejecute al cambiar su valor:
63
Un combobox es un widget de seleccin que muestra el elemento actual, y puede mostrar una lista de elementos seleccionables. Puede ser modicable, permitiendo al usuario modicar cada elemento de la lista. Puede contener mapas de pxeles, as como cadenas. La insercin se realiza mediante insertItem().
currentIndexChanged() y activated() :
activated() slo se emite cuando el cambio es causado por la interaccin del usuario.
3.4.7.1.
Ejemplo de un combobox
Para crear un combobox como la de la Figura 3.21 se deben incluir las siguientes instrucciones en el programa:
1. QComboBox *comboBox;
3. comboBox->setObjectName(QString::fromUtf8(comboBox ));
64
5. comboBox->hide();
Mediante las instrucciones (1) y (2) se crea el combobox llamado comboBox de la clase QcomboBox y que a su vez pertenece a la clase MysecondwindowClass. Mysecond-
En las instrucciones (3), (4) y (5) se establecen algunas propiedades: ponerle el nombre al objeto, denir su dimensin y ocultar el objecto hasta que se produzca algn evento (como por ejemplo, apretar otro botn para que se haga visible el combobox ).
Para conectar un tem del combobox con una funcin que realizara un mtodo de segmentacin:
Anchura de lnea: es el ancho del borde del marco. Se puede modicar para personalizar el aspecto del cuadro.
65
frameWidth : es el ancho del marco, que viene determinado por el estilo de marco.
3.4.8.1.
Ejemplo de un frame
Para crear un frame como la de la Figura 3.24 deberemos incluir las siguientes instrucciones en el programa:
66
1. ImageFrame *imageframe;
3. imageframe->setObjectName(QString::fromUtf8(imageframe ));
5. imageframe->setVisible(true);
Mediante las instrucciones (1) y (2) se crea el frame llamado imageframe de la clase ImageFrame. La clase ImageFrame es una clase denida para poder visualizar las imgenes DICOM tanto en la primera como en la segunda ventana.
En las instrucciones (3) y (4) se establecen algunas propiedades: ponerle el nombre al objeto, denir su dimensin y que sea visible.
67
1.
itkAddImageFilter
Esta clase implementa un operador de pxeles para poder sumar dos imgenes. Esta clase est parametrizada sobre los tipos de las dos imgenes de entrada y el tipo de la imagen de salida. El tipo resultante de la suma, se convierte en el tipo de pxel de la imagen de salida. El tipo de pxel de la imagen de la entrada 1 debe tener una dention vlida para poder sumarlo al tipo de pxel de la imagen 2. Esta condicin es necesaria porque el interior de este ltro se realice la operacin:
2.
itkBinaryThresholdImageFilter
Este ltro se utiliza para transformar una imagen en una imagen binaria cambiando los valores de los pxeles de acuerdo con dos umbrales denidos por el usuario que se denen empleando los mtodos SetUpperThreshold() y SetLowerThreshold() y dos intensidades que se denen mediante SetInsideValue() y SetOutsideValue(). El valor de cada pxel de la imagen de entrada es comparado con el umbral alto y bajo. Si el valor de pxel esta en el interior del rango denido por [Lower, Upper] la salida de pxel se le asigna a InsideValue. En caso contrario la salida del pxel se le asigna a OutsideValue. Este ltro espera que tanto las imgenes de entrada y de salida tenga el mismo nmero de dimensiones.
68
3.
itkCastImageFilter
Esta clase se utiliza para hacer conversin de pxeles, para despus poder operar con el segundo tipo de pxel.
4.
itkCondenceConnectedImageFilter
Esta clase segmenta los pxeles utilizando el mtodo Condence Connected de crecimiento de regiones. Este ltro extrae un conjunto conectado de pxeles cuya intensidad de pxel coincide con la de los pxeles de un punto semilla. Pxeles conectados a este punto, cuyos valores se encuentran dentro del intervalo de conanza estn agrupados. La anchura del intervalo de conanza es controlada por la variable multiplicador (el intervalo de conanza es la media ms o menos el multiplicador veces la desviacin estndar). Despus de esta segmentacin inicial se recalcula la media y la varianza. Todos los pxeles de la segmentacin anterior se utilizan para calcular la media de la desviacin estndar (en lugar de utilizar los pxeles de la vecindad del punto de lanzamiento). La segmentacin se vuelve a calcular utilizando estas estimaciones renadas para la media y la varianza de los valores de pxel. Este proceso se repite para el nmero especicado de iteraciones. El lmite inferior y superior se limita a estar dentro de los lmites de validez numrica de los datos de entrada de tipo pxel. Adems, los lmites pueden ser ajustados para contener la intensidad del punto de semilla.
5.
itkCurvatureFlowImageFilter
Esta clase elimina el ruido de una imagen utilizando Curvature Flow.
6.
itkGDCMImageIO
Esta clase utiliza la clase ImageIO para la lectura y escritura de imgenes DICOM.
7.
itkGDCMSeriesFileNames
Esta clase genera una secuencia de cheros cuyos nombres provienen de un chero de imgenes DICOM. Sigue el siguiente procedimiento: lee todas las imgenes contenidas en un directorio (asumiendo que slo hay una serie) y extrae la orientacin y la posicin, a partir de las cuales extrae el valor de la coordenada 3D del corte.
69
8.
itkImage
Esta clase representa una imagen con una dimensin y un tipo de pxel. Las imgenes son modeladas como arrays y por tanto, se denen con un ndice inicial y un tamao. Conviene destacar que en ITK, una regin de la imagen puede ser procesada por otras clases en el sistema.
9.
itkImageFileReader
Esta clase lee los datos de una imagen desde un nico chero, que puede tener distintos formatos.
10.
itkImageSeriesReader
Esta clase lee los datos de una imagen y construye imgenes n-dimensionales a partir de series de cheros. Estos cheros almacenados en un vector de caracteres se leen usando la clase itkImageFileReader. El formato de los cheros puede variar entre ellos, pero los datos de las imgenes deben tener el mismo tamao en todas sus dimensiones.
11.
itkImageFileWriter
Esta clase escribe los datos que recibe como entrada en un nico chero de salida.
12.
itkImageSeriesWriter
Esta clase escribe los datos de una imagen de entrada a una serie de archivos de salida. Por lo general, el tipo de imagen de salida tendr menos dimensiones que el tipo de imagen de entrada. Cada archivo tiene un nombre creado mediante
13.
itkRescaleIntensityImageFilter
Esta clase aplica una transformacin lineal a los niveles de intensidad de la imagen de entrada. La transformacin lineal se dene por el usuario en trminos de valores mximos y mnimos que la imagen de salida debe tener.
70
1.
vtkActor
Esta clase representa un objeto mediante su geometra y propiedades en un escena.
2.
vtkDecimatePro
vtkDecimatePro es un ltro utilizado para reducir el nmero de tringulos en una malla triangular, formando una buena aproximacin a la geometra original. La entrada a vtkDecimatePro es un objeto vtkPolyData y se tratan slo los tringulos.
3.
vtkImageCast
vtkImageCast es un ltro que convierte el tipo de datos de entrada con el tipo de salida en la tubera de procesamiento de una imagen. El ltro no hace nada si la entrada ya tiene el tipo correcto.
4.
vtkImageGaussianSmooth
Esta clase implementa una convolucin gaussiana de la imagen de entrada.
5.
vtkImageMarchingCubes
Esta clase genera isosupercies de volmenes e imgenes. vtkImageMarchingCubes es un ltro que toma como ejemplo las imgenes de entrada y genera a la salida una o ms isosupercies. Uno o ms valores de contorno deben ser especicados para generar las isosupercies. Alternativamente, se puede especicar un rango escalar mnimo y mximo y el nmero de curvas de nivel para generar una serie de valores de contorno espaciados. Conviene remarcar que este ltro est especializado en volmenes. Para el contorno de otros tipos de datos, se utilizar vtkContourFilter.
6.
vtkImageThreshold
Esta clase puede hacer un umbral binario o contnuo para superior, inferior o un rango de datos. El tipo de salida de datos puede ser diferente de la entrada, pero por defecto del mismo tipo.
71
7.
vtkPolyData
Esta clase es un conjunto de datos concretos que representa una estructura geomtrica compuesta de vrtices, lneas, polgonos, y/o tiras de tringulo. Puntos, valores escalares y vectores tambin se representan.
8.
vtkPolyDataNormals
vtkPolyDataNormals es un ltro que calcula las rectas normales para una malla poligonal. El ltro puede reordenar polgonos para asegurar la orientacin consistente a travs de los polgonos vecinos. El algoritmo funciona mediante la determinacin de las rectas normales a cada polgono y luego un promedio de ellos en los puntos compartidos. Cuando los bordes alados estn presentes, los bordes se divididen y se generan nuevos puntos para evitar bordes borrosos.
9.
vtkProperty
Esta clase representa la iluminacin y otras propiedades de la supercie de un objeto geomtrico. Las caractersticas principales que se pueden establecer son los colores (en general, ambiente, difuso, especular, y el color de borde), la opacidad del objeto y la representacin del objeto (puntos o supercies). Adems, algunas caractersticas especiales se pueden ajustar y manipular con este objeto.
10.
vtkRenderer
Esta clase proporciona una especicacin abstracta para renderers. Un renderer es un objeto que controla el proceso de rendering de los objetos. De representacin es el proceso de conversin de la geometra, una especicacin de las luces, y una vista de cmara en una imagen. vtkRenderer tambin lleva a cabo la transformacin de coordenadas entre las coordenadas del mundo, ver coordenadas (el equipo de procesamiento de grcos sistema de coordenadas), y visualizar las coordenadas (la pantalla de coordenadas reales en el dispositivo de visualizacin). Algunas caractersticas avanzadas de renderizado como dos caras de iluminacin tambin puede ser controlado.
11.
vtkRenderWindow
Esta clase crea una ventana para renderers en la que dibujar dentro.
72
12.
vtkRenderWindowInteractor
vtkRenderWindowInteractor proporciona una plataforma de mecanismo de interaccin independiente para el ratn, las teclas y los eventos temporales.
73
Captulo 4
Resultados
4.1. Interfaz Grca de Usuario
Las principales funcionalidades de la interfaz grca de usuario son:
74
1. OPEN MENU El botn OPEN MENU hace visible un men con los siguientes botones:
2. SEGMENTED DICOM En este frame se visualizan las imgenes segmentadas abiertas con el botn OPEN SEGMENTED IMAGES.
3. IMAGE SLICE INDEX La barra deslizadora y el spinbox IMAGE SLICE INDEX recorren las distintas imgenes pertenecientes al directorio de imgenes que se ha abierto en el primer
4. 3D El botn 3D realiza el volumen 3D a partir de las imgenes segmentadas que se representan en el frame SEGMENTED DICOM.
5. 3D En este frame se visualiza el volumen 3D creado a partir de las imgenes segmentadas que se representan en el frame SEGMENTED DICOM. Se ha implementado un cdigo de colores para visualizar las diferentes partes del hgado:
75
Amarillo: corresponde con la supercie del hgado y se ver semitransparente. Rojo: corresponde con el portal heptico y se ver opaco. Verde: corresponde con la vescula y se ver opaca.
6. SAVE El botn SAVE guarda las capturas de pantalla pertenecientes al los diferentes tejidos representados tridimensionalmente en el segundo frame : hgado, portal heptico y vescula. El usuario tan slo deber seleccionar la carpeta donde desee que se guarden. Dentro de dicha carpeta seleccionada por el usuario se encontrarn tres cheros con extensin .STL denominados: HIGADO.STL', PORTALHEPATICO.STL y VESICULA.STL, correspondientes a los tejidos que su propio nombre indica. La extensin .STL se podr abrir con cualquier programa de diseo grco o aplicaciones CAD, como 3Dmax, CATIA, SAT, etc.
8. Barra de progreso La barra de progreso sirve para indicar al usuario que las imgenes se han cargado al 100 % en el frame SEGMENTED DICOM.
76
1. OPEN El botn OPEN abre un directorio de imgenes no segmentadas y las muestra en el primer frame denominado INPUT DICOM. 2. INPUT DICOM En este frame se visualizan las imgenes a las que se les aplicarn los mtodos de segmentacin.
3. IMAGE SLICE INDEX La barra deslizadora y el spinbox IMAGE SLICE INDEX recorren las distintas imgenes pertenecientes al directorio de imgenes que se ha abierto en el primer
Conviene resaltar que segn el mtodo elegido se requieren ciertas acciones adicionales. En el caso de la umbralizacin binaria habr que seleccionar los umbrales mximos y mnimos de los tejidos del hgado, mientras que para el crecimiento de regiones habr que situarse encima de la imagen y hacer click para proporcionarle al mtodo un punto semila.
5. SEGMENTED DICOM En este frame se visualizan las imgenes segmentadas. 6. LIVER MAXIMUM Y MINIMUM Estas barras deslizadoras y spinboxs permiten elegir los valores mximos y mnimos para realizar la umbralizacin binaria en la supercie del hgado.
77
7. HEPATIC HILUM MAXIMUM Y MINIMUM Estas barras deslizadoras y spinboxs permiten elegir los valores mximos y mnimos para realizar la umbralizacin binaria en hilio heptico.
8. GALLBLADDER MAXIMUM Y MINIMUM Estas barras deslizadoras y spinboxs permiten elegir los valores mximos y mnimos para realizar la umbralizacin binaria en la vescula.
9. SAVE El botn SAVE guarda las imgenes segmentadas en un nico chero con extensin .dcm. Es importante remarcar que el usuario tendr que introduccir el nombre del chero junto a la extensin .dcm.
11. Barra de progreso La barra de progreso sirve para indicar al usuario que las imgenes se han cargado al 100 % en el frame INPUT DICOM.
78
1. Se ejecuta la aplicacin y se aprieta el botn OPEN MENU y a continuacin se aprieta el botn OPEN NON-SEGMENTED IMAGES para tener acceso a la segunda ventana (Figura 4.1).
2. Se aprieta el botn OPEN y se abre un directorio de imgenes DICOM no segmentadas pertenecientes al mismo paciente (Figura 4.3).
3. Se desplaza la barra deslizadora IMAGE SLICE INDEX por todas las imgenes DICOM no segmentadas pertenecientes al mismo directorio y que permite visualizar cada uno de los cortes transversales correspondientes a la CT o MR (Figura 4.4).
79
4. Se aprieta el botn SEGMENTATION y selecciona un mtodo de segmentacin del combobox que aparece y se visualiza el resultado de la segmentacin realizada. En el caso de elegir la umbralizacin binaria se elegirn tambin los valores mximos y mnimos de cada uno de los tejidos hepticos (Figura 4.5). Mientras que si se elige el mtodo de crecimiento de regiones ser necesario hacer click en un punto del frame INPUT DICOM para proporcionarle al mtodo un punto semilla.
Figura 4.5: Aspecto de la IGU al apretar el botn SEGMENTATION y realizar un mtodo de segmentacin.
5. Se guardan las imgenes DICOM segmentadas. Las imgenes se guardarn en un nico archivo con extensin .dcm, que junto con el nombre del archivo deber ser proporcionada por el usuario (Figura 4.6).
80
7. Se aprieta el botn OPEN SEGMENTED IMAGES y se abre el directorio de las imgenes DICOM segmentadas previamente. Tambin podra ocurrir que el usuario tuviera ya un archivo con imgenes DICOM segmentadas por lo que no hubiera sido necesario acceder a la segunda ventana, sino que directamente se hubiera partido de este punto (Figura 4.7).
Figura 4.7: Aspecto de la IGU al abrir un directorio de imgenes DICOM segmentadas previamente.
8. Se aprieta el botn 3D y se visualiza el volumen 3D a partir de las imgenes DICOM segmentadas (Figura 4.8).
Figura 4.8: Aspecto de la IGU al visualizar las imgenes segmentadas y el volumen 3D de las mismas.
81
82
Captulo 5
En el caso particular de la extirpacin de una parte del hgado, los cirujanos suelen emplear la segmentacin de Couinaud para cortar ya que estos segmentos hepticos mantienen todos su ujo de entrada y de salida. Esta herramienta sera de gran utilidad para realizar esta segmentacin tan complicada para los cirujanos ya que al hacer el hgado transparente y poder observar el hilio heptico dentro podran hacer una planicacin mucho ms exhaustiva.
Los principales inconvenientes no han sido encontrados en el desarrollo de la herramienta ya sino que han dependido en gran medida de las imgenes utilizadas. La utilizacin de la herramienta Qt para la implementacin de la interfaz grca ha permitido simplicar el diseo y el desarrollo. Es ms, podemos armar que es una herramienta robusta ya que est preparada para aadir nuevos mtodos de segmentacin de imgenes y nuevas funcionalidades con facilidad. Las imgenes biomdicas poseen gran cantidad de ruido y una enorme variabilidad en sus propiedades. En especial las imgenes de resonancia magntica que han sido las utilizadas en este proyecto. Una solucin sera homogeneizar la luminosidad durante el procesamiento de la imagen, por ejemplo, realizando
83
una correccin de sombras que nos permita homogeneizar la luminosidad e incremente la nitidez de los bordes de la imagen. Adems del problema de la luminosidad, pueden aparecer otros problemas como imgenes borrosas, pero al igual que la luminosidad, se pueden reducir tratando la imagen antes de segmentar.
En cuanto a los mtodos de segmentacin, su semi-automatizacin hace difcil que se obtengan resultados perfectos, ya que por ejemplo, en el caso de la segmentacin por umbralizacin, es difcil encontrar los valores umbrales que den los resultados exactos, por ello, en lneas futuras se buscar implementar nuevos mtodos de segmentacin que proporcionen mejores resultados.
Incorporar nuevos mtodos de segmentacin para mejorar la precisin en los resultados obtenidos.
Aadir un men de ayuda que asista en los primeros pasos de la utilizacin de la herramienta.
84
Bibliografa
[1] Neri E., Caramella D., Bartolozzi C. Image Processing in Radiology. Medical Radiology. Diagnostic Imaging. Baert A.L., Knauth M., Sartor K. Editors, Springer, 2008.
[2] Rangaraj M. Rangayyan Biomedical Image Analysis, The Biomedical Engineering Series, CRC Press, 2005.
[3] Fasel JH, Selle D, Evertsz CJ, Terrier F, Peitgen HO, Gailloud P. Segmental anatomy of the liver: poor correlation with CT. Radiology Jan;206(1):151-156, 1998.
[4] Gao L, Heath DG, Kuszyk BS, Fishman EK. Automatic liver segmentation technique for three-dimensional visualization of CT data. Radiology 1996 Nov;201(2):359-364.
[5] Jung G, Krahe T, Krug B, Hahn U, Raab M. Delineation of segmental liver anatomy. Comparison of ultrasonography, spiral CT and MR imaging for preoperative localization of focal liver lesions to specic hepatic segments. Acta Radiol 1996 Sep;37(5):691695.
[6] Soyer P, Heath D, Bluemke DA, Choti MA, Kuhlman JE, Reichle R, Fishman EK. Three-dimensional helical CT of intrahepatic venous structures: comparison of three rendering techniques. J Comput Assist Tomogr 1996 Jan;20(1):122-127.
[7] Gazelle, G. et. al. Cholangiographic Segmental Anatomy of the Liver. Radiographics. 14(5):1005-1013. 1994 Sep. Abstract
[8] Soyer, P. et. al. Surgical Segmental Anatomy of the Liver: Demonstration with Spiral CT During Arterial Portography and Multiplanar Reconstruction. AJR. 163:99-103, 1994.
85
[9] Bae KT, Giger ML, Chen CT, Kahn CE Jr. Automatic segmentation of liver structure in CT images. Med Phys 1993 Jan;20(1):71-78.
[10] Bismuth, H. Surgical Anatomy and Anatomical Surgery of the Liver. World J. Surg. 38-39, 1982.
[11] Meinzer H.P., Schemmer P., Schbinger M., Nolden M., Heimann T., Yalcin B., Richter G.M:, Kraus T., Bchler M.W., Thorn M. Computer-Based surgery planning for living liver donation. In The International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences, 34, 2004.
[12] Nava A., Mazza E., Furrer M., Villiger P., Reinhart W.H. In vivo mechanical characterization of human liver. Medical Image Analysis, 12, 203-216, 2007.
[13] Reitinger B. Virtual Liver Surgery Planning: Simulation of Resections using Virtual Reality Techniques. PhD Thesis Graz University of Technology, Institute for Computer Graphics and Vision, Australia, 2005.
[14] Hongjian S., Farag A.A., Fahmi R., Chen D. Validation of Finite Element Models of Liver Tissue using Micro-CT. IEEE Transactions on Biomedical Engineering, 55 (3) 978-984, 2008.
[15] P. Campadelli, E. Casiraghi, A. Esposito Liver segmentation from computed tomography scans: A survey and a new algorithm Articial Intelligence in Medicine 45, 185-196, 2009.
[16] Rodrguez Muro, M., Sistema para el diagnstico de pancreatitis utilizando RNA. Tesis Licenciatura. Ingeniera en Sistemas Computacionales, 2003.
[19] J. Blanchette, M. Summereld C++ GUI Programming with Qt 4 (2nd Edition) Prentice Hall Open Source Software Development Series, 2006.
86