fusión de modelos de tejido en la simulación de imágenes
Post on 10-Jul-2022
6 Views
Preview:
TRANSCRIPT
Fusión de modelos de tejido en la simulación de imágenes de ultrasonido en tiempo real
(SIMECO).
Por Saraceno Leandro,
Vitale Santiago
Trabajo Final de la carrera de grado de Ingeniería de Sistemas de la Universidad Nacional del Centro de la Provincia de Buenos Aires
Director: Dr. Ignacio Larrabide
Co-Director: Ing. Pablo Andrés Rubi
Tandil, Pcia de Buenos Aires, Argentina, Marzo 2018
Índice
Capítulo 1: Introducción 4 1.1 Antecedentes 4 1.2 Simulación de Ultrasonido y Estado del Arte 5 1.3 Motivación y objetivos de trabajo 8 1.4 Contenido de la carrera aplicados en el desarrollo de este trabajo 9 1.5 Organización del trabajo 10
Capítulo 2: Imagen de ultrasonido 12 2.1 Imágenes B - Mode 12 2.2 Transductor y creación de una imagen B - Mode 12 2.4 Características y artefactos de una imagen de ultrasonido 14
Capítulo 3: Integración de técnica de ruido Speckle en tiempo real 18 3.1 Modelo de Volumen 18 3.2 Ruido Speckle generado en SIMECO 20 3.3 Modelo de ruido Speckle en tiempo real 22
3.3.1 Validación de resultados 23 3.4 Integración de ruido Speckle en tiempo real 24
3.4.1 Motivación y Objetivos específicos 25 3.4.2 Implementación 25
3.5 Rendimiento 26 3.5.1 Plataforma de prueba 27 3.5.2 Análisis de memoria 27 3.5.3 Análisis de tiempo de carga 28
Capítulo 4: Reestructuración de SimEco 30 4.1 Arquitectura de Simeco 30
4.1.1 Dependencias 34 4.2 Build system 35
4.2.1 CMake 35 4.2.1.1 Sentencias de CMake 37
4.2.2 Configuración de SIMECO 38 4.3 Motivación a generar una librería dinámica 39
4.4.1 Cambios en el Diseño del módulo Core 40 4.4.2 Build System 44
4.5 Resultados 47
Capítulo 5: Integración de Modelo de Superficie 50 5.1 Modelo de Superficies 50 5.2 Motivación para incorporar el Modelo de Superficies 52
1
5.3 Arquitectura de Burger 52 5.4 Incorporación del modelo a SIMECO 54
5.4.1 Construcción de la librería dinámica 54 5.4.2 Actualización del módulo Interfaz 56
5.5 Comparación entre los modelos implementados en SIMECO 59
Capítulo 6 62 6.1 Conclusiones 62 6.2 Trabajos futuros 62
Bibliografía 64
Anexo 67 Diagrama de clases del módulo Core 67 Diagrama de clases del módulo Interfaz 68
2
Índice de imágenes
Capítulo 1: Introducción. Figura 1.2.1 Estado del arte en simulación de ultrasonido. 8
Capítulo 2: Imagen de ultrasonido.
Figura 2.2.1 Simulación del barrido. 13 Figura 2.3.1 Resolución espacial. 14 Figura 2.4.1 Tipos de reflecciones. 15 Figura 2.4.2 Refracción de una onda. 16 Figura 2.4.3 Patrón speckle. 17 Figura 2.4.4 Sombra acústica. 17
Capítulo 3: Integración de técnica de ruido Speckle en tiempo real.
Figura 3.1.1 Modelo de volumen. 20 Figura 3.2.1 Imagen de ultrasonido generada por SIMECO. 21 Figura 3.3.1 Imagen de ultrasonido generada a partir de la técnica de Külsgaard. 23 Figura 3.3.1.1 Dirección de la caída lineal. 24 Figura 3.5.2.1 Comparación en el uso de memoria. 28 Figura 3.5.3.1 Comparación en los tiempos de carga. 29
Capítulo 4: Reestructuración de SimEco. Figura 4.1.1 Visión general de SIMECO. 32 Figura 4.1.2 Vista dinámica de un ejercicio en SIMECO. 33 Figura 4.2.1.1 Árbol de directorios de un proyecto CMake. 36 Figura 4.2.2.1 Archivo CMake, pseudocódigo de simeco. 39 Figura 4.4.1.1 Clase handle de la clase simeco. 42 Figura 4.4.1.2 Diagrama de clases de Idiom pimpl. 43 Figura 4.4.2.1 Archivo CMake de simecolib. 44 Figura 4.4.2.2 Archivo findSimeco.CMake. 46 Figura 4.4.2.3 Nuevo archivo CMake de SIMECO. 47 Figura 4.5.1 Comparación de tiempos de compilación. 48
Capítulo 5: Integración del modelo de superficie Figura 5.1.1 Onda intersectando con malla. 50 Figura 5.3.1 Vista general de Burger. 53 Figura 5.4.1.1 Patrón pimpl aplicado a la clase Burger. 54 Figura 5.4.1.2 Achivo findBurger.CMake. 56 Figura 5.4.2.1 Diagrama de clase parcial del módulo interfaz. 58 Figura 5.4.2.2 Vista general de la relacion entre Burger y SIMECO. 59 Figura 5.5.1 Trade off entre interactividad y precisión. 60 Figura 5.5.2 Comparación de imagen de ultrasonido generada por ambos modelos. 61
3
Capítulo 1: Introducción
1.1 Antecedentes
Estudios [1] recientes en Estados Unidos, publicados en la British Medical Journal, revelan
que los eventos adversos durante la atención hospitalaria es una de las principales causas de muertes
en los centros de salud de todo el mundo. En Argentina, luego del último relevamiento oficial del
Ministerio de Salud [2], se señala que más del 12% de los pacientes sufren algún tipo de
complicación en su estadía en el nosocomio. La muestra constituida por más de 1600 pacientes de 6
grandes hospitales reveló que el 25% de los eventos adversos son ocasionados por errores de
procedimiento y un 3% errores de diagnóstico. Si bien constituyen menos de un tercio de la
naturaleza de los eventos, estos errores generan riesgos de intensidad moderada y graves en más del
75% de los casos y poseen una tasa de evitabilidad relativamente alta, correspondiente al 40% y 80%
respectivamente. Los datos mencionados anteriormente revelan una alarmante situación de amenaza
a la seguridad del paciente en nuestro país.
En el ámbito de la medicina, el ultrasonido es una técnica utilizada para detectar distintos
órganos, tejidos y vasos como así también posibles cambios en aspectos y funciones de los mismos.
Al ser una herramienta segura y no invasiva (libre de radiaciones y punciones) que obtiene resultados
en tiempo real de manera económica y sin la necesidad del traslado del paciente (practica repetible),
se ha convertido en una práctica habitual para el diagnóstico médico, guía de procedimiento
(drenajes, punciones, remoción de cuerpos) y emergentología.
Las imágenes por ultrasonido están basadas en el mismo principio que el sonar utilizado por
murciélagos y barcos: cuando una onda acústica choca contra un objeto, rebota provocando eco. Al
medir estas ondas causadas por el eco, es posible determinar la distancia al cuerpo, como así también
su forma, tamaño y consistencia. En un examen de ultrasonido, un transductor envía ondas acústicas
de alta frecuencia hacia adentro del cuerpo al presionarlo contra la piel. A medida que las ondas
rebotan en los órganos internos, fluidos o tejidos, el receptor del transductor registra los cambios
mínimos que se producen en el tono y direcciones del sonido. Una computadora se encarga de medir
las ondas y crear una imagen en tiempo real en un monitor. La imagen se crea a partir de la amplitud
(volumen), frecuencia (tono) y tiempo que lleva la señal de ultrasonido retornar desde el área
4
examinada hasta el transductor, como así también la estructura de los cuerpos y la composición de
sus tejidos a través de la cuales viaja la onda de sonido.
Sin embargo, la ecografía es un método operador-dependiente. Su éxito radica en la capacidad
del operario en adquirir la imágen, interpretarla en tiempo real y traducirla para generar un
diagnóstico. La tarea no es sencilla, ya que se debe comprender la relación del corte bidimensional de
la imagen ultrasónica con la anatomía real en tres dimensiones, sumado a la degradación de la
imagen provocada por sombras y ruidos generados por la frecuencia del ultrasonido y las propiedades
de los tejidos. Esto conlleva la necesidad de un entrenamiento intensivo y extensivo con el fin de que
el operador adquiera la técnica y habilidad del uso de dispositivos de ultrasonido. Así es como surge
el uso de los simuladores de ultrasonido como herramienta de entrenamiento.
1.2 Simulación de Ultrasonido y Estado del Arte
El uso de imágenes de ultrasonido (US) sufre ciertas limitaciones al momento del aprendizaje
y entrenamiento. La principal es la relacionada con la cantidad de tiempo que requiere un operario
para capturar, examinar y analizar la zona de estudio. Sumado a esto, el paciente debe permanecer
presente a lo largo de toda la examinación y debe prestarse a repeticiones del proceso lo que genera a
veces situaciones estresantes tanto para él como para el operario. Conjuntamente, hay que añadir que
solo un aprendiz puede realizar la práctica a la vez y que, si no existe un equipo dedicado
exclusivamente a tales fines, las prácticas se ven limitadas por el uso del dispositivo en horario de
trabajo y de la disponibilidad de pacientes con el diagnóstico a estudiar. Otra limitación es la baja
frecuencia de ciertos escenarios clínicos y la dificultad que ésto trae para disponer pacientes de
prueba. Por ejemplo existen anomalías fetales con un porcentaje de ocurrencia menor al 5%. A raíz
de las limitantes mencionadas anteriormente y la necesidad de mejorar la seguridad del paciente,
obliga a buscar otras estrategias alternativas de aprendizaje y evaluación. La reproducibilidad de los
escenarios clínicos, la capacidad de aplicar métricas de rendimiento medibles y la oportunidad de
encontrar y responder a eventos anormales o críticos en un entorno seguro son argumentos muy
convincentes a la hora de considerar a la simulación como una propuesta para satisfacer las
necesidades educativas en el área de la salud[3].
El uso de simuladores como parte integral del entrenamiento de nuevos profesionales ha
cobrado importancia en los últimos años. Existen pruebas de que la simulación puede ser igual de
5
efectiva que los métodos tradicionales para el entrenamiento de residentes de cirugía en sonografía
abdominal focalizada en trauma (FAST) [4]. Maul et al. [5] muestran que sujetos que fueron
entrenados con simulación lograron grandes avances en la detección de anomalías fetales con
respecto a los que no lo hicieron.
Los simuladores de US tienen como meta representar de la manera más fiel posible la práctica
del estudio de ultrasonido. Llevar a cabo esta tarea es muy costosa computacionalmente ya que
involucra tanto la recreación de fenómenos físicos como el de las ondas ultrasónicas atravesando los
tejidos en ambientes tridimensionales. El modelado del simulador puede ser dividido en dos partes
bien definidas: el modelo de entrada y el modelo de simulación. El primero define el origen, formato
y preprocesamiento de los datos que se encargan de representar la anatomía del objeto a examinar
para prescindir del paciente real en el momento de la ejecución. El segundo describe el proceso en el
cual los datos de entradas y sus derivados realizan una serie de cálculos y transformaciones en tiempo
de ejecución para dar como resultado la imagen de US simulada.
El realismo de la simulación depende en gran medida de la elección de la técnica de
simulación y de los modelos subyacentes. Se reconocen principalmente dos enfoques distintos de
simulación. El enfoque interpolativo como UltraSim [6], un simulador de US comercial orientado a
la capacitación de estudiantes y residentes, utiliza como volumen de entrada una réplica de un
conjunto de imágenes de ultrasonido adquiridas a traveś de un estudio real de ultrasonido. La mayor
parte del trabajo computacional recae sobre el procesamiento de estos datos para construir dicho
volumen que luego se muestrea para generar nuevas vistas y cortes durante la simulación. Los efectos
dependientes de la vista como las sombras dificultan la recuperación de información oculta detrás de
los artefactos que la generan, por lo que la captura de información se realiza desde varias posiciones
y ángulos de modo que la información oculta en una dirección de visualización esté disponible con
otra. El modelo de simulación se encarga de detectar la posición entregada por el transductor ficticio
con sensores de movimiento y de extraer del volumen anatómico (generado con las imágenes de
ultrasonido) el sector que se desea mostrar. Uno de los principales problemas de este enfoque es que,
si bien se genera una simulación realista cuando el operador mantiene posiciones similares a las
cuales se utilizaron para realizar el estudio original, la imagen pierde realismo al alejarse de dichas
posiciones debido a los efectos dependientes del posicionamiento que son recreados de manera
estática antes de la simulación. Además, la simulación se ajusta a los parámetros del dispositivo de
US al momento de la adquisición; por lo tanto, la simulación de diferentes ajustes de la máquina
6
como frecuencia, ganancia y enfoque requiere la adquisición previa de las imágenes con los
parámetros correspondientes.
En contraparte, el enfoque generativo propuesto por Shams et al. [7] y Kutter et al. [8] utilizan
como modelo de entrada volúmenes creados por medio de imágenes de tomografías computarizadas
(CT). En base a ellas, un software llamado Field II [9] genera patrones de scattering de posición fija.
Se deben definir entre 200.000 y 1.000.000 scatterers (ubicación y fuerza) para el proceso que puede
llevar hasta 20 minutos. Si se pretenden almacenar varias vistas, el procesamiento tomaría varios
días, por esta razón se limita la generación de scattering a una posición fija. Desde el punto de vista
del modelo de la simulación, este enfoque intenta recrear la interacción completa del frente de onda
con el medio, generando simulaciones más precisas, a un coste de soluciones numéricas y cálculos de
uso intensivo de recursos. Debido a que se modela la propagación de la onda y su interacción con el
medio, los efectos y artefactos tales como el sombreado, la reflexión y la refracción se incluyen
automáticamente en la simulación. Sin embargo existen tipos de tejido que son difíciles de
caracterizar y modelar de forma precisa y detallada debido a su heterogeneidad o su compleja
estructura interna, por lo que algunas de las imágenes resultantes y sus texturas pueden parecer
artificiales o demasiado simples, en comparación con las imágenes reales. La flexibilidad que ofrece
este enfoque para simular diferentes escenas y su gama más amplia de efectos reproducibles ha
motivado a investigadores a centrar sus esfuerzos en buscar mejoras en el rendimiento mediante el
uso de paralelismo u otras técnicas como la simplificación de los cálculos.
SIMECO es un simulador para entrenamiento en imágenes de ecografía pensado para la
formación profesional. El mismo surge como un proyecto de colaboración entre la UNICEN y el
Hospital El Cruce de Alta Complejidad de Florencio Varela, siendo un desarrollo conjunto entre los
grupos de investigación Yatiris y MediaLab del Instituto Pladema. A su vez forma parte el Banco
Nacional de Proyectos de Desarrollo Tecnológico Social (PDTS, PCTI 158). Este simulador permite
realizar prácticas de diagnóstico en pacientes de forma virtual, donde las imágenes se generan
virtualmente en tiempo real a través del uso de modelos computacionales. SIMECO utiliza un
enfoque generativo de simulación el cual se basa en volúmenes generados a partir de imágenes de
CT como modelo de entrada. El patrón de scattering es generado con un algoritmo desarrollado por
D’Amato et al. [10], reduciendo el tiempo de cómputo a unos minutos respecto del software Field II.
Por otro lado, el modelo de simulación Rubi et al. [11] presenta un modelo acústico que emula el
efecto de las ondas acústicas atravesando diferentes tejidos mediante una técnica de ray-casting para
la simulación de reflexiones, atenuación, sombras y efectos de oclusión en tiempo real. .
7
Figura 1.2.1: Estado del arte en simulación de ultrasonido
1.3 Motivación y objetivos de trabajo
La reconstrucción de distintos escenarios clínicos en imágenes de ultrasonido puede dividirse
en dos grandes grupos.
Simulaciones estáticas: imágenes que muestran anomalías en los tejidos como lo son
inflamaciones, retención de líquidos o hemorragias internas por traumatismo. Comúnmente
ecografías de abdomen o tendones.
Simulaciones dinámicas: representación de las propiedades mecánicas de los tejidos y/o la
deformación al interactuar con los mismos. Tal es el caso de la simulación del latido del corazón,
ecografías ginecológicas o ecografías con deformaciones de tejidos para guiar punciones, colocación
de catéteres o drenajes.
Obtener simulaciones en tiempo real a un coste computacional aceptable para la gran variedad
de casos clínicos exige la necesidad de tener en el simulador distintos modelos tridimensionales y
técnicas de procesamiento de imágenes para representar cada escenario de manera eficiente.
SIMECO propone como solución un modelo de volúmenes con una técnica de corte y de ray-casting
para la generación de ecografías de abdomen. La utilización de esta técnica para simulaciones
dinámicas no es recomendable debido a los altos costos computacionales que conlleva. Un modelo de
mallas deformable para la simulación de deformación de tejidos con una técnica de ray-tracing
permite agregarle propiedades mecánicas a los tejidos y mejorar la simulación de artefactos
específicos de ultrasonido en tiempo real.
8
En este contexto, la motivación de este trabajo se basa en incorporar las nuevas técnicas y
modelos computacionales desarrollados para la simulación de ecografías en el instituto PLADEMA
al simulador SIMECO. El objetivo principal es obtener un motor de simulación más complejo y
robusto que genere imágenes de ultrasonido de mayor calidad y que permita la incorporación de
nuevos modelos de simulación y escenarios clínicos en un futuro. Para lograr dicha meta se pretende:
● Generar una librería dinámica con el motor de simulación actual que permita incorporarse a
cualquier aplicacion de simulacion de escritorio.
● Generar una librería dinámica con otro modelo de enfoque generativo desarrollado dentro del
instituto.
● Adaptar a SIMECO como un software modular de simulación que permita intercambiar sus
módulos para probar futuros modelos y algoritmos y permita el uso de diferentes formatos de
entrada.
● Incorporar a SIMECO las librerías generadas y probadas para ser usadas en la simulación de
ultrasonido.
1.4 Contenido de la carrera aplicados en el desarrollo de este trabajo
Para llevar a cabo este trabajo final fueron aplicados los contenidos aprendidos en el
transcurso de la carrera. La cátedra de Lenguajes de Programación nos aportó conceptos muy
importantes para comprender la construcción y utilización de punteros de forma eficiente y la
creación de funciones teniendo en cuenta el tipo de pasaje de parámetro para mejorar el rendimiento
de la herramienta. Materias como Diseño de Software y Programación Orientada a Objetos fueron
claves para comprender la arquitectura y el diseño de SIMECO, además de la detección e
implementación de patrones de diseño necesarios para hacer efectiva la separación del motor de
simulador de la interfaz. Los conocimientos adquiridos en la cátedra de Sistemas Operativos hicieron
posible la comprensión del concepto de librerías, su utilidad, y de cómo el sistema operativo
interactúa con ellas. Sumado a los conceptos aprendidos en Diseño de Compiladores, se llevó a cabo
la tarea de convertir los modelos de simulación en librerías dinámicas solucionando y sobrellevando
los problemas en tiempo de compilación y linkeado de la aplicación.
Cursos contenidos en el desarrollo de la carrera de ing. en sistemas tales como Álgebra
Lineal, Análisis Matemático I y II, física general e introducción al cálculo diferencial e integral, así
como también probabilidades y estadística fueron una herramienta clave para la comprensión y la
9
implementación de los fenómenos físicos y los modelos aplicados para la simulación de las imágenes
de ultrasonido.
La cátedra de Metodologías de Software nos capacitó para la elaboración de diagramas y
vistas arquitectónicas presentadas a lo largo de esta tesis.
1.5 Organización del trabajo
Con el fín de facilitar la comprensión y la lectura del trabajo, se encuentra desarrollado en
capítulos seccionados que se detallan a continuación:
Capítulo 2: Se proporciona una visión general de la información necesaria para comprender
mejor los conceptos mencionados durante el desarrollo de este trabajo. Se cubren nociones básicas
para la interpretación de las imágenes de ultrasonido y sus fenómenos físicos.
Capítulo 3: En este capítulo se mencionan y detallan dos técnicas de simulación de ruido
Speckle, uno de ellas utilizado por SIMECO y la segunda una mejora a incluir al simulador. Finaliza
con un análisis comparativo entre ambos modelos.
Capítulo 4: Se presentan tres etapas de trabajo sobre la arquitectura del sistema. En la primera
se menciona la arquitectura originaria del simulador y se presenta la motivación para incorporar una
mejora a la mismo. La segunda etapa desarrolla la implantación de la propuesta. Por último, se hace
un análisis de performance en tiempo de ejecución y compilación.
Capítulo 5: Se hace hincapié en la inclusión de un nuevo modelo de simulación basado en
superficies. Detalla el funcionamiento del mismo y el procedimiento de incorporación al simulador.
Finaliza con un apartado comparativo entre los modelos de simulación descritos.
Capítulo 6: Se presentan y analizan las conclusiones del trabajo teniendo en cuenta el aporte
realizado y poniendo énfasis en cómo éste ha logrado la optimización del simulador SIMECO.
Además, se mencionan las dificultades que se presentaron en el proceso y los trabajos a futuro
teniendo en cuenta las posibles mejoras a implementar.
10
Capítulo 2: Imagen de ultrasonido
Este capítulo contiene una breve descripción de cómo funcionan los dispositivos de imágenes
de ultrasonido. Esto ayudará a la comprensión de los artefactos y características de las imágenes
modo B de ultrasonido.
2.1 Imágenes B - Mode
Las imágenes de ultrasonido B-Mode son las típicas imágenes ruidosas y borrosas en escala
de grises que la mayoría de las personas asocian con una imagen de ultrasonido. Representan un corte
plano de la anatomía de tejidos y órganos del cuerpo. La construcción de la imagen se basa en ecos
generados por el reflejo de ondas de ultrasonido en los límites de los órganos y en las pequeñas
imperfecciones en los tejidos. Cada eco es representado en la imagen como un punto, creándose un
mapa a escala del producto de los ecos. El brillo en cada uno de los puntos refiere a la fuerza o
amplitud del eco, dándole el nombre a la modalidad de "brightness mode" (B-mode).
2.2 Transductor y creación de una imagen B - Mode
Un transductor de ultrasonido es un dispositivo que convierte señales eléctricas en energía
acústica utilizada para crear y enviar impulsos ultrasónicos. También actúa como un receptor
ultrasónico detectando energía acústica y convirtiéndola nuevamente en señales eléctricas. Las
sondas de ultrasonido están construidas con varios transductores dispuestos en una variedad de
geometrías. Éstos se estimulan secuencialmente de forma individual o grupal para enviar pulsos
acústicos al tejido para "barrer" el área de interés. Después de enviar el pulso, los transductores se
configuran en modo receptor para esperar los ecos entrantes producto de la reflexión o dispersión de
los impulsos ultrasónicos.
Debido a que se conoce la velocidad media del sonido, el tiempo entre el pulso y el eco se
puede determinar la distancia del reflector a la sonda. Si se suma la dirección del haz y la intensidad
de los ecos, es posible mapear los ecos en una imagen con píxeles de intensidad variable. El mapeo
de todos los ecos en un barrido dará como resultado la imagen de ultrasonido.
11
Figura 2.2.1: Simulación del Barrido. Los transductores se activan secuencialmente de un lado al otro; los ecos detectados se componen juntos para crear una sola imagen.
2.3 Resolución espacial
Durante el proceso de formación de imagen, se supone que el haz de ultrasonidos se centra
perfectamente a lo largo de su eje, es decir, el haz se desplaza en línea recta con intensidad uniforme
y no hay variaciones en la anchura o la dirección. En realidad, la intensidad del haz de ultrasonido
varía con la distancia y el ángulo. Las señales de eco detectadas siempre se muestran, en la imagen, a
lo largo del eje del haz, aunque la posición real del objeto que causa el eco podría no estar en él. Esto
afecta la resolución lateral de la imagen resultante, haciendo que los objetos parezcan borrosos a lo
largo del eje x, o, si dos reflectores están muy juntos, podrían aparecer como un solo objeto. Del
mismo modo, la resolución de elevación se ve afectada por el grosor del haz. Aunque la imagen final
es bidimensional, el haz y los ecos viajan en un espacio tridimensional, lo que contribuye a la imagen
final (como se ve en la Figura 2.3.2 (b)). Ambas resoluciones se pueden mejorar enfocando el haz. La
resolución axial se ve afectada por la duración del pulso ultrasónico. Si los pulsos son largos, los ecos
reflejados de los objetos que están muy juntos a lo largo del eje del haz se pueden interpretar como
un pulso y los objetos se presentarán como uno solo. La solución a este problema es aumentar la
frecuencia del ultrasonido para acortar la duración del pulso. Sin embargo, los haces de alta
frecuencia pierden energía rápidamente y no se pueden usar para visualizar estructuras más
profundas.
12
Figura 2.3.1: Resolución espacial. a) Resolución lateral: El haz no está enfocado, los objetos cercanos entre sí aparecen como una imagen renderizada. b) Resolución de elevación: dos objetos no alineados pueden aparecer alineados en la imagen 2d final. c) Resolución axial: los ecos largos de diferentes reflectores se detectan como un solo objeto.
2.4 Características y artefactos de una imagen de ultrasonido
Algunas estructuras se pueden reconocer fácilmente por los artefactos asociados a ellas, por
ejemplo, los ecos generados por las piedras de la vesícula biliar dejan un rastro de reflejos similares a
la cola de un cometa. Sin este artefacto, las piedras probablemente no serían fáciles de encontrar.
Un concepto importante a definir para mejorar el entendimiento de los artefactos generados
en la imagen de ultrasonido es impedancia acústica. La impedancia acústica es la resistencia que
oponen los tejidos al paso del ultrasonido y es igual al producto de la densidad del medio por la
velocidad de propagación del sonido en dicho medio. Si dos materiales tienen la misma impedancia
acústica, su límite no produce eco. Si la diferencia es pequeña, se producirá un eco débil y la mayor
parte del haz seguirá viajando a través del segundo medio. Si la diferencia es grande, se producirá un
eco intenso. Si la diferencia es muy grande, todo el haz de ultrasonido será reflejado y el eco será
máximo. Típicamente, en los tejidos blandos la amplitud del eco que se produce en su interfase es
baja. Sin embargo, las áreas que contienen hueso o aire no permiten que el ultrasonido pase más allá
de la interfase y producen unos ecos muy intensos. La intensidad de la reflexión se expresa en escala
de grises, de manera que los ecos más intensos se representan en tono blanco (hiperecoico), los más
13
débiles en diversos tonos de gris (hipoecoico) y cuando no hay reflexión, en negro (anecoico). Las
estructuras del cuerpo están formadas por diferentes tejidos, lo que da lugar a múltiples interfases.
Algunas de las características y artefactos más importantes que se encuentran en las imágenes
B - Mode son:
Reflexiones y scattering. Cuando un haz de sonido encuentra una interfaz de dos tejidos con
diferente impedancia acústica, se refleja su energía. Se pueden apreciar dos tipos de reflexiones. Una
de ellas es la reflexión especular, que se produce cuando la superficie reflectante es lisa. La dirección
de desplazamiento del haz es perpendicular a la interfaz, el mismo haz se reflejará de nuevo al
transductor y se detectará una señal de eco con intensidad relativa a la distancia con el transductor.
Por el contrario, dentro de la mayor parte de los órganos, existen pequeñas imperfecciones de
superficie rugosa llamadas scatterers, que producen variación de las propiedades acústicas, y por
ende reflexiones de ondas. Este tipo de reflexiones, denominadas scattering, actúan de una forma
diferente a las anteriores. Cuando el haz incide sobre un scatterer, se dispersa en distintas direcciones
con una energía proporcional y mucho menor que una reflexión especular. Esta energía está
relacionada con el tamaño del scatterer y la longitud de onda. Un aspecto importante a considerar es
que el scattering no cambia significativamente su apariencia en la imagen con el ángulo de la onda,
mientras que el aspecto de las grandes interfaces son altamente dependientes del ángulo de incidencia
de los haces.
Figura 2.4.1:Tipos de reflexiones. a) Onda reflejada al incidir sobre una interfaz. b) Onda reflejada en varias direcciones
al incidir sobre un scatterer.
Refracción: El ángulo de la onda reflejada en una interfaz posee la misma amplitud que la
onda incidente si la velocidad del sonido en ambos materiales es la misma. Se asume que la onda
transmitida tiene la misma dirección que la onda incidente. Sin embargo cuando la velocidad del
sonido de ambos tejidos es diferente, el ángulo de incidencia difiere de 90° y la dirección de la onda
14
transmitida es alterada. Este fenómeno se lo conoce como refracción. Cuando la onda atraviesa una
interfaz donde la velocidad del sonido incrementa, el ángulo a la normal también lo hará. Por el
contrario, si la onda experimenta una reducción de velocidad al atravesar la interfaz, el ángulo a la
normal también decrecerá.
Figura 2.4.2: refracción de una onda que incide sobre una interfaz de dos medios con diferente velocidad de onda
Ruido Speckle: Es el patrón de puntos brillantes y oscuros a lo largo de la imagen de
ultrasonido B - Mode producto de la dispersión de las ondas de ultrasonido por los scatterers. Los
diferentes tipos de tejido tienen diferentes concentraciones y distribución de los scatterers, por lo
tanto, los patrones producidos por los tejidos blandos son diferentes entre sí.
El ruido speckle no es aleatorio, es decir, si se realizan múltiples capturas en iguales condiciones el
patrón resultara idéntico para el mismo tejido. Sin embargo, cualquier variación de la apertura del
transductor o la longitud del pulso produce patrones diferentes. Esta característica resulta útil para el
diagnóstico de anomalías. Un cambio en la intensidad del patrón de speckle en una región
determinada puede considerarse una situación anormal, como lo puede ser la presencia de quistes o
tumores en zonas de baja rigidez.
Atenuación y sombra acústica: A medida que la onda de ultrasonido se propaga a través del
tejido, su intensidad va disminuyendo. La cantidad de energía que se absorbe depende de la distancia
recorrida y la frecuencia de la onda. Cuando se dan grandes niveles de atenuación, los ecos que
retornan hacia el transductor desde grandes profundidades son débiles. Por ello, para órganos de gran
tamaño o muy profundos como el área abdominal, se utilizan frecuencias bajas entre 3 y 5 MHz. Para
los objetos pequeños o superficiales se suelen utilizar frecuencias más altas de 10 a 15 MHz ya que a
altas frecuencias las longitudes de ondas son más cortas y por ende la resolución de la imagen
15
mejora. Existen estructuras que obstruyen el paso de la onda de ultrasonido, resultando así una
completa reflexión o absorción del sonido. Este fenómeno crea un área anecoica denominada sombra
acústica. Puede estar producida por el gas que refleja el 99% del sonido generando una sombra
“sucia” y no homogénea, o por los huesos que absorben la mayor parte de la onda generando una
sombra “limpia” y uniformemente negra. Este artefacto puede ser muy útil para la detección de
cálculos en vesícula y riñones porque tienden a comportarse como el hueso.
Figura 2.4.3: Patrón speckle. Figura 2.4.4: Sombra acústica generada por una costilla.
16
Capítulo 3: Integración de técnica de ruido Speckle en tiempo real
En el presente capítulo se desarrolla el algoritmo de simulación de imagen de ultrasonido
mediante un modelo de volumen y la implementación de las técnicas para producir ruido speckle en
una etapa de preprocesamiento y en tiempo real. Se propone una inclusión efectiva de esta última a
SIMECO y se analizan los resultados obtenidos.
3.1 Modelo de Volumen
Rubi et al. [11] presentan un modelo acústico para la simulación de reflexiones, atenuación,
sombras y efectos de oclusión, siendo las características principales en una imagen de ultrasonido. El
método utiliza como modelo de entrada una imagen médica en un volumen CT, y emula mediante la
técnica de ray-casting el efecto de las ondas acústicas atravesando diferentes tejidos.
Desde un punto de vista geométrico, la onda de ultrasonido se puede modelar como un rayo
que comienza desde el transductor y se calcula utilizando leyes conocidas de la física. Cuando un
rayo de ultrasonido viaja a través de un modelo con diferentes materiales, se distinguen dos
interacciones principales: reflexiones y atenuación. Las reflexiones se producen en la interfaz entre
dos materiales con diferentes impedancias acústicas. La cantidad de energía que se refleja hacia el
transductor está determinada por un coeficiente de reflexión, αR, dado por:
αR = ( )Z +Z2 1
Z −Z2 12
donde Z1 y Z2 son las impedancias acústicas de los materiales. La transmisión es simplemente la
energía restante que pasa a través de la interfaz en el siguiente medio, la cual está definida por la
siguiente fórmula:
αT = 1 − αR
La reflexión de ultrasonido en las interfaces de los tejidos no es especular y se comporta de
manera diferente según el ángulo entre el haz incidente y la superficie normal del tejido. Para
considerar esto, se usa un modelo de Lambertian scattering para describir la intensidad reflejada de la
17
señal captada por el transductor. Debido a éste, la intensidad de la señal es independiente del ángulo
de visión y solo depende del ángulo de incidencia.
El efecto de un ancho de haz finito producido por un arreglo de elementos del transductor se
modela integrando las intensidades de reflexión percibidas a lo largo del frente de onda a una
profundidad específica usando una función de ventana adecuada.
Otro componente del método es una imagen de scattering (speckle) generada a partir de la
imagen de CT. Esta imagen permite la simulación de speckle visible en ultrasonido real. Los
artefactos de scattering en el ultrasonido dependen de la vista, mientras que la dispersión
precalculada no es dependiente de la visión. Para compensar esto, la imagen de dispersión se
combina con la información dependiente de la vista que se encuentra en las imágenes de reflexión y
transmisión por medio de la fórmula:
(x) αG (x) (x) G (x) (x) )I (x)IUS = ( σ1 * IR + β σ2 * αT S
donde es la imagen de ultrasonido, es la imagen de reflexión, es la imagen de (x)IUS (x)IR (x)IS
dispersión, α y β son coeficientes de mezcla (blending), y G es un filtro gaussiano con media 0 y
desviación ajustable (σ1 y σ2 ) utilizado para suavizar el proceso de fusión de imágenes. Los
coeficientes de mezcla, α, β, σ1 y σ2 son ajustados por el usuario para obtener los mejores resultados
de visualización.
El núcleo de la implementación de este modelo es un algoritmo de emisión de rayos
(ray-casting). Un transductor virtual se coloca dentro del espacio de un volumen de CT. Tanto el
volumen CT como el volumen de dispersión precalculado se cargan en la memoria en una primera
etapa. En un segundo paso, el algoritmo calcula los valores de reflexión, atenuación y ruido de
speckle durante el raycast y almacena estos valores en tres buffers diferentes. Una última etapa usa la
ecuación para calcular la imagen final de ultrasonido basada en esos buffers. La imagen resultante
tiene un amplio rango dinámico, por lo que es comprimida la señal utilizando un método de
compresión de registro.
18
Figura 3.1.1 (a) Se observa el rango que el transductor capta sobre el volumen CT anatómico. (b) Simulación generada por la combinación de las imágenes de reflexión y dispersión para la región de interés mostrada en (a). Se observa el sombreado en el lado derecho debido a una interfaz de tejido de aire y en la parte inferior media de la imagen debido a una interfaz de tipo hueso.
3.2 Ruido Speckle generado en SIMECO
El simulador de ultrasonido SIMECO utiliza una técnica de recreación de ruido speckle
propuesta por D'Amato et al. [10], la cual es modelada con la siguiente fórmula:
n a . y * = x * * + *
donde indica el pixel con ruido aplicado en el medio de una ventana, el píxel sin ruido, y * x * n *
el ruido multiplicativo y el ruido aditivo, que puede ser despreciado en los sistemas de a *
ultrasonido por lo que se elimina. Si al resultado se le aplica una compresión logarítmica para ajustar
el rango dinámico del eco entre 50-70 dB la fórmula queda expresada como:
) ) ) log( y * = log( x * + log( n *
luego: y = x + n
donde y es el pixel de una imagen tipo B - Mode, x es el pixel comprimido sin ruido de una imagen
de CT a la cual se le aplican filtros para suavizar las interfaces y homogeneizar las intensidades de
los tejidos, y n es el componente de ruido comprimido. Sin embargo, el ruido speckle es más intenso
en regiones de mayor ecogenicidad, por lo tanto n no es independiente de x. Por consiguiente:
19
ny = x + √x
donde es definido como la convolución de ruido blanco Gaussiano con una función de n
propagación de punto (PSF)[12] por medio de la ecuación:
) , y) ⊗ Z( x , y ) N ( x , y = H( x donde es una matriz de ruido, es la PSF y es la impedancia acústica ) N ( x , y , y)H( x ) Z( x , y
modelada como ruido blanco Gaussiano.
Hay que considerar que el ruido speckle es proporcional a la intensidad de la señal que llega
al tejido. Puesto que las ondas de US pierden intensidad de la señal en la medida que avanzan sobre
los tejidos, debido a la absorción y al scattering, se aplica una atenuación lineal llamada caída lineal.
Como se mencionó en el Capítulo 1, la imagen de scattering es generada en el modelo de
entrada del simulador, es decir, durante la etapa de preprocesamiento del volumen previa a la
ejecución en tiempo real del simulador. Por esta razón se limita la generación de scattering con la
caída lineal aplicada a una posición fija.
Figura 3.2.1: Imagen de US generada por SIMECO.
20
3.3 Modelo de ruido Speckle en tiempo real
Külsgaard en [13], implementa una técnica de generación de scattering considerando la
posición del transductor en tiempo real para lograr representaciones más realistas del ruido y por
ende aumentar la calidad de la imagen de ultrasonido resultante de SIMECO.
El modelo de ruido speckle propuesto se divide en tres etapas para llevarse a cabo. La primera
se realiza en el modelo de entrada del simulador, en el cual, a partir de modelos 3D a los cuales se les
aplica una serie de filtros, genera un volumen de scattering utilizado como entrada para el simulador.
La etapa intermedia se basa en la asignación de valores y la creación de estructuras de datos, como la
matriz de ruido blanco y el kernel de la PSF. Ésta tiene lugar en el modelo del simulador ya que se
necesita información del tipo y la posición del transductor y el tamaño del volumen para la
generación de las estructuras.
La última etapa ocurre dentro del motor de simulación. Cuando las ondas emitidas por el
transductor atraviesan los tejidos del cuerpo se simulan los fenómenos del ultrasonido, dependiendo
de la orientación y posición del transductor. La velocidad de respuesta que tenga el simulador con
respecto a los movimientos del transductor es un factor determinante del nivel de interactividad con
el usuario. Es aquí donde existe una restricción de tiempo en la que deben mostrarse los resultados,
por lo tanto la generación de ruido implementado no solo pretende mejorar la calidad de imagen, sino
también introducir la menor cantidad de retraso posible al ciclo de recreación. La etapa se comienza
aplicando la caída lineal sobre el corte anatómico para recrear el fenómeno de absorción de las ondas
ultrasónicas que pierden intensidad en las zonas más profundas.
El patrón de ruido speckle no solo se forma en base a la posición y a la cantidad de scatterers
que haya al producirse el fenómeno de dispersión, sino también depende de la estructura del tejido.
Podemos decir que cada uno de éstos posee un patrón propio y por esta razón, cuando se observa un
mismo tejido desde distintas posiciones o ángulos, el ruido speckle resulta ser similar. Podemos
asumir, sin pérdida de generalidad, que el ruido generado en imágenes de tejidos similares son
consistentes (i.e similares) independientemente de la orientación o posición del transductor. Esta
simplificación del fenómeno de dispersión se utiliza con el fin de reducir el costo computacional.
Luego se extrae un plano del volumen anatómico utilizando como parámetros la posición y el
ángulo que indica el transductor, simulando el efecto del patrón de ruido speckle propio de los
21
tejidos. El plano de ruido es convolucionado con el kernel de PSF [14] y se genera la imagen de
ultrasonido con el ruido speckle aplicado.
Figura 3.3.1 Imagen US generada a partir de la técnica implementada por Külsgaard.
3.3.1 Validación de resultados
Como detalla Külsgaard en [13], la técnica de scattering en tiempo real incluye dos mejoras
de calidad a las imágenes de ultrasonido generadas por SIMECO. Por un lado recrea correctamente el
efecto de absorción, manteniendo la dirección de la caída lineal acorde al transductor como se
muestra en la figura 3.3.1.1 b) y d). El método original de SIMECO genera siempre el decaimiento
lineal en una misma dirección. Sucede así que para algunas tomas del volumen atómico la caída
lineal es perpendicular al transductor, generando el fenómeno de absorción de manera errónea, figura
3.3.1.1 c). Por otra parte, incorpora el efecto de pequeñas zonas brillantes y oscuras elongadas del
ruido speckle perpendicular a la dirección de la onda en base a la posición y ángulo del transductor.
SIMECO no recrea este efecto correctamente, ya que utiliza una única dirección para generar el ruido
de todo el volumen.
22
figura 3.3.1.1: Dirección de la caída lineal aplicada a la imagen US. a,c) fenómeno de absorción generado por la técnica
original de SIMECO. b,d) fenómeno de absorción generado por la técnica implementada por Külsgaard.
La recreación de los nuevos fenómenos en tiempo real impactó directamente sobre la
performance del modelo de simulación. Las estructuras y cálculos adicionales incrementan el tiempo
de carga en un 1,18% y los tiempos de cómputos en un 13% comparado con la generación de ruido
speckle original. Esto disminuyó la cantidad de cuadros generados por segundo en un 10%. Sin
embargo la caída de la performance obtenida no se considera significativa si se tiene en cuenta las
mejoras en la calidad visual del ruido speckle.
3.4 Integración de ruido Speckle en tiempo real
La generación en tiempo real del scattering no solo trae como consecuencia mayor tiempo de
cómputo, sino que también se suman nuevas estructuras auxiliares encargadas de contener los nuevos
cálculos. Esto produce un aumento en la demanda de páginas necesarias para mantener en memoria
principal las estructuras que necesita el motor de simulación, además de incrementar el tiempo de
carga de las mismas.
23
3.4.1 Motivación y Objetivos específicos
SIMECO cuenta con dos técnicas de modelado de ruido Speckle. Una de ellas generada en el
modelo de entrada, mientras que la otra es generada en el modelo de simulación. Durante la
ejecución del simulador ambos modelos arrojan como resultado la matriz de ruido correspondiente
para utilizarla en la imagen final de US, sin embargo es el usuario quien decide cual de las dos
técnicas mostrar en la interfaz gráfica.
Uno de los objetivos específicos que se pretende cumplir es mantener en tiempo de ejecución
del simulador un solo modelado de ruido speckle para evitar la construcción innecesaria de las
estructuras auxiliares de la otra técnica. Por otro lado se tiene como objetivo utilizar estructuras
optimizadas y aprovechar las ventajas del lenguaje para optimizar el uso de memoria.
3.4.2 Implementación
Un ejercicio de prueba se carga en el simulador por medio de un archivo de configuración que
contiene todos los parámetros configurables por el usuario para la creación de la imagen de
ultrasonido. Se agregó una nueva variable al archivo con el fin de que el usuario elija qué técnica de
scattering usará el simulador. Ésta recibe el nombre de ScatteringMode y puede ser seteada con los
valores “Preprocessed”, si se pretende usar el método original, o “RealTime” si se escoge la nueva
técnica. La clase Simulator carga la información correspondiente desde el archivo de configuración,
incluyendo el nuevo parámetro que setea una nueva variable privada de la clase, ScatteringRealTime,
por medio del método setScatteringRealTime. El valor que tome esta variable determinará qué
estructuras serán generadas y qué métodos llamará la función encargada de generar la nueva imagen
de ultrasonido. Otorgar mayor posibilidad de configuración al usuario, potencialmente genera nuevos
errores en la configuración. Es posible que no se indique correctamente el valor al parámetro de
ScatteringMode. En este caso se emitirá un mensaje de error “Scattering Mode Wrong”, el cual será
indicado a través de un mensaje de error en la aplicación y a su vez quedará asentado en el archivo de
logs de SIMECO.
Para incluir este caso de error, fue necesaria la implementación de una nueva excepción en la
clase Exception que compruebe la presencia o valor del parámetro ScatteringMode, de tal manera que
si su valor es erróneo se emitan los mensajes mencionados. Si este parámetro es faltante, por defecto
se utilizará la técnica de tiempo real.
24
Se detectó el envío de matrices OpenCV como parámetro por copia a varios métodos de la
clase Simulator. La forma en la que
se realiza este mecanismo es
ineficiente ya que al usar un pasaje
de parámetros de este tipo, opencv
utiliza métodos propios para crear
la copia. Esta misma es almacenada
en el heap y a su vez es
referenciada. Finalizada la función,
se debe invocar al método
destructor de la matriz copiada que
disminuye el contador de
referencias; si el contador es igual a
cero se libera el espacio que
ocupaba la matriz en el heap. Todo
esto genera perdida de tiempo y
memoria es por ello que se decidió
cambiar al tipo de pasaje de
parámetros por referencia para
evitar copias innecesarias de las
matrices. A su vez si de antemano
se podría detectar que dicho
parámetro no va a ser modificado, se lo define como constante de forma explícita por medio de la
palabra reservada const para que el compilador aplique las optimizaciones pertinentes.
25
3.5 Rendimiento
En el desarrollo de la presente sección se realiza un análisis de los resultados obtenidos tras la
nueva integración efectiva del modelo de generación de ruido speckle. Los análisis están
determinados a partir de aspectos tales como la memoria que necesita el programa durante la
ejecución de un ejercicio y el tiempo de carga de las estructuras necesarias la simulación.
3.5.1 Plataforma de prueba
Las pruebas de las mejoras aplicadas al simulador de ultrasonido SIMECO han sido
ejecutadas desde una computadora portátil con las las siguientes características:
Modelo Dell Inspiron 15 7000 series
CPU Core I5 5200
Memoria RAM 6 Gb
Placa de video Intel HD Graphics 5500
Sistema Operativo Linux elementary OS
Cada técnica de generación de ruido Speckle utiliza un volumen anatómico propio, obtenido a
partir de un conjunto de datos IRCAD compuesto de conjunto de componentes de tomografías
computarizadas abdominales segmentadas de hombres y mujeres.
3.5.2 Análisis de memoria
Durante este análisis se tuvo en cuenta el consumo de memoria producidas por ambas
implementaciones de la integración de la técnica de generación de ruido speckle.
Se puede identificar un mayor consumo para la implementación que existente desde un
principio. Ésta mantenía en tiempo de ejecución las dos implementaciones de ruido speckle, tanto el
modelo pre procesado propuesta por D'Amato et al. en [10], como también la implantación
incorporada por Külsgaard en [13]. Los cambios que se propusieron en la implementación arrojaron,
según las pruebas que realizamos en el equipo descrito en la sección anterior, un uso inferior de
26
memoria de un 11% para el ruido pre procesado, y de un 10% para el ruido obtenido en tiempo real.
Los resultados obtenidos se pueden apreciar en la Figura 3.5.2.1.
Figura 3.5.2.1 Comparación en el uso de memoria de la integración del ruido speckle en tiempo real.
3.5.3 Análisis de tiempo de carga
En esta etapa de análisis se le dio importancia al atributo de calidad performance en base al
tiempo que tarda el simulador a la hora de cargar un ejercicio de practica seleccionado por el usuario.
Para llevarse a cabo este análisis se realizaron quince pruebas de ejecución de SIMECO para el
modelo con y sin mejora tomando el tiempo de carga del ejercicio. Los resultados se promediaron y
fueron los siguientes:
Pre procesado (ms) Tiempo real (ms)
Sin Mejora 7225,6 7225,6
Con Mejora 5810,2 6079,4
27
Los datos de carga demoran por igual tanto para la técnica de preprocesamiento como la de
tiempo real para el algoritmo sin mejora por el hecho de que se están ejecutando ambos en
simultáneo. Al aplicar la mejora se puede apreciar una diferencia de tiempos entre cada técnica e
ruido speckle ya que la cantidad de estructuras que se deben cargar es menor. Como se muestra en la
figura 3.5.3.1 se puede observar una mejora del 15,86% para la técnica en tiempo real y 19,59% para
la pre procesada.
Figura 3.5.3.1 Comparacion de los tiempos de carga entre modelado de scattering
28
Capítulo 4: Reestructuración de SimEco
Es natural notar que la aplicación se vuelve inestable como consecuencia de las múltiples
modificaciones, adaptaciones o mejoras que surgen a lo largo del tiempo. Esto conlleva a pensar en
que cada vez que se pretende realizar un cambio se producen efectos colaterales inesperados, por lo
que se hace necesario aplicar una reingeniería del software. El simulador de imágenes de ultrasonido
SIMECO es un proyecto en constante mejora por lo que se pretende hacer una re-arquitectura con el
fin de reutilizar componentes, facilitar la comprensión del sistema, cambiar y probar con el fin de
reducir errores y costos de mantenimiento.
En este capítulo presentamos la arquitectura actual de SIMECO y el desarrollo de su
re-arquitectura para lograr un software más simple y adaptable.
4.1 Arquitectura de Simeco
SIMECO presenta una estructura modular determinada por dos módulos bien definidos: Core
y UI (Interfaz de usuario). El primero es el motor del simulador y se encarga de generar la imagen de
ultrasonido. Está conformado principalmente por las siguientes clases:
Clase Descripción Interfaces
TransducerElement
(TE)
Representa a cada uno de los rayos del transductor.
Get/Set: ● Vector de posición ● Vector de dirección
Transducer
Contenedor de los elementos del transductor. Define el número y ancho de elementos del transductor como así también el espacio entre los que son adyacentes entre si y cuales son los activos. También setea la intensidad inicial de la onda, la profundidad del rayo y el delta de muestreo.
Get/Set: ● Cantidad de TE ● Número de TE activos ● Ancho de cada TE ● Espacio entre TE adyacentes ● Longitud de apertura activa ● Ventana de TE ● Intensidad inicial ● Profundidad del rayo ● Delta de muestreo ● Intervalo random entre
deltas de muestre
29
InputManager
Controla las entradas de teclado/joystick para mover al transductor.
Actualización de entradas por teclado o joystick. Set: ● Transducer ● Sensibilidad de traslación
CTVolume
Es la entidad responsable de la representación del CT.
Get: ● Valor en un punto
determinado Set: ● Volumen CT
Simulator
Es la estructura encargada de calcular una imagen simulada de ultrasonido.
Simulación del frame Get ● Imagen simulada
Set: ● Transducer ● CTVolume
Renderer
Se encarga actualizar el contenido del frame proveniente de la simulación.
● Get: Último frame
Set: ● Información de entrada ● Rango de entrada ● Ganancia aplicada a los
datos de entrada ● Factor gamma aplicado a los
datos de entrada
Simeco
Crea y administra los elementos necesarios para la simulación.
Set: ● Foco ● TCG ● Ganancia
SimecoAPI
Define las interfaces que los clientes de simeco pueden utilizar para interactuar con simeco.
Set: ● Foco ● TCG ● Ganancia
SimecoClient Es el nexo entre el módulo core con el exterior.
Notificación de frame finalizado.
30
El módulo restante se encarga de mostrar la simulación del ecógrafo y genera las distintas
vistas de la interfaz de usuario. Sus clases principales son:
Clase Descripción Interfaces
SimecoThread Encargada de construir una instancia de Simeco.
Get: ● Último frame de imagen
ultrasonido. Set: ● Foco ● TCG ● Ganancia
ExcerciseNode Abstracción principal de los ejercicios de simulación.
Método de inicialización del ejercicio.
MainMenu Menú principal de la interfaz, se construyen los botones que inician los ejercicios.
Señales: ● Iniciar ejercicio
SimecoWidget Construye el panel en el cual se mostrará la imagen simulada.
Crear panel de imagen.
La figura 4.1.1 muestra una vista general del sistema y la comunicación entre los objetos dentro y
fuera de los módulos.
Figura 4.1.1. Vista general de Simeco
SIMECO inicia su ejecución del lado del módulo de Interfaz construyendo un nuevo objeto
del tipo ExcersiceNode por cada ejercicio disponible, mostrandolos en una lista de botones en el
31
menú principal del programa. Cuando un usuario presiona alguno de estos, MainMenu emite una
señal de que el ejercicio ha sido iniciado, en efecto está siendo invocado el método start() de la clase
Exercise. Este método se encarga de crear una nueva instancia del objeto SimecoThread, el cual hace
de nexo con el módulo de simulación debido a que hereda de SimecoClient. A su vez, dicho método
ejecutará el thread recientemente creado e iniciará su propio método start(), el cual se encarga de
crear una instancia de Simeco. Por otro lado Exercise recibe también el último frame actualizado por
el core de simulación, emitiendo una señal de finalización de frame con los nuevos datos para
actualizar la imagen de ultrasonido. Dicha imagen es mostrada en una instancia de la clase
SimecoWidget, encargada de generar la interfaz gráfica que recrea a un simulador de ultrasonido.
Una vez creado el objeto Simeco por medio de su método init(), se crean todas las instancias
de las clases del core necesarias para la simulación de las imágenes de ultrasonido. Luego de la etapa
de inicialización, se invoca el método run() que inicializa un loop infinito hasta el cierre del ejercicio.
Éste actualizará la instancia de transducer para tener las nuevas posiciones de los elementos del
transductor y generar la simulación de la nueva imagen de ultrasonido en la instancia de la clase
Simulator. Por último, Renderer renderizará la imagen para que simeco emita una señal notificando
que está disponible el nuevo frame a visualizar.
Figura 4.1.2 Vista dinámica de la construccion y ejecucion de un ejercicio en SIMECO.
32
4.1.1 Dependencias
SIMECO reutiliza un conjunto de librerías third-party para implementar toda su
funcionalidad. Dentro de ellas se encuentra:
● GLM: Es una librería matemática only header para programas de gráficos basados en en
lenguaje de sombreado OpenGL. SIMECO utiliza esta librería para la representación de las
posiciones y la orientación del transductor, así como también para los elementos del
transductor y los volúmenes de entrada.
● VTK: Es un sistema de software libre para la realización de gráficos 3D por computadora,
procesamiento de imágenes y visualización. Admite una amplia variedad de algoritmos de
visualización y técnicas de modelado avanzadas. Presenta además un extenso marco de
visualización de la información y un conjunto de widgets de interacción 3D. SIMECO hace
uso de esta librería para cargar los volúmenes anatómicos de entrada y para visualizarlos en la
interfaz de usuario.
● OpenCV: Es una librería open source que proporciona una infraestructura común para
aplicaciones de visión artificial y machine learning. Fue diseñado para la eficiencia
computacional y con un fuerte enfoque en aplicaciones en tiempo real. SIMECO utiliza esta
librería para generar las imágenes de ultrasonido de forma eficiente.
● SFML: Es una API cuyas funcionalidades permiten al usuario crear videojuegos y programas
interactivos. SIMECO aprovecha el módulo “graphics” para el control del transductor por
medio del teclado y el joystick.
● QT: Es un framework multiplataforma usado para desarrollar programas que utilicen interfaz
gráfica de usuario.
● GTest: Es una biblioteca para escribir casos de pruebas en el lenguaje de programación C ++.
● Inih: Es una librería pequeña y simple para analizar archivos .INI. SIEMCO utiliza archivos
de configuración .INI para cargar las configuraciones del simulador que pueden ser
modificadas por el usuario.
● Easylogging: Es una librería only header utilizada para el registro eficiente de logs en
aplicaciones C ++. Es extremadamente potente, extensible y configurable para los requisitos
del usuario.
33
● PSMoveAPI: Es una biblioteca de código abierto multiplataforma para acceder al controlador
de movimiento Sony Motion a través de Bluetooth y USB directamente desde un PC sin la
necesidad de una PS3.
● MyAHRS plus: es un AHRS de alto rendimiento y bajo costo. Los AHRS son sensores
tridimensionales formados por giróscopos, acelerómetros, y magnetómetros, que
proporcionan datos en los tres ejes del espacio. SIMECO tiene un traductor ficticio creado a
partir de una placa MyAHRS plus y utiliza su SDK de para obtener las posiciones del
transductor.
● Serial: Esta es una biblioteca multiplataforma escrita en C ++ para interactuar con puertos en
serie rs-232. Simeco utiliza esta librería para leer el puerto serial donde se conecta el maniquí
y luego traducir esa información en la posición del transductor.
4.2 Build system
El proceso de compilación de un programa no es trivial y necesita varios pasos para llevarse a
cabo. A medida que el proyecto crece, ya sea por incluir nuevas librerías third-party, módulos
propios, o expandirse a otras plataformas entre otros motivos, se desea que su construcción sea lo
más automático y fiable posible para evitar muchos errores en el transcurso de este proceso.
SIMECO utiliza la herramienta CMake para definir su proceso de compilación por varios motivos:
● Sintaxis simple para la especificación de las dependencias entre los archivos y las acciones
que se tienen que llevar a cabo.
● Genera binarios multiplataforma.
● Recopilación únicamente de los archivos modificados.
4.2.1 CMake
CMake es una familia de herramientas de plataforma abierta diseñada para desarrollar, probar
y empaquetar software. Es utilizada para controlar el proceso de compilación del software usando
plataformas simples y archivos de configuración independientes del compilador para generar
makefiles y espacios de trabajo nativos que se pueden usar en un entorno de compilación a elección.
CMake propone una estructura básica de directorios, como se muestra en la figura 4.2.1.1, para
organizar un proyecto. La carpetas src contienen todos los archivos y clases propias del proyecto
34
necesarias para compilar. Include es el directorio que contiene los archivos cabeceras que se
pretenden compartir hacia el exterior del proyecto, mientras que carpeta Lib incluye todas las
librerías estáticas enlazadas al proyecto. El proyecto se compila generalmente en un directorio build,
dentro de la carpeta raíz. Las configuraciones están centralizadas por defecto en un archivo llamado
CMakeLists.txt. Éste es el encargado de indicar toda la información necesaria para que se haga
efectiva la compilación del proyecto.
Figura 4.2.1.1: árbol de directorios estándar de un proyecto compilado con Cmake.
Indica qué archivos se deben compilar, qué librerías necesita el programa y cómo las incluye,
qué librerías y ejecutables se generan y otros parámetros adicionales que requiera el compilador. El
formato mínimo de este archivo suele ser:
PROJECT ( nombre_del_proyecto )
ADD_EXECUTABLE ( nombre_del_ejecutable {VARIABLE} )
La primera sentencia es la definición del proyecto y es de requisito obligatorio. La segunda
línea es la encargada de definir el archivo ejecutable. El primer parámetro define el nombre del
ejecutable mientras que el segundo es la listas de archivos necesarios para la compilación del
proyecto.
35
4.2.1.1 Sentencias de CMake
El lenguaje de CMake es imperativo, se ejecuta de forma secuencial y su sintaxis es regular y
simple:
COMANDO 1 (ARG1 ARG2)
COMANDO 2 (ARG1 ARG2 ARG3 …)
Si bien se mostró en la sección anterior la estructura mínima para definir un archivo CMake,
no es suficiente para configurar proyectos de gran tamaño. Existen otras sentencias comunes para
completar la configuración, las más usadas son:
● SET (< variable > [< archivos >]). Setear una variable.
● < variable >: Nombre de la variable. Existen varias convenciones que se recomienda
seguir, por ejemplo debe terminar en SRC si incluye ficheros a compilar.
● < archivos >: Lista de archivos a utilizar.
● ADD_SUBDIRECTORY(< directorio >): Añadir un directorio. Antes de procesar el
directorio actual, se procesa cada uno de los subdirectorios indicado.
○ < directorio > ruta relativa del directorio a incluir.
Definición de librerías
● ADD_LIBRARY(< nombre libreria > [ TIPO ] < archivos | variables >): Definir una
librería.
● < nombre librería > Define el nombre de la librería
● TIPO define el tipo de librería, el cual puede ser definido como:
○ SHARED define una librerıa de tipo dinámica (.so - .dll)
○ STATIC definiría una librería estática ( .a )
● < archivos | variables > Archivos necesarios para la librería.
36
Uso de librerías
● FIND_PACKAGE(): Encontrar archivos cabeceras de librerías externas. El comando busca
la ruta del módulo Find<nombre-librería>.cmake. Las rutas de búsqueda son las definidas en
la variable CMAKE_MODULE_PATH o el directorio de módulos de CMake
<CMAKE_ROOT>/share/cmake/Modules/. Si el paquete fue encontrado, se setea en true la
variable <nombre-librería>_FOUND.
● INCLUDE DIRECTORIES( < directorios > ): Insertar directorios para los include.
Mediante esta variable se añaden nuevas rutas para buscar los archivos cabecera.
● TARGET_LINK_LIBRARIES (< ejecutable | librería > [< librerías >]): Generar Enlaces
entre librerías.
● < ejecutable | librería >: Nombre del ejecutable o librería definido anteriormente.
● < librerías > : Archivo o variable de la librería que se desea enlazar.
.
4.2.2 Configuración de SIMECO
El archivo CmakeList de SIMECO incluye los archivos header y source de los módulos core e
interfaz y administra las dependencias de cada uno de ellos. Además activa algunos flags del
compilador de C++ como por ejemplo la funcionalidad de la versión 14. A continuación en la figura
4.2.2.1 se puede apreciar un pseudocódigo del archivo de configuración.
37
Figura 4.2.2.1: Archivo CmakeList.txt. PseudoCódigo ilustrativo del archivo de configuración de compilación de
SIMECO
4.3 Motivación a generar una librería dinámica
Las librerías son paquetes que almacenan funcionalidad similar en una sola unidad, siendo
una forma sencilla y versátil de modularizar y reutilizar código. Si la librería se vincula a un
programa en tiempo de compilación, ésta será tratada como cualquier otro módulo objeto y se
integrará a la imagen binaria del programa. De este modo cada programa que utilice la librería tendrá
una copia de la misma, desperdiciando espacio en disco y memoria principal. Además un cambio
sobre ella obligaría al usuario a volver a compilar todo el programa.
En contraparte, si la librería pospone su vinculación a un programa hasta el tiempo de
ejecución del mismo, dentro de la imagen binaria del programa se incluirá un pequeño fragmento de
código llamado stub para indicar cada referencia de una rutina de la librería. El stub se encarga de
localizar la rutina adecuada de la librería residente en memoria o cómo cargarla si esa rutina no está
todavía presente. Luego se sustituye así mismo por la dirección de la rutina y la ejecuta, así, la
siguiente vez que se ejecute ese segmento de código concreto se ejecutará directamente la rutina de la
libreria, sin tener que realizar de nuevo el montaje dinámico. La librería contiene una tabla de
38
exportaciones que almacena el nombre de cada función exportada a otros ejecutables. Las funciones
presentes en esta tabla son el único punto de entrada a la librería, el resto de funciones son privadas.
Usar librerías de enlace dinámico trae como ventaja:
● Ahorrar memoria y reducir el intercambio de páginas. Muchos procesos pueden utilizar
simultáneamente una mismo libreria dinamica, compartiendo una sola copia de la misma en la
memoria.
● Ahorrar espacio en disco. Se almacena una única copia de la librería en disco.
● Facilitar la actualización de la librería. Cuando se cambian las funciones de la librería no es
necesario volver a compilar y vincular las aplicaciones que la utiliza si no cambian los
argumentos de la función y los tipos de valores devueltos.
● Admitir programas multilenguaje. Programas creados con distintos lenguajes de
programación pueden llamar a la misma función siempre que sigan la convención de llamada
a la función.
Teniendo en cuenta todas las ventajas que traería convertir el módulo de simulación de
SIMECO en una librería dinámica , se propone hacer efectiva dicha transformación para permitir
reutilizar el motor en otras aplicaciones las cuales sea necesario generar imágenes de ultrasonido a
partir de volúmenes de CT. Como ventaja colateral obtenemos la facilidad de modificar y actualizar
el módulo de forma sencilla sin afectar el resto del simulador y mejorar los tiempos de compilación.
4.4 Implementación
La construcción de la librería dinámica se puede dividir en dos partes. Por un lado están los
cambios realizados sobre el diseño del módulo del simulador, relacionados con la abstracción de las
clases compartidas al exterior. Por el otro la modificación del archivo cmake para actualizar el build
system.
4.4.1 Cambios en el Diseño del módulo Core
Una de las consideraciones a tener en cuenta al definir una librería es cuáles van a ser sus
interfaces, es decir qué métodos se exportarán para que otra aplicación pueda hacer uso de ellas. El
core de simulación comparte con el exterior las clases:
39
● SimecoClient: Es la clase que el programa externo tendrá que heredar para comunicarse con
la librería.
● Simeco: Necesaria para poder crear el motor de simulación en sí.
● Transducer: Necesario para acceder a las posiciones, rotaciones y orientaciones del
transductor.
● Simulation Size: Computa en milímetros el tamaño de la simulación.
El hecho de que en C++ todos los data members tengan que ser visibles en el archivo de
cabecera obliga a incluir archivos que contienen detalles de implementación y se pretenden mantener
privados. Por lo tanto cuando un programa tercero utilice alguna de las clases compartidas por la
librería no podrá compilarla, ya que no tiene acceso a aquellas clases privadas incluidas en la
anterior. Para dar un ejemplo, la clase simeco incluye a la clase simulator para crear una instancia de
ésta y generar la imagen de ultrasonidos simulada. Sin embargo es un archivo privado de
implementación de la librería que no pretende ser compartido pero si no se comparte se le impedirá a
la aplicación de terceros la compilación de la clase Simeco. Para resolver este inconveniente existe
una expresión idiomática (idiom) denominada Pointer To Implementation (Pimpl) o puntero opaco
para ocultar la implementación de una clase en C++. Este patrón propone separar en dos clases
distintas la interfaz pública de los detalles de implementación. El archivo cabecera de la clase pública
o también llamada handle tiene solamente los métodos públicos y un puntero a la clase privada o
body, de la que solo existe una declaración anticipada (forward declaration) . En el archivo source de
handle se especifica su constructor y destructor y se tiene acceso a la implementación definida en la
clase privada. Es relevante destacar la existencia de la declaración anticipada de la clase Body dentro
del archivo cabecera de la clase handle. Ésta técnica se utiliza cuando el programador hace uso de
una estructura que aún no ha dado su definición completa. Para el caso particular de compilaciones
separadas, durante el proceso de compilación, el compilador acepta el uso de una estructura declarada
pero no definida, asumiendo que el linker encontrará la definición al momento que se están
enlazando las librerías definidas en el archivo Cmake.
40
Figura 4.4.1.1: Clase handle de la implementación del
patrón Pimpl sobre la clase simeco. naranja) archivo
cabecera simeco.h. azul) archivo source simeco.src.
La figura 4.4.1.1 muestra la implementacion
de la clase handle del patrón en la clase
simeco.
La clase body, que se denomina de la misma
forma seguida de Impl, contiene la
implementación de la clase pública,
incluyendo atributos y métodos privados.
Normalmente cuando se modifica una clase
añadiendo atributos o métodos privados
nuevos se obliga al usuario de la clase a
re-compilar por algo que no utilizan
directamente. Utilizando Pimp, cualquier
cambio que se realice en la implementación
que no afecte directamente a la interfaz
pública (cambio en los tipos de retorno,
cambio en la cantidad o tipos de parámetros)
no requiere la re-compilación de los usuarios
de las clases.
Como pretendemos que el core de simulación
sea un componente reutilizable, aprovechamos las ventajas ofrecidas por el patrón y lo aplicamos
sobre las clases que funcionan como interfaces de la librería (transducer, simulationSize, Simeco).
Esto puede reflejarse de forma negativa para la comprensión de la arquitectura ya que se agregan
nuevas clases para representar la funcionalidad ya existente. Las clases Transducer, SimulationSize y
Simeco se transforman en la clase handle del patrón y se incorporan TransducerImpl,
SimulationSizeImpl y SimecoImpl como clase body respectivamente.
41
Figura 4.4.1.2 Diagrama de Clases de idiom Pimpl aplicado a las clases simulationSize, simeco y transducer.
42
4.4.2 Build System
La creación de la nueva librería implica la construcción de un nuevo archivo CMakeList para
configurar el proceso de compilación de la misma. La figura 4.4.2.1 muestra un pseudocodigo del
archivo, el cual incluye las sentencias para incorporar los archivos de cabecera e implementación,
soportar las nuevas funcionalidades de C++14, incluir y linkear las librerías externas y la sentencia
Add_library con parámetro SHARED para indicar que construcción de la librería dinámica.
Figura 4.4.2.1 Pseudocódigo del archivo CmakeList.txt de SimecoLib.
43
El sub árbol de directorios de la carpeta raíz del proyecto se compone por :
● include: Contiene los archivos cabecera de las clases mencionadas anteriormente que la
librería compartirá con las aplicaciones terceras.
● src: Contiene todos los archivos de cabecera e implementación propios de la librería.
● lib: Directorio que contiene las librerías que utiliza Simecolib.
● build: Directorio donde se buildea la librería.
● CmakeList.txt y findSIMECO.cmake
findSIMECO.cmake es un archivo de módulos cuya utilidad es facilitar la búsqueda manual de la
cada uno de los archivos que la librería exporta para su utilización. Como todo archivo de módulo, su
estructura básica está determinada por:
1. Definir el directorio de la librería. La ruta del directorio se configura desde el archivo
Cmake a través de la variable SIMECO_ROOT.
2. Buscar los archivos cabecera y las bibliotecas que se exportan. Se utilizan los comandos
FIND_PATH y FIND_LIBRARY para buscar los archivos de encabezado y biblioteca,
respectivamente. Los resultados se guardan en las variables SIMECO_INCLUDE_DIR y
SIMECO_LIBRARY).
3. Definir la variable booleana SIMECO_FOUND para determinar si la librería fue
encontrada o no. El paquete se considera encontrado si todas las variables que referencian al
directorio include y a la librería contienen resultados válidos. Para definir esta variable, se
usa la macro find_package_handle_standard_args ().
4. Establecer las variables que se utilizarán en el archivo CMake con los resultados de la
búsqueda. SIMECO_INCLUDE_DIRS tendrá los resultados de SIMECO_INCLUDE_DIR y
SIMECO_LIBRARIES se completará con los resultados de SIMECO_LIBRARY.
44
Figura 4.4.2.2: archivo findSIMECO.cmake
El archivo CMakeList original de SIMECO tuvo cambios radicales con la separación del motor de
simulación. Se eliminaron todos los archivos fuente del módulo Core y también todas las
instrucciones para incluir sus dependencias. Además se incluyó la nueva librería con el Core de
simulación (simecolib). Cuando se ejecuta el archivo CmakeList se tiene que definir la variable
SIMECO_DIR con la ruta del directorio de la librería para que el archivo de módulo la encuentre. La
figura 4.4.2.3 representa un pseudocódigo del archivo CmakeList resultante de los cambios
aplicados.
45
Figura 4.4.2.3: nuevo archivo CMakeList.txt de SIMECO luego de generar la librería dinámica.
4.5 Resultados
Se llevaron a cabo pruebas de compilación para realizar un análisis cuantitativo entre la
arquitectura original que desde un principio poseía SIMECO y la que hemos propuesto. Partiendo de
la teoría de que el tiempo de compilación bajaría al convertir el módulo de simulación en una librería
dinámica, ya que no es necesario volver a compilar todo el proyecto ante un cambio en dicho
módulo, se registraron los tiempos de compilación de la arquitectura original y la nueva para:
1. Compilar SIMECO
2. Agregar un variable privada en una clase que utiliza el idom PImpl
3. Incluir la técnica de ruido speckle
Los datos obtenidos se reflejan en la siguiente tabla:
46
ITEM SIMECO SIMECO CORE SIMECO INTERFAZ MEJORA
1 0:03:43 0:01:31 0:01:44 12,56%
2 0:00:20 0:00:11 - 45%
3 0:02:00 0:00:30 - 75%
La primera vez que se compila el proyecto, sea de forma unificada o con compilaciones separadas,
debieran tener valores similares. Notamos que la propuesta presentada de separar los módulos tiene
una leve mejora que se le atribuye a la utilización de declaraciones anticipadas.
Las mejoras significantes en los tiempos de compilación se pueden apreciar a simple vista cuando se
hacen modificaciones sobre la nueva librería sin afectar a las interfaces que comunica con
aplicaciones terceras. Nuestra implementación evitará la recopilación de todo el proyecto, como lo
hace SIMECO originario, y mejorará drásticamente los tiempos de compilación. En la Figura 4.5.1
se observan los resultados obtenidos.
Figura 4.5.1 Comparación de tiempos de compilación entre SIMECO originario y SIMECO importando la nueva librería
dinámica del Motor de simulación.
47
Por otro lado hay que analizar el rendimiento del motor de simulación en tiempo de ejecución
luego de haber implementado el idiom Pimpl. La indirección adicional que agrega el patrón con el
puntero a la clase body implica una pequeña pérdida de rendimiento.
Se hicieron pruebas para calcular los frames por segundo que se generaban para visualizar la
imagen de ultrasonido tanto con la técnica de generación de speckle en tiempo real como
preprocesado. Los resultados fueron 8 y 9 frames por segundo respectivamente. Si se comparan los
resultados con aquellos obtenidos previamente a esta implementación, se observa que hay una caída
de un frame por segundo. Esta pérdida de rendimiento no debe considerarse relevante ya que no
disminuye la interactividad con el usuario y además considerando que los frames aumentarán
drásticamente si se implementa el algoritmo en GPU.
48
Capítulo 5: Integración de Modelo de Superficie
En este capítulo se mencionará y explicará una nueva forma de simular imágenes de
ultrasonido en tiempo real a partir de un modelo de superficies. En principio se describe cómo es el
modelo y por qué es importante incluirlo. Luego se describe el procedimiento de implementación
para poder incluirlo de manera efectiva. Se finaliza el capítulo realizando un análisis comparativo
contra el modelo de volúmenes que implementa SIMECO.
5.1 Modelo de Superficies
Este modelo propuesto por Rubi et al en [17] tiene como núcleo un algoritmo de lanzamiento
de rayos. Las ondas de ultrasonido se suponen como rayos que se comportan de manera consistente
con leyes de física conocidas. Los rayos se rastrean desde el transductor hasta la escena donde se
encuentran los modelos de malla de los órganos humanos. Cada tejido tiene un conjunto de
propiedades que describen sus características mecano-acústicas, como la impedancia acústica,
necesaria tanto para la física de los rayos como para la simulación de dispersión.
Cuando un rayo interseca una malla con un ángulo de incidencia θinc, se refracta en un ángulo
θrefr y se refleja en un ángulo θrefl (Figura 5.1.1). Estos ángulos se calculan usando la Ley de Snell.
Figura 5.1.1: onda intersectando una malla
La intensidad de las nuevas ondas están dadas por las ecuaciones de Fresnel. Usando estas
ecuaciones, un algoritmo recursivo es responsable de crear el rango de rayos comenzando desde el
transductor. Puesto que cada rayo crea dos rayos en cada impacto, la cantidad de rayos emitidos crece
49
exponencialmente con la profundidad de la recursión. Para tener en cuenta el grosor del transductor,
que crea efectos no despreciables, se inician varias capas de rayos en diferentes pasos de elevación
para cada uno de los elementos del transductor. Los ecos recibidos por el transductor consisten en un
término de reflexión y un término de retrodispersión. El término de reflexión se puede calcular en
cada golpe durante la fase de emisión de rayos del algoritmo. En este modelo, las reflexiones se
consideran como especulares, difusas o una combinación de ambas. Se usa un factor para describir la
rugosidad de la interfaz, donde 0 describe una superficie completamente difusa e infinito corresponde
a una superficie perfectamente especular. Para amplificar pequeñas reflexiones, Burger propone un
coeficiente de mejora α [14].
El Backscattering o retrodispersión se produce en cada punto de muestra a lo largo del rayo y
se calcula utilizando un método basado en convolución propuesto por Meunier [18]. La
retrodispersión recibida por el transductor se puede escribir como
IBi (l) = i (l) * (P )(l) ⊗ S (x, y, z)
Siendo la intensidad en un punto a lo largo del rayo, P una función de dispersión I i (l)
puntual (PSF) y S una función que describe los scatterers en cualquier punto del espacio para un
tejido dado. La PSF se modela como un gaussiano 3D modulado por una función de coseno. Tres
parámetros, σx, σy y σz, dan forma al perfil del haz en direcciones axial, lateral y de elevación,
respectivamente.
La función S que describe los scatterers se define con tres parámetros, que se dan para cada
tejido. Un par (μ, σ) describe la distribución normal de las amplitudes del scatterer, mientras que un
tercer parámetro ρ es la densidad del scatterer, que proporciona un umbral de probabilidad por
encima del cual un scatterer proporcionará una contribución de imagen. [14].Una vez que se calcula
la información de reflexión y dispersión, cada línea de exploración de eco se crea al agregar ambos
términos.
Para generar la imagen final se realizan algunos pasos de postprocesamiento. Se elabora una
operación de valor absoluto sobre las líneas de exploración para aproximar una operación envolvente;
un paso de conversión de escaneo se usa para modelar un transductor curvo; y se realiza una etapa de
compresión logarítmica para reducir el rango dinámico de la imagen.
50
Es necesaria la descripción de escena donde cada malla corresponde a un tejido diferente.
Cada tejido tiene dos materiales asociados, material interno y externo. Cada material tiene seis
parámetros que definen sus propiedades físicas: impedancia acústica, atenuación de la señal,
especularidad y tres valores estadísticos que dan forma a la textura de dispersión. La simulación
también requiere dos parámetros que detengan el algoritmo recursivo de difusión de rayos: un nivel
máximo de profundidad y un umbral mínimo de intensidad. También se debe proporcionar una
posición del transductor, orientación y material de partida.
5.2 Motivación para incorporar el Modelo de Superficies
Una de las principales desventajas de los modelos basados en volumen es la imposibilidad de
cubrir todo el rango de efectos que se pueden crear con los enfoques generativos. Por ejemplo aplicar
deformaciones en tiempo real está imposibilitado por el conjunto de datos que no aprovechan al
máximo las capacidades de GPU. Por este motivo es importante incluir en SIMECO un nuevo
modelo basado en mallas propuesto por Rubi et al en [17].
5.3 Arquitectura de Burger
Burger es un sistema que emula imágenes de ultrasonido en tiempo real utilizando un motor
de simulación basado en superficies. Este sistema fue implementado por Rubi, y está conformado
principalmente por las siguientes clases:
Clase Descripción Interfaces
scene
Carga la escena (construyendo
las mallas de los tejidos a partir
de un archivo de configuración)
y el transductor.
Obtener la lista de segmentos por cada elemento del transductor. Distancia entre dos puntos de un segmento.
51
rfimage
Imagen de radiofrecuencia.
Encargada de almacenar los ecos
resultantes del ultrasonido
colisionando con los tejidos.
Get: ● Tiempo delta que representa
un píxel Aplicar convolución Aplicar envolvente Aplicar un postprocesamiento.
transducer
Contenedor de los elementos del
transductor. Define el número y
ancho de elementos del
transductor, el espacio entre los
elementos adyacentes entre si y
cuales de ellos son los activos.
Obtener elementos del transductor.
main
Programa principal. Obtiene
como resultado una imagen de
ultrasonido.
Figura 5.3.1: Vista general de Burger. Muestra las conexiones entre componentes para generar una imagen de
ultrasonido.
52
5.4 Incorporación del modelo a SIMECO
Para incluir este nuevo modelo a SIMECO el proceso de desarrollo fue dividido en dos
etapas: la construcción de una librería dinámica para el nuevo modelo de simulación y la adaptación
del módulo interfaz para incorporar y visualizar ejercicios de mallas de superficie.
5.4.1 Construcción de la librería dinámica
Se realizaron modificaciones estructurales dentro del proyecto y también se modificó el
archivo de configuración de CMake para que pueda ser compilado como una librería dinámica.
El archivo main.cpp fue re-implementado como una nueva clase llamada burger. Puesto que
esta clase se encarga de administrar la simulación, incluye a una gran cantidad de archivos y librerías
propias de la implementación que se pretenden ocultar a terceros. Ya que esta clase será una de las
interfaces de la librería con el exterior, se tiene que ocultar su implementación y para ello se aplica el
idiom Puntero Opaco. Como se explicó en el capítulo anterior, este patrón crea una clase pública, en
este caso burger, y una clase body denominada burgerImpl. La figura 5.4.1.1 muestra la
instanciación del patrón en la clase burger.
Figura 5.4.1.1 patrón Pimpl aplicado a la clase burger.
53
Se sumaron nuevas clases que amplían la funcionalidad del modelo, estas son:
Class Descripción
Renderer El objetivo principal de esta clase es
actualizar el buffer con la información de la
imagen ultrasonido, dependiendo de la
posición del transductor. El resultado de
esta actualización es un puntero a char que
contiene la imagen de ultrasonido en
formato RGBA.
InputManager Esta clase es la encargada de obtener los
input del teclado, y de esta manera realizar
una traslación del transductor en las
coordenadas X, Y y Z.
BurgerClient Es la clase que el programa externo tendrá
que heredar para comunicarse con la librería
El único cambio radical que se realizó sobre el archivo de configuración fue el reemplazo de
la sentencia:
ADD_EXECUTABLE (burgercpp ${burgercpp_SRC})
por ADD_LIBRARY(burger SHARED {SRC}),
de esta manera el motor de simulación se convierte en una librería de tipo dinámica.
En el árbol de directorios se crea la carpeta Include en la cual se van a incluir los archivos burger.h y
burgerClient.h para compartir con aplicaciones terceras. Por último, se tiene que crear un archivo de
módulo findBURGER.cmake del mismo modo como se hizo con findSIMECO.cmake. La figura
4.4.1.2 muestra el archivo de modulos creado para facilitar la búsqueda manual de la cada uno de los
archivos que la librería exporta.
54
Figura 5.4.1.2: Archivo findBURGER.cmake
5.4.2 Actualización del módulo Interfaz
Una segunda etapa de desarrollo consistió en incluir el nuevo modelo basado en superficies
dentro SIMECO.
Se añadieron clases nuevas que facilitan la comunicación entre el modelo de mallas y la
interfaz de SIMECO. Estas clases fueron agregadas siguiendo el diseño original de la relación entre
interfaz con el modelo de volumen, haciendo uso de la herencia que abstrae cada uno de los
ejercicios que pueden ser ejecutados. En la siguiente tabla se especificará cada una de las clases que
fueron agregadas:
55
Class Descripción
BurgerThead
Esta clase hereda de la clase burgerClient. El
objetivo principal de esta clase es inicializar un
modelo de mallas con sus respectivos archivos
de configuración y ejecutarlo en un thread
distinto al que utiliza la interfaz.
ExeciseMesh
Esta clase hereda ExerciseNode. El objetivo
principal de esta clase es generar un ejercicio
correspondiente al modelo de mallas. Se debe
implementar el método start(), el cual crea una
nueva instancia de BurgerThread y cuando éste
actualiza el frame (el cual contiene la
información de la simulación) por medio de la
señal frameFinished, se comunicara con
UltrasoundLabel quien será la encargada de
mostrar la matriz resultante en la interfaz.
ExercisePMesh
Esta es una herencia de ExeciseMesh, la cual
fue diseñada para ejercicios de práctica
correspondientes al modelo de mallas. Esta
clase está pensada para que en un futuro, si se
desean agregar ejercicios básicos y de medición
simplemente se deba crear una nueva clase
similar con las configuraciones
correspondientes al ejercicio.
En la figura 5.4.2.1 se puede apreciar el resultado de incluir las nuevas clases en el diagrama
de clases del módulo interfaz.
56
Figura 5.4.2.1: diagrama de clases parcial del módulo Interfaz
El archivo CmakeList de SIMECO debe incluir la librería de la misma forma que hace con el otro modelo, las sentencias para a agregar son:
find_package(BURGER REQUIRED) if (BURGER_FOUND) include_directories(${BURGER_INCLUDE_DIR}) target_link_libraries(interfaz ${BURGER_LIBRARIES}) endif()
cuando se ejecuta el archivo CmakeList se tiene que definir la variable BURGER_DIR con la ruta del directorio de la librería para que el archivo de módulo la encuentre.
57
Finalmente la figura 5.4.2.2 muestra una vista general de cómo se comunican las entidades dentro de la librería y cómo se desarrolla el nexo de ésta con SIMECO.
Figura 5.4.2.2: vista general que muestra la relacion entre burger con SIMECO
5.5 Comparación entre los modelos implementados en SIMECO
La simulación de procesos físicos implica modelar los fenómenos físicos acordes, algunos de los
cuales no se entienden completamente o resultan demasiados complejos para modelarlos de manera
eficiente. Como consecuencia se obtiene modelos simplificados o incompletos que no pueden imitar
correctamente los fenómenos del proceso modelado. Para la validación y comparación de modelos
para la simulación de imágenes de ultrasonido, la dificultad no solo radica en los fenómenos físicos,
sino también en el modelado de la forma y las propiedades de los tejidos además de los procesos
aleatorios de dispersión y ruido. Debido a estas limitaciones, no es posible obtener imágenes 100%
realistas y las evaluaciones bajo este criterio fracasarán. Entonces hay que definir la simulación en
términos de realismo aceptable o adecuado y para ello primero hay que definir cuales son los
criterios.
La validación se divide en tres partes: el realismo percibido, la precisión de los resultados y el
rendimiento en cuanto a framerate. Existen varios factores que impactan directamente sobre estas
características. Se pueden identificar:
58
● La cantidad de rayos: Aumentar o disminuir la cantidad de rayos afecta el tiempo de
renderizado y artefactos como el enfoque.
● Tamaño del modelo: Para el caso del modelo de superficie, una geometría altamente detallada
se compone de una cantidad más elevada de triángulos, esto se traduce a un número mayor de
colisiones y por consiguiente mayor cantidad de cálculos que afectan a la performance.
● Efectos simulados: artefactos como la refracción, deformación y ruido speckle generan un
mayor número de cálculos que pueden afectar negativamente al rendimiento; ajustar su
calidad u omitirlos es una alternativa para mejorar el rendimiento.
La combinación óptima de estos factores es relativa a los requisitos y limitaciones de hardware
disponibles. Existe un trade off entre precisión e interactividad. Cuanto más interactivo se pretende
ser, se simulan menos efectos y se disminuye el número de rayos, lo que da como resultado imágenes
nítidas y planas. En sentido contrario, cuando se busca mayor precisión, las sombras, reflejos y
estructuras se ven borrosas lo que resulta ser una imagen más realista.
Figura 5.5.1: Trade off entre interactividad y precisión
Al comparar el modelo de volúmenes contra el modelo de mallas pudimos detectar los siguientes
aspectos importantes:
● El modelo de volúmenes muestra un corte del modelado 3D obtenido a partir de las imágenes
de CT, esto simula estructuras anatómicas como realmente son. En contraparte el modelo de
mallas capta el tiempo que pasa en recibir un eco y ésta es la forma en que funciona un
ecógrafo real.
● La atenuación en el modelo de volúmenes se calcula a partir de aplicar un decaimiento lineal
sobre el volumen generado a partir de las imágenes de CT. En el Modelo de mallas la
atenuación es una propiedad que puede ser configurada.
● El modelo de volúmenes no puede simular artefactos dependientes de la vista, como la
refracción. El modelo de mallas sí tiene en cuenta la refracción al cambiar la dirección de las
ondas durante se realizan los cálculos.
59
Todos los fenómenos físicos incorporados en el modelo de mallas generan más artefactos de las
imágenes de ultrasonido como la refracción y la distorsión de rango mostrando imágenes más
precisas. Sin embargo trae aparejado un notable decaimiento de performance como para mantener la
interactividad mínimamente requerida.
Se realizaron pruebas de simulación con dos ejercicios del modelo de mallas.
El primero compuesto por dos mallas, un cuadrado de material grasa y una bola de material hueso. Al
ser pocos elementos relativamente sencillos de modelar con triángulos se logró mantener en
ejecución una media de 4 frames por segundo. Cuando se probó con las mallas que modelan la
anatomía humana los frames por segundo bajaron a menos de 1 debido a la complejidad en el
modelado de los tejidos. Si bien la calidad y precisión de la imagen mejoran en gran medida como se
muestra en la figura 5.5.2, el modelo de mallas no puede competir contra lo 10 frames por segundos
que propone el modelo de volumen para mantener una interactividad respetable.
Sin embargo los datos obtenidos no pueden considerarse concluyentes ya que se están ejecutando los
modelos sobre CPU cuando el máximo potencial de ambos modelo de se puede lograr con la
paralelización en GPU.
Figura 5.5.2: Comparación de imagen de ultrasonido de Receso hepatorrenal generada por ambos modelos. a) Imagen
real b) Modelo de volumen c) Modelo de superficies
60
Capítulo 6
6.1 Conclusiones
En el transcurso del proyecto se establecieron tres puntos elementales a destacar.
Con la integración del modelo de ruido speckle en tiempo real se observó que el rendimiento
de la performance aumento debido a la disminución del consumo de memoria durante la ejecución y
del tiempo de carga de los ejercicios.
En la reestructuración de la arquitectura se implementó una librería dinámica del módulo de
simulación, lo que permitió una mejora en los tiempos de compilación y la posibilidad de reutilizar el
motor de simulación como una librería third-party para programas ajenos que necesiten recrear una
imagen de ultrasonido.
El último punto a destacar es la integración efectiva de un nuevo modelo de simulación
basado en mallas, implementando, al igual que en la reestructuración de la arquitectura, una librería
dinámica. Con dicho proceso se amplió la complejidad del simulador al incorporarse un nuevo
modelo que genera imágenes más reales como resultado de una mejora en la simulación de los
fenómenos físicos, a costa de una potencial disminución significativa de interactividad. No se pueden
establecer como resultados concluyentes a causa de que todos los procesos son realizados en CPU,
cuando se obtienen resultados considerablemente mejores con GPU.
6.2 Trabajos futuros
Los próximos objetivos deben centrarse en la implementación de GPU, ya que todos los
procesos de simulación son realizados en CPU, lo que generan resultados por debajo de los 30 fps
propuestos por el estándar. Dicha implementación es una solución posible gracias a que en los
últimos años, con el desarrollo de GPU masivamente paralelas, los tiempos de renderización se han
reducido considerablemente, lo que permite el desarrollo de escenarios de casos de capacitación más
adecuados.
61
Además es necesario mejorar la representación y comportamiento de órganos y tejidos en la
simulación de imágenes de ultrasonido aplicando modelos 3D deformables. Los modelos actuales, en
su mayoría no consideran las propiedades mecánicas de los tejidos y su deformación al interactuar
con ellos, es por eso que se buscará desarrollar modelos con estas propiedades manteniendo los
requisitos de performance impuestos por la ejecución en tiempo real de los simuladores de
ultrasonido. Esto implicaría basarse en estudio de simulación de imágenes de ultrasonido a partir de
modelos tridimensionales deformables para la representación de objetos que cambian de forma (ej.
debido a presión) o que tienen movimiento (ej. latido del corazón, respiración).
62
Bibliografía [1] Martin A Makary, Michael Daniel. “Medical error—the third leading cause of death in the
US”. BMJ 2016;353:i2139.
[2] Organización Mundial de la Salud, Organización Panamericana de la Salud. Estudio “IBEAS:
PREVALENCIA DE EFECTOS ADVERSOS EN HOSPITALES DE LATINOAMÉRICA”. 2008
[3] R. Lewiss, B. Hoffmann, et al (2014). Point-of-Care Ultrasound Education: The Increasing
Role of Simulation and Multimedia Resources. JUM January 2014 33:27-32;
doi:10.7863/ultra.33.1.27.
[4] a) Salen P., O'Connor R., Passarello B., Pancu D. "Fast education: A comparison of teaching
models for trauma sonography". The Journal of Emergency Medicine, Vol.20, No4, pp. 421-425
(2001).
b) Knudson M., Sisley A. "Training residents using simulation technology: Experience with
ultrasound for trauma". The Journal of Trauma: Injury, Infection, and Critical Care, Vol.48, No4
(2000).
[5] Knudson M., Sisley A. "Training residents using simulation technology: Experience with
ultrasound for trauma". The Journal of Trauma: Injury, Infection, and Critical Care, Vol.48, No4
(2000).
[6] UltraSim. http://www.medsim.com/ultrasim.html.
[7] Shams R., Hartley R., Navab N., “Real-Time Simulation of Medical Ultrasound from CT
Images”, Medical Image Computing and Computer-Assisted Intervention – MICCAI 2008, Lecture
Notes in Computer Science, Vol. 5242, pp. 734–741 (2008).
[8] Kutter O., Karamalis A., Wein W., Navab N., “A GPU-Based Framework for Simulation of
Medical Ultrasound”, Medical Imaging 2009: Visualization, Image-Guided Procedures, and
Modeling, Proc. of SPIE Vol. 7261, 726117(2009).
63
[9] a) Jensen J., Svendsen N. " Calculation of pressure fields from arbitrarily shaped, apodized,
and excited ultrasound transducers". IEEE Transactions on ultrasonics, ferroeletrics and frequency
control, Vol39, No2 (1992).
b) Jensen J., "Field: A program for simulating ultrasound systems," in [10th Nordicbaltic
Conference On Biomedical Imaging, Vol. 4, Supplement 1, Part 1], 351-353, Citeseer (1996).
[10] D'Amato J., Lo Vercio L., Rubi P., Vera E., Barbuzza R., Del Fresno M., Larrabide I.
"Efficient scatter model for simulation of Ultrasound images from Computed Tomography data". in
[11th International Symposium on Medical Information Processing and Analysis (SIPAIM 2015)].
SPIE Vol.9681, 968105 (2015).
[11] Rubi P., Vera E., Larrabide J., Calvo M., D'Amato J., Larrabide I. "Comparison of real-time
ultrasound simulation models using abdominal CT images". in Bibliografía 78 [12th International
Symposium on Medical Information Processing and Analysis (SIPAIM 2016)]. SPIE Vol. 10160
1016009-1 (2016).
[12] Maurice R., Ohayon J., Frétigny Y., Bertrand M. "Noninvasive vascular elastography
theorical framework". IEEE Transactions on medical imaging, Vol.23, No2 (2004).
[13] Hernán Claudio Külsgaard “Desarrollo de herramientas de procesamiento de imágenes para
simulación de ultrasonido”. Trabajo Final de la carrera de grado de Ingeniería de Sistemas de la
Universidad Nacional del Centro de la Provincia de Buenos Aires.(2017).
[14] Bürger B., Bettinghausen S., Rädle M., Hesser J. " Real-Time GPU-Based Ultrasound
Simulation Using Deformable Mesh Models". IEEE Transactions on medical imaging, Vol.32, No3
(2013).
[15] CMake documentation. http://www.cmake.org/documentation/
[16] Vallejo Fernández D. Angelina C.M “Desarrollo de videojuegos: un enfoque práctico. Vol 3,
Técnicas avanzadas”. (2015).
[17] Rubi P., Manterola H. L.,Fernandez Vera E., Díaz A., Larrabide I., “Modelling vascular
structures in real-time abdominal ultrasound simulation” Trabajo sin publicar - en revisión.
64
[18] Meunier and M. Bertrand, “Ultrasonic texture motion analysis: theory and simulation,” IEEE
transactions on medical imaging 14, 293–300 (1995).
65
Anexo
Diagrama de clases del módulo Core
66
Diagrama de clases del módulo Interfaz
67
top related