Informacion interesante
La siguiente figura muestra una reconstrucción tridimensional del corazón, obtenida como resultado del trabajo de un tomógrafo moderno:

Para la escala, el grosor del bulbo aórtico es de 3.2 cm, ¡solo piense! Sin embargo, cuando las personas tienen problemas cardíacos debido a los vasos sanguíneos, por lo general, no estamos hablando de problemas tan grandes. La imagen muestra que el corazón está rodeado de vasos más pequeños, y algunos de ellos se ramifican directamente desde las arterias grandes. Estas son las llamadas arterias coronarias que alimentan el corazón directamente con sangre. Si se produce un estrechamiento de la luz (estenosis) en ellos, por ejemplo, debido a la formación de calcio, entonces el flujo sanguíneo disminuye. Cuando se pronuncia la estenosis, se produce necrosis tisular, en otras palabras, un ataque cardíaco. A continuación, hablaré sobre nuestro enfoque para calcular los límites de los vasos sanguíneos, que como resultado le permite encontrar automáticamente el estrechamiento y darles una estimación.
Para comprender el material, debe tener una comprensión superficial del volumen, los vóxeles y sus intensidades. Puede averiguarlo leyendo el comienzo de
este artículo .
Para evaluar el estrechamiento de un vaso, necesitamos conocer la luz del vaso o su borde interno. Para hacer esto, al menos detecta todo el calcio. También encontramos el límite exterior, porque permite estimar el grosor de la pared, lo que también es útil. Para comenzar, echemos un vistazo al esquema completo de detección de límites, y luego analizaremos cada etapa en detalle:
Trazando la línea central
La etapa más difícil en términos de implementación (al menos tomó más tiempo). El método se basa en el uso de una matriz de Hesse (Segmentación de embarcaciones de múltiples escalas utilizando la mejora de la matriz de Hesse). Más detalles en el
artículo ya mencionado.
Rebanar
Tenemos solo una línea central y necesitamos intensidades de voxels espacialmente dependientes con las que se pueda trabajar convenientemente. Para conseguirlos, se va una "pila" de rebanadas. Para empezar, los puntos se establecen en distancias fijas en la línea central. Luego se construye una perpendicular a partir de cada punto

. Después es la segunda perpendicular

. Donde

- la dirección de la línea central en un punto. Ambas perpendiculares están normalizadas. En cada punto

vector de línea central

Forme un sistema de coordenadas 2D. Por lo tanto, se forman rodajas:
La posición del vóxel se define como

donde

aqui

Son las coordenadas reales del vóxel, k es el número de corte. Fórmula inversa para coordenadas reales:

. Al pasar a un nuevo sistema de coordenadas, el espacio formado por los cortes se simplifica:
Lo que necesitamos!
Construcción del borde exterior del buque.
Echemos un vistazo al diagrama:
Cortamos nuestra pila de rebanadas obtenidas en la etapa anterior en ocho planos (similar a cortar un pastel) y realizamos todos los cálculos en el espacio de planos:
Si muestra los valores normalizados de las intensidades de los vóxeles que golpean el plano de corte, obtenemos la siguiente imagen:
Para detectar los límites de la embarcación, el enfoque clásico (detección de bordes por gradiente) se utiliza junto con la búsqueda de la ruta. Esquema:
1. Aplicar suavizado gaussiano con un valor pequeño

para suprimir el ruido:
Para un punto con coordenadas

:

donde

devuelve el valor de intensidad en un punto

; r generalmente toma el valor

(

- redondeo);

- coeficiente de suavizado.
2. En cada punto encontramos el gradiente y su valor, los cálculos se llevan a cabo con valores de intensidad suavizados:

,
donde

- derivados privados. Se encuentran por el método de diferencia finita:

,
donde

- intensidad en un punto

Después de alisar.
Luego necesitamos la dirección del gradiente

(

Es la normalización del vector) y el valor del gradiente.

(

Es la longitud del vector)
3. La dirección del gradiente se traduce en grados o radianes:

(atan2 () es la función de la tangente del arco en C ++, que no debe confundirse con atan ()), luego redondeamos el ángulo para que pueda tener 4 valores en incrementos de 45 grados, es decir arriba y abajo se consideran la misma dirección:
4. Realizar la supresión de no máximos. Si el valor del gradiente

