0

我目前正在使用 BraTS18 数据集研究超分辨率算法。当涉及到 [-1, 1] 之间的数据规范化时,我遇到了问题。

from tqdm import tqdm
import os
import numpy as np
import SimpleITK as sitk

def load_data(path, length=32, offset=0):
  if length == None:
    my_dir = sorted(os.listdir(path))
  else:
    my_dir = sorted(os.listdir(path)[offset:offset+length])
  data = []
  gt = []
  for p in tqdm(my_dir):
    data_list = sorted(os.listdir(path+p))
    img_itk = sitk.ReadImage(path + p + '/'+ data_list[0])
    flair = sitk.GetArrayFromImage(img_itk)
    data.append(flair)
  data = np.asarray(data,dtype=np.float32)
  data = data[:, 30:120, 30:222, 30:222].reshape([-1, 192, 192])
  return data 

起初我认为这些值在 [0, 255] 范围内,但正如我尝试的那样

data_test = load_data_test(pathHGG, length=None)
np.max(data_test)

我得到了值(32767.0),现在我对 BraTS flair 上的数据值的范围感到困惑。谁能告诉我应该如何执行像素归一化?

4

1 回答 1

0

经过进一步研究,我发现由于 MRI 到 MRI 对比度的偏差,应根据其值对每个数据量(每个 fair 文件)进行归一化。我希望这可以帮助那些偶然发现我的问题的人。这是我的新代码:

def load_data(path, length=32, offset=0):
  if length == None:
    my_dir = sorted(os.listdir(path))
  else:
    my_dir = sorted(os.listdir(path)[offset:offset+length])
  data = []
  for p in tqdm(my_dir):
    data_list = sorted(os.listdir(path+p))
    img_itk = sitk.ReadImage(path + p + '/'+ data_list[0])
    #flair
    data.append(sitk.GetArrayFromImage(img_itk))
  #convert to numpy array
  data = np.asarray(data, dtype=np.float32)
  #Remove what is useless
  data = data[:, 30:120, 30:222, 30:222]
  #normalize each volume using minmax method
  for i in range(data.shape[0]):
    data[i, ...] = (data[i, ...] - np.min(data[i, ...]))*2/(np.max(data[i, ...]) - np.min(data[i, ...])) - 1

  data = data.reshape([-1, data.shape[2], data.shape[3]])
  return data
于 2021-03-17T22:05:54.453 回答