Анализ медицинских изображений в Python: Windowing / Применение Windowing
Довольно теории, перейдем к практике. Для примера будет использовать уже знакомый нам снимок КТ.
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.]]
Преобразование выполнено успешно.