Многие усилия по решению любой проблемы обучения машины идут в подготовку данных. В этом руководстве мы увидим, как загружать и предварительно обработать/дополнять данные из нетривиального набора данных. Различные классы формата изображения дают полный или избирательный доступ к информации заголовка (META), и доступ к данным изображения предоставляется через Numpy Armays.
Чтобы запустить этот урок, пожалуйста, убедитесь, что установлены следующие пакеты:
Параметр :
Загрузите образец файлов Nibabel из моего Github который находится в форме nii.giz
Импорт библиотеки:
import os import nibabel as nib import numpy as np import matplotlib.pyplot as plt }
Справочник для MRI Data Импорт наборов данных: «File_Path»
Функция для чтения данных от dirname
def FileRead(file_path): nii = nib.load(file_path) data = nii.get_data() #if (np.shape(np.shape(data))[0] == 3): #If channel data not present # data = np.expand_dims(data, 3) return data
Функция Возвращает 2-мерное множество массив из трехмерных данных
def Nifti3Dto2D(Nifti3D): Nifti3DWOChannel = Nifti3D#[:,:,:,0] #Considering there is only one channel info Nifti2D = Nifti3DWOChannel.reshape(np.shape(Nifti3DWOChannel)[0], np.shape(Nifti3DWOChannel)[1] * np.shape(Nifti3DWOChannel)[2]) return Nifti2D
Функция Возвращает 1-мерное множество массива из двухмерного массива
def Nifti2Dto1D(Nifti2D): Nifti1D = Nifti2D.reshape(np.shape(Nifti2D)[0] * np.shape(Nifti2D)[1]) return Nifti1D
Изменяет 1 размерный массив до 2 мерных данных
def Nifti1Dto2D(Nifti1D, height): Nifti2D = Nifti1D.reshape(height,int(np.shape(Nifti1D)[0]/height)) return Nifti2D
Решисты 2 гамерного массива до трехмерных данных
def Nifti2Dto3D(Nifti2D): Nifti3DWOChannel = Nifti2D.reshape(np.shape(Nifti2D)[0],np.shape(Nifti2D)[0],np.shape(Nifti2D)[1]//np.shape(Nifti2D)[0]) #Nifti3D = np.expand_dims(Nifti3DWOChannel, 3) return Nifti3DWOChannel
нормализовать данные между O-1
def normalize(x): min_val = np.min(x) max_val = np.max(x) x = (x-min_val) / (max_val-min_val) return x
Чтобы скопировать данные в локальное хранилище
def FileSave(data, file_path): nii = nib.Nifti1Image(data, np.eye(4)) nib.save(nii, file_path)
Возвращает список файлов из данного Dirname
def getListOfFiles(dirName): # creating a list of file and sub directories listOfFile = os.listdir(dirName) allFiles = [] # Iterate over entries for entry in listOfFile: # Creating full path fullPath = os.path.join(dirName, entry) if os.path.isdir(fullPath): allFiles = allFiles + getListOfFiles(fullPath) else: allFiles.append(fullPath) return allFiles
Принимает список файлов и создает 1 измерение и 2 данных измерений из данных MR
def main(): listOfFiles = getListOfFiles(dirName) twod_data = []# to save two dimensional data oned_data = [] listOfFiles = [] for (dirpath, dirnames, filenames) in os.walk(dirName): listOfFiles += [os.path.join(dirpath, file) for file in filenames] # listOfFiles_under.append(listOfFiles_under) #print(listOfFiles_under) for element in listOfFiles: print(element) red_files = FileRead(element) twod_array = Nifti3Dto2D(red_files) twod_data.append(twod_array) #print(twod_unsam) oned_array= Nifti2Dto1D(twod_array) oned_data.append(oned_array) oned_data = np.asarray(oned_data, dtype=np.float64, order='C') twod_data = np.asarray(twod_data, dtype=np.float64, order='C') return oned_data, twod_data oned_data, twod_data = main()
для визуализации
data_vis = Nifti2Dto3D(Nifti1Dto2D(oned_data[0,:], 256)) #plt.imshow(data_vis[20,:,:], cmap='gray') plt.imshow(data_vis[:,:,20], cmap='gray')
Вывод для одного нарезанного изображения
Оригинал: “https://dev.to/sairajesh/data-preprocessing-for-mri-datasets-5adg”