Medindo o Volume de Lesões de EM em Ressonância Magnética Cerebral

Você recebe uma ressonância magnética cerebral e uma pergunta enganosamente simples: quanta esclerose múltipla existe aqui? As lesões estão bem ali na sequência FLAIR, pequenos pontos brilhantes espalhados pela substância branca, mas “bem ali” não é um número. Contá-las manualmente em 181 fatias, para cinco pacientes, é como desperdiçar um fim de semana inteiro. Este post descreve um pipeline não supervisionado que transforma esses pontos em um único valor: carga lesional em milímetros cúbicos.

TL;DR: Construir um pipeline não supervisionado que segmenta lesões de esclerose múltipla em ressonância magnética cerebral e reporta a carga lesional em milímetros cúbicos.
Stack: Python, SimpleITK, ITK-Elastix, scikit-learn, NumPy
Nível: Avançado
Tempo de leitura: ~6 min

Construí isso para um curso de processamento de imagens 3D, com cinco exames de pacientes, um atlas cerebral probabilístico e um critério de avaliação que atribuía zero absoluto se o notebook gerasse qualquer erro. Sem rótulos de verdade fundamental, sem atalhos. Apenas volumes brutos de T1 e FLAIR e a expectativa de que, ao final, uma planilha com os volumes das lesões fosse gerada.

Elimine o ruído antes de qualquer coisa

A ressonância magnética não chega limpa. O scanner, a respiração do paciente, o calor nas bobinas — tudo isso gera ruído que as etapas seguintes irão confundir com sinal. O problema é um trade-off: filtrar pouco e o ruído persiste, filtrar demais e você apaga as bordas finas que importam para o diagnóstico. Por isso, testei três filtros e usei uma imagem de diferença como árbitro.

O julgamento é simples. Subtraia a imagem filtrada da original e observe o que foi removido:

G = np.abs(arr_original - arr_denoised)

Se G for apenas granulação aleatória, o filtro removeu apenas ruído. Se G mostrar anatomia cerebral nítida, o filtro foi longe demais e deletou estrutura real. O filtro bilateral suavizou de forma muito agressiva. O Non-Local Means parecia ótimo na teoria, mas nunca finalizou em um volume completo em tempo razoável, portanto foi descartado pelo custo computacional. A difusão anisotrópica venceu: ela suaviza intensamente nas regiões planas e praticamente para nas bordas.

Confirmei a escolha visual com SSIM (0,998, estrutura preservada), então a decisão não foi puramente subjetiva.

Alinhe o atlas e o paciente no mesmo espaço

Aqui está o problema central. O atlas probabilístico (mapas que indicam, por voxel, a probabilidade de substância branca, cinzenta ou LCR) vive em um espaço de coordenadas padrão. O cérebro do paciente não: posição diferente, tamanho diferente, forma diferente. Para usar o atlas como guia, é preciso primeiro deformá-lo sobre o paciente — e isso exige registro de imagens.

Esses mapas vivem no espaço MNI, nomeado em homenagem ao Montreal Neurological Institute, que construiu o template fazendo a média de centenas de cérebros saudáveis em uma cabeça canônica. Essa média é exatamente o motivo pelo qual você não pode comparar intensidades diretamente: o brilho do atlas é uma mistura de muitas pessoas, não deste paciente específico.

Portanto, a métrica de similaridade usada é a Informação Mútua, que avalia a consistência estatística entre distribuições de intensidade em vez da diferença direta de pixels. O registro ocorre em duas passagens, do grosseiro ao fino:

# Passagem 1: rígida (translação + rotação)
# Passagem 2: afim (+ escala + cisalhamento)

Qualquer transformação que alinha o T1 do atlas é aplicada de forma idêntica aos mapas de SB, SC e LCR, com interpolação linear para que suas probabilidades de 0 a 1 permaneçam suaves. Para verificar o resultado sem verdade fundamental, usei um tabuleiro de xadrez: intercale blocos das duas imagens e veja se a anatomia flui sem quebras nas costuras. E fluiu.

Encontre os pontos brilhantes na substância branca

A EM é uma doença da substância branca e, na sequência FLAIR, as lesões são hiperintensas — mais brilhantes do que o tecido ao redor. Isso oferece uma estratégia: olhar apenas dentro da substância branca e então procurar o cluster mais brilhante.

O atlas constrói a máscara. Um voxel é considerado substância branca somente se os mapas concordarem fortemente:

mask = (wm > 0.8) & (gm < 0.3) & (csf < 0.2)

As duas condições negativas importam mais do que parecem. Elas excluem voxels próximos ao córtex e aos ventrículos, onde efeitos de volume parcial simulam brilho, e o tecido periventricular é exatamente onde muitas lesões de EM se escondem.

Em seguida, K-Means nas intensidades FLAIR dentro dessa máscara, com K=6. Por que não K=2, lesão versus normal? Porque a substância branca normal já varia em brilho, portanto uma divisão binária empurraria todo voxel levemente brilhante para o grupo de lesão e inflaria a contagem. Com seis clusters, a variação natural se distribui por cinco “buckets” normais e o mais brilhante isola a cauda hiperintensa. Esse cluster, refinado por um limiar de intensidade adaptativo e limpo de pontos menores que 3 voxels, constitui a lesão.

Converta voxels em milímetros

A última etapa é quase anticlimática. Conte os voxels de lesão e multiplique pelo volume de um voxel:

volume_mm3 = np.count_nonzero(lesion_mask) * np.prod(spacing)

Os exames têm espaçamento isotrópico de 1 mm, portanto cada voxel equivale a exatamente um milímetro cúbico e a contagem é o volume. Cinco pacientes, cinco números:

ImagemCarga lesional (mm³)
T01C0114101
T01C0425474
T03C046247
T04C0316239
T05C027927

As lesões detectadas se agruparam ao redor dos ventrículos, o padrão periventricular que os critérios de McDonald apontam como típico da EM. Não é uma prova, mas é um sinal tranquilizador de que o pipeline encontrou a doença e não artefatos.

O que você fez

Você pegou volumes brutos de T1 e FLAIR, removeu o ruído com difusão anisotrópica, deformou um atlas probabilístico sobre cada paciente com registro rígido e depois afim, restringiu a busca à substância branca confiável e deixou o K-Means revelar as lesões hiperintensas. Em seguida, contou voxels e obteve um número clínico real — carga lesional em milímetros cúbicos — sem rastreamento manual e sem dados de treinamento rotulados. O fim de semana é seu novamente.

Próximos passos

  • Adicione a correção de viés N4: Execute o N4 logo após a filtragem de ruído para equalizar a deriva lenta de intensidade introduzida pelas bobinas. Isso torna o limiar da substância branca muito mais estável entre os pacientes.
  • Substitua K-Means por um GMM: Um Modelo de Mistura Gaussiana fornece pertinência probabilística e suave aos clusters, em vez de rótulos rígidos, o que lida melhor com as bordas difusas das lesões.
  • Valide com um radiologista: Compare os volumes com as segmentações manuais de especialistas usando um Dice score, transformando “parece correto” em um erro mensurável.
  • Experimente o registro deformável: Uma passagem B-spline após a etapa afim fecharia a incompatibilidade cortical que a cascata rígida mais afim deixa para trás.

Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.

Deixe um comentário