al menos en uno de los dos puntos vecinos (de acuerdo con la dirección del gradiente) es mayor o igual que el valor del gradiente en el punto actual, entonces dicho punto no puede pertenecer al límite:
5. Todos los vóxeles restantes se consideran límites. Según el valor del gradiente, el umbral de calcio (que no está disponible de inmediato) y la proximidad al centro "vertical", a cada punto se le asigna un costo determinado (cuanto más brillante es el vóxel, mayor es su prioridad al buscar una ruta):
De esta forma, los límites de la embarcación se definen de manera casi única.
6, 7. Para construir límites, usamos la búsqueda del camino. Los puntos extremos más cercanos con el menor costo se toman como inicial y final. Para buscar una ruta, utilice una búsqueda simple de amplitud, que selecciona los puntos límite de menor costo. Los saltos también están disponibles, pero su precio es alto. Los límites superior e inferior del recipiente se buscan por separado, y luego se les aplica el suavizado:
Este procedimiento se realiza para cada plano, lo que da como resultado anillos de dieciséis segmentos para cada corte en la pila. Estos anillos forman los bordes exteriores del vaso.
Como puede ver en la imagen, hay áreas en las que los bordes se detectan incorrectamente. Esto se debe a la presencia de calcio, que da como resultado la detección de límites de calcio en lugar de límites de vasos. Para evitar que esto suceda después de la primera detección de límites, es necesario determinar el umbral de calcio (más sobre esto más adelante), y luego realizar una segunda detección de límites, ignorando los vóxeles relacionados con el calcio. Entonces obtenemos:
Buen resultadoDetección de umbrales de bordes internos, externos y umbral de calcio.
Una vez que se conoce el límite externo, necesitamos recopilar información estadística. A saber, las intensidades de todos los vóxeles que están dentro del recipiente.
Detección de umbral
Ahora considere la maximización de la expectativa del algoritmo de agrupamiento (en lo sucesivo, EM). Comencemos con la función de distribución normal: se caracteriza por una expectativa matemática

y desviación estándar

. Así es como afectan el tipo de distribución:
Supongamos que tenemos datos (puntos) que provienen de una fuente "amarilla" y de una fuente "azul":
Luego, usando fórmulas estándar, encontramos fácilmente la media y la desviación estándar para cada fuente. Fórmulas para la fuente "a":


Pero, ¿qué sucede si conocemos la cantidad de fuentes, pero no sabemos qué puntos pertenecen a qué fuente? ¿Qué pasa si tenemos una imagen así?
Si alguien vino y nos dijo los parámetros de distribución, entonces podríamos calcular fácilmente la probabilidad de que cada punto pertenezca a cada una de las fuentes. La probabilidad de que el punto pertenezca a la fuente "a":

donde


Y si necesitamos calcular los parámetros de origen, conociendo las probabilidades:


