Resumo dos métodos de leitura e pré-processamento de dados de imagens médicas

231ca03367582e02c9b115cf7f9aaa64.png

来源:深度学习爱好者
本文约2000字,建议阅读9分钟
本文主要介绍常见的医学图像读取方式和预处理方法。

Pessoalmente, acho que, por exemplo, no sentido da segmentação de imagens médicas e, mais especificamente, segmentação de órgãos abdominais ou segmentação de tumores hepáticos, você precisa dominar dois aspectos do conhecimento:

(1) Métodos de pré-processamento de imagens médicas;

(2) Conhecimento de aprendizado profundo

O primeiro ponto é uma condição necessária para o segundo ponto, porque você precisa saber que tipo de dados são inseridos na rede DL. Este artigo apresenta principalmente métodos comuns de leitura de imagens médicas e métodos de pré-processamento.

Nos últimos dois dias, revisei os métodos de leitura e pré-processamento de dados de imagens médicas e vou resumi-los aqui.

Para analisar dados de imagens médicas com base em aprendizado profundo, como detecção de lesões, tumor ou segmentação de órgãos, o primeiro passo é ter uma compreensão geral dos dados. Mas quando comecei a segmentação de imagens médicas, estava muito confuso e não sabia o que deveria fazer, que conhecimento precisava preparar e só agora estabeleci um sistema de conhecimento simples. Na minha opinião, por exemplo, na direção da segmentação de imagens médicas, e mais especificamente, segmentação de órgãos abdominais ou segmentação de tumores hepáticos, dois aspectos de conhecimento são necessários: (1) métodos de pré-processamento de imagens médicas; (2) conhecimento de aprendizado profundo. O primeiro ponto é uma condição necessária para o segundo ponto, porque você precisa saber que tipo de dados são inseridos na rede DL.

Este artigo apresenta principalmente métodos comuns de leitura de imagens médicas e métodos de pré-processamento.

1. Leitura de dados de imagens médicas

1.1 Software ITK-SNAP

Primeiro, deixe-me apresentar o software de visualização de imagens médicas ITK-SNAP, que pode ser usado como uma ferramenta para experimentar intuitivamente a estrutura 3D de imagens médicas e também pode ser usado como uma ferramenta de rotulagem de quadros de segmentação e detecção. É grátis e fácil Amway: endereço de download oficial do ITK-SNAP: http://www.itksnap.org/pmwiki/pmwiki.php. Além disso, o mango (http://ric.uthscsa.edu/mango/) é outro software de visualização muito leve, você também pode experimentá-lo. Eu geralmente uso o ITK-SNAP.

Para saber como usar o ITK-SNAP, você pode consultar esta postagem do blog do chefe, que é muito concisa:

JunMa: Introdução ao ITK-SANP:

https://zhuanlan.zhihu.com/p/104381149

8e90e98e0aad3752fe29facd58831537.jpeg

Interface de ajuste ITK

Antes de tudo, é necessário esclarecer a direção correspondente ao corpo humano. As três janelas correspondem às três seções. A relação correspondente é mostrada na figura abaixo, e o índice alfabético pode ser usado. Por exemplo, a imagem superior esquerda corresponde à superfície de RALP, que é o plano de corte visto da sola do pé até a cabeça (ou seja, a direção z), e as outras duas imagens são semelhantes.


ddc664ebe617e81aa28a56472ff0081f.jpeg

A seção vermelha é o plano sagital, a seção roxa é a seção coronal e a seção verde é a seção transversal

Você também pode importar os resultados da segmentação ao mesmo tempo para comparação e observação.

dez451acc033fb35163e19d6a2264e31.jpeg

Também pode ser ajustado para locais onde a rotulagem não é rigorosa. Claro, a maioria das coleções públicas são muito boas. Rotular a si mesmo é semelhante. (Se a exibição não estiver clara e o contraste for muito baixo, você precisará ajustar a largura e o nível da janela no software)

1.2 SimpleITK

Sabemos que as imagens médicas mais comuns são a TC e a RM, que são dados tridimensionais, o que é mais difícil do que dados bidimensionais. E os dados salvos também têm muitos formatos, os mais comuns são .dcm .nii(.gz) .mha .mhd(+raw). Esses tipos de dados podem ser processados ​​com o SimpleITK do Python, e o pydicom pode ler e modificar arquivos .dcm.

O objetivo da operação de leitura é extrair os dados do tensor dos dados de cada paciente. Use o Simpleitk para ler os dados .nii acima como exemplo:

 
  
import numpy as np
import os
import glob
import SimpleITK as sitk
from scipy import ndimage
import matplotlib.pyplot as plt  # 载入需要的库


# 指定数据root路径,其中data目录下是volume数据,label下是segmentation数据,都是.nii格式
data_path = r'F:\LiTS_dataset\data'
label_path = r'F:\LiTS_dataset\label'  


dataname_list = os.listdir(data_path)
dataname_list.sort()
ori_data = sitk.ReadImage(os.path.join(data_path,dataname_list[3])) # 读取其中一个volume数据
data1 = sitk.GetArrayFromImage(ori_data) # 提取数据中心的array
print(dataname_list[3],data1.shape,data1[100,255,255]) #打印数据name、shape和某一个元素的值


plt.imshow(data1[100,:,:]) # 对第100张slice可视化
plt.show()

Resultado de saída:

 
  
['volume-0.nii', 'volume-1.nii', 'volume-10.nii', 'volume-11.nii',... 
volume-11.nii (466, 512, 512) 232.0

Ele indica que a forma dos dados é (466.512.512) e observe que a ordem correspondente é z, x, y. z é, na verdade, o índice da fatia. x e y são a largura e a altura de uma determinada fatia.

Resultados do gráfico com índice z 100:

a3ab00c6ef0b6797e012efd9b1807e52.jpeg

A mesma fatia é visualizada no ITK-SNAP (observe aqui (x,y,z=(256.256.101)), porque o itk-snap inicia a indexação a partir de 1 por padrão):

4a668d6c83fabee2778a89fd345dadeb.jpeg

Pode-se descobrir que os eixos x superior e inferior são os mesmos, mas a direção do eixo y é invertida para cima e para baixo. Isso se deve aos diferentes métodos de exibição do matplotlib, mas não haverá problema de desalinhamento dos dados lidos .

Para o processamento de dicom e mhd, você pode consultar esta postagem do blog:

Tan Qingbo: Etapas comuns de processamento de imagem de varredura médica:

https://zhuanlan.zhihu.com/p/52054982


2. Pré-processamento de imagens médicas

Esta parte é bastante confusa. Devido às diferentes tarefas e diferentes conjuntos de dados, geralmente os métodos de pré-processamento de dados são muito diferentes. Mas a ideia básica é tornar os dados processados ​​mais propícios ao treinamento da rede. Em seguida, alguns métodos de pré-processamento de imagens bidimensionais podem ser usados ​​para referência, como aprimoramento de contraste, redução de ruído, corte e assim por diante. Além disso, também pode ser utilizado algum conhecimento prévio da própria imagem médica, por exemplo, diferentes doses afins (unidade: HU) em imagens de TC correspondem a diferentes tecidos e órgãos do corpo humano.

49911b7cc9032084e59e11db60ba9921.jpeg

Tecidos e órgãos correspondentes a diferentes doses de radiação

Com base na tabela acima, os dados originais podem ser normalizados :

 
  
MIN_BOUND = -1000.0
MAX_BOUND = 400.0


def norm_img(image): # 归一化像素值到(0,1)之间,且将溢出值取边界值
    image = (image - MIN_BOUND) / (MAX_BOUND - MIN_BOUND)
    image[image > 1] = 1.
    image[image < 0] = 0.
    return image

Também pode ser normalizado/zerado para deslocar o centro de dados para a origem:

 
  
image = image-meam

O processamento de normalização acima é aplicável à maioria dos conjuntos de dados, e algumas outras operações são dispensáveis ​​para dados específicos. Essas operações incluem o MIN_BOUND e MAX_BOUND acima. É melhor consultar os métodos de processamento de código-fonte aberto de artigos excelentes.

Recomenda-se salvar localmente o conjunto de dados pré-processados, o que pode reduzir algum consumo de recursos durante o treinamento. Além disso, as etapas de processamento de aprimoramento de dados, como corte aleatório e transformação linear, ainda precisam ser executadas durante o treinamento.

referência:

https://zhuanlan.zhihu.com/p/77791840

https://zhuanlan.zhihu.com/p/104381149

Tan Qingbo: Etapas comuns de processamento de imagem de varredura médica

编辑:黄继彦

Acho que você gosta

Origin blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/131297634
Recomendado
Clasificación