Шаг 1 из 3

Довольно теории, перейдем к практике. Для примера будет использовать уже знакомый нам снимок КТ.

filepath = 'volume_pt5/volume-44.nii'
imagedata = nibabel.load(filepath)
array   = imagedata.get_fdata()
array   = np.rot90(np.array(array))

Еще дополнительно нам нужна функция windowed , на вход принимает изображение, ширину и уровень окна.

def windowed(px, w, l):
    px_min = l - w//2
    px_max = l + w//2
    px[px<px_min] = px_min
    px[px>px_max] = px_max
    return (px-px_min) / (px_max-px_min)

Давайте проверим разницу до и после преобразования. Так как у нас сегментации печени и КТ брюшной полости, то будем использовать значения W: 150 L: 30:

print(array[...,50].astype(np.float32))
print()
print(windowed(array[...,50].astype(np.float32), 150, 30))
[[-1024. -1024. -1024. ... -1024. -1024. -1024.]
 [-1024. -1024. -1024. ... -1024. -1024. -1024.]
 [-1024. -1024. -1024. ... -1024. -1024. -1024.]
 ...
 [-1024. -1024. -1024. ... -1024. -1024. -1024.]
 [-1024. -1024. -1024. ... -1024. -1024. -1024.]
 [-1024. -1024. -1024. ... -1024. -1024. -1024.]]

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]

Преобразование выполнено успешно.

Комментарии