Por lo tanto, se obtiene un círculo vicioso: si supiéramos los parámetros de las fuentes, calcularíamos qué punto pertenece a qué fuente, pero no conocemos los parámetros. Y si supiéramos qué punto pertenece a qué fuente, calcularíamos sus parámetros, pero no sabemos qué punto pertenece a qué fuente. El equilibrio entre estos hechos es exactamente lo que hace el algoritmo EM.
Al inicio, EM recibe algunos parámetros predefinidos para las fuentes, que simplemente se pueden seleccionar al azar. Obviamente, si los parámetros son conocidos, entonces podemos calcular la probabilidad de que cada punto pertenezca a cada una de las fuentes. Ahora que se conocen las probabilidades, podemos calcular nuevos parámetros más precisos. Luego comienza de nuevo, pero con nuevos parámetros. Después de cada ciclo, los parámetros de las fuentes son cada vez más precisos.
¿Cómo podemos usar este conocimiento en relación con los vasos? Echemos un vistazo a la estructura de uno de ellos:
En los diagramas, este punto generalmente se omite, pero las formaciones de grasa y calcio también pueden estar presentes en el vaso. Por lo tanto, cada vóxel pertenecerá a uno de los tejidos. Después de los experimentos resultó que es suficiente hacer las siguientes divisiones:
- gordo
- pared # 1
- pared # 2
- medio de contraste
- calcio
La distribución de las intensidades de vóxel en cada caso es normal. Es decir Tenemos todo lo que necesitamos para usar EM para encontrar los parámetros de cada fuente.
Los resultados son lo suficientemente buenosLa línea verde es un histograma de intensidades, la línea roja es el modelo matemático resultante.
Ahora que conocemos los parámetros de cada fuente, podemos calcular los umbrales: los valores de las intensidades, en cuya intersección, la membresía de vóxel cambia de una fuente a otra. Estamos interesados en:
1. El umbral del límite exterior de la embarcación. Si la intensidad del vóxel está por debajo de este valor, se considera que no pertenece al vaso en absoluto;
2. El umbral del límite interior de la embarcación. Si la intensidad del vóxel es mayor que este valor, entonces
se refiere a la luz del vaso, es decir a una mezcla de sangre y medio de contraste;
3. El umbral de calcio. Si el valor de la intensidad del vóxel es mayor que este valor, se refiere al calcio.
Construcción del borde interior de la embarcación.
Como siempre, comencemos con el diagrama; los cálculos se realizan para cada segmento.
Si visualiza los datos de acuerdo con los umbrales obtenidos en el paso anterior, obtenemos la siguiente imagen:
El color rojo es la pared del recipiente. Color verde - aclaramiento. El blanco es calcio.
Lo primero que llama la atención es el calcio "colgado", que no está junto a ninguna de las paredes. Esto se considera normal y surge debido al suavizado aplicado por el tomógrafo en sí.
Primero necesita obtener los límites de acuerdo con los umbrales, y para esto se utiliza el algoritmo de cuadrados de marcha. Se puede decir, pasa en dos etapas. Primero, el área se divide por una cuadrícula discreta, y los cuadrados en los que los valores de intensidad son mayores o iguales al umbral se consideran "positivos", el resto se considera "negativo".
Cada vez estaremos en algún tipo de nodo, y necesitamos dibujar un contorno alrededor de los cuadrados "positivos". Para tomar una decisión, consideraremos los signos de cuatro cuadrados vecinos: superior izquierdo, inferior izquierdo, superior derecho, inferior derecho. Excluyendo la simetría, estamos interesados en tres casos.
1. Tres cuadrados de un signo y uno opuesto, el movimiento del contorno se produce en diagonal:
2. Dos cuadrados del mismo signo y dos opuestos, y los cuadrados con el mismo signo están en un lado, el movimiento del contorno es vertical u horizontal:
3. Dos cuadrados del mismo signo y dos cuadrados opuestos con los mismos signos se colocan en lados opuestos:
Este es un caso excepcional, para tomar una decisión, se toma el valor promedio de intensidad en los cuatro cuadrados, y si es mayor o igual al umbral, entonces el centro es positivo, en otros casos es negativo. También es importante qué nodo es actual en este momento:
El algoritmo de cuadrados de marcha construye con precisión y sin ambigüedades un contorno. En el siguiente ejemplo, moví deliberadamente la línea desde el centro del costado para que cada paso fuera claramente visible.
EjemploEspecíficamente, el primer y el segundo caso:
Para cada sección del recipiente, encontramos dos contornos principales: este es el contorno del borde exterior y el contorno del borde interior. Inmediatamente "cortamos" el contorno exterior con nuestro otro contorno exterior, que encontramos al comienzo del artículo al encontrar caminos. Esto se hace para ignorar las ramas de la embarcación. Ignoramos los contornos de calcio que están demasiado lejos de la pared interna, como si no existieran en absoluto, encontramos el resto y los usamos en el futuro. Si el centro del vaso está dentro del calcio, entonces lo cambiamos en la dirección más cercana al circuito de calcio hasta que el centro esté en la luz (en la región verde). Tal centro actualizado, llamaré la posición inicial.
Según el esquema, puede haber dos casos: simple y complejo.
Si la posición inicial es dentro de un circuito cerrado de calcio (por ejemplo, si se instala un stent), entonces igualamos inmediatamente el borde interno de este circuito. Las cosas son más complicadas cuando el centro está fuera del calcio. En este caso, necesitamos expandir el circuito de arranque para que fluya suavemente alrededor del calcio y el borde interno:
Para lograr el resultado deseado, se desarrolló un algoritmo especial basado en ideas utilizadas en motores físicos 2D, en particular la resolución de colisiones de polígonos y el teorema de ejes separados.
Dos conceptos básicos que no se pueden prescindir: para intersectar polígonos convexos, el vector mtv (vector de traducción mínima) es el desplazamiento más pequeño de uno de los polígonos, después de lo cual se detiene la intersección.
También necesitamos los polígonos normales: en 2D son perpendiculares a las caras e indican "fuera":
Para no hacer que el artículo sea extenso, omitiré el resto de los detalles con respecto a los motores físicos. Lo único que noto es que durante cada iteración, cada punto en el contorno acumula la influencia de las fuerzas sobre sí mismo en forma de un vector, y al final de cada iteración se desplaza por la longitud de este vector en su dirección. Considere las fuerzas:
1. Dos fuerzas actúan sobre cada vértice del contorno inicial en la dirección de los vértices vecinos, y las fuerzas son directamente proporcionales a la distancia a estos vértices. Esto hace que el contorno se contraiga y se esfuerce por mantener una forma redondeada;
2. Si el vértice del contorno lateral cayó dentro del contorno inicial, entonces el desplazamiento proporcional al vector vt mtv del vértice se aplica a la cara más cercana del contorno inicial;
3. Si la parte superior del contorno inicial está dentro del contorno lateral, entonces se aplica un desplazamiento proporcional al vértice del vector mtv del vértice a la parte superior del contorno inicial. Esto, junto con el párrafo anterior, no permite que el circuito vaya más allá de los límites de otros circuitos;
4. Si los casos 2 y 3 no funcionaron para el vértice, entonces se le aplica una fuerza en la dirección promedio de las dos normales de las caras adyacentes. Esto asegura el crecimiento del contorno "en amplitud".
Importante: no puede desplazar un vértice o una cara completamente por la longitud del vector mtv; se multiplica por un cierto coeficiente en el rango de 0.2 a 0.8. Los coeficientes para cada fuerza en los casos restantes se seleccionan experimentalmente.
Gracias a este enfoque, encontramos la luz del vaso, teniendo en cuenta el hecho de que el calcio no se adhiere cerca de las paredes. Ahora solo combine los resultados de todas las secciones y obtenga los bordes interno y externo del recipiente:
La aparente inexactitud del borde después del stent es causada por una bifurcación anómala:
El área del borde interior en el corte caracterizará el espacio libre que nos interesa en última instancia. Uso adicional de estos datos considero trivial y no requiere consideración. Finalmente, dejaré la imagen del borde interno exportado en 3D: