Рубрики
Без рубрики

Предварительная обработка данных для наборов данных MRI

Многие усилия по решению любой проблемы обучения машины идут в подготовку данных. В этой жеребенке … с меткой Python, начинающих, учебниках, карьере.

Многие усилия по решению любой проблемы обучения машины идут в подготовку данных. В этом руководстве мы увидим, как загружать и предварительно обработать/дополнять данные из нетривиального набора данных. Различные классы формата изображения дают полный или избирательный доступ к информации заголовка (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”