Tenho uma tomografia computadorizada com formato de (350, 512, 512) e tamanho de voxel de (2, 1,13, 1,13).
Gostaria de fazer uma interpolação para obter um novo tamanho de voxel de (1,1,1) usando o zoom do scipy.
Aqui está o código que estou usando
volume = np.stack([dcm.pixel_array for dcm in dicom_files]).astype(np.uint16) #3D volume with original data
volume = volume * slope + intercept #convert to Hounsfield Units
full_ct_spacing = [slice_thickness, pixel_spacing[0], pixel_spacing[1]] #shape of a voxel
new_spacing = np.array([1,1,1]) #target spacing
resize_factor = full_ct_spacing / new_spacing #resize factor
volume = zoom(volume.astype(np.uint16), resize_factor, order=1, mode='reflect') #interpolated volume
Eu faço uma nova tomografia computadorizada com um formato de (700, 580, 580), mas quando eu a exponho, os níveis de cinza parecem estar invertidos. O ar é branco e os ossos são pretos.
É devido à função de zoom? Qual é a melhor maneira de interpolar a tomografia computadorizada?
O problema com níveis de cinza invertidos em tomografias computadorizadas ocorre devido a uma incompatibilidade de tipo de dados durante a interpolação com
scipy.ndimage.zoom
. Especificamente,DICOM
valores de intensidade (Unidades Hounsfield) podem ser negativos (por exemplo, ar: -1000) ou positivos (por exemplo, ossos). A conversão desses valores interpolados paranp.uint16
faz com que valores negativos sejam retomados (por exemplo, -1000 se torna 64536), levando a uma visualização incorreta.Para evitar isso, sempre execute a interpolação em tipos de dados de ponto flutuante (
np.float32
ounp.float64
) para evitar problemas de estouro ou corte. Após o processamento, converta os dados de volta para um tipo inteiro apropriado, comonp.int16
, se necessário. Isso garante uma visualização precisa da tomografia computadorizada, onde o ar parece escuro e os ossos brilhantes.Se você precisa de melhor controle ou precisão para interpolação de imagens médicas, considere bibliotecas especificamente adaptadas para imagens médicas, como
SimpleITK
ouITK
. Essas bibliotecas lidam com dados de imagens médicas e reamostragem espacial de forma mais eficaz.Aqui está um exemplo usando
SimpleITK