Поддерживаемые форматы файлов для объемных данных изображения включают файлы MAT, файлы Digital Imaging and Communications in Medicine (DICOM) и файлы Инициативы по технологии нейровизуализации информатики (NIfTI).
Считывание данных объемного изображения в ImageDatastore. Считывание объемных данных метки пикселя в PixelLabelDatastore(Панель инструментов компьютерного зрения). Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.
В таблице показано типичное использование imageDatastore и pixelLabelDatastore для каждого из поддерживаемых форматов файлов. При создании хранилища данных укажите 'FileExtensions' аргумент в качестве расширений файлов данных. Укажите ReadFcn свойство как дескриптор функции, считывающий данные формата файла. filepath аргумент указывает путь к файлам или папке, содержащим данные изображения. Для изображений меток пикселов дополнительные classNames и pixelLabelID аргументы определяют соответствие значений меток вокселя именам классов.
Формат файла изображения | Создание хранилища данных изображения или пиксельной метки |
|---|---|
ЦИНОВКА | volds = imageDatastore(filepath, ... 'FileExtensions','.mat','ReadFcn',@(x) fcn(x)); pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.mat','ReadFcn',@(x) fcn(x)); fcn - пользовательская функция, считывающая данные из файла MAT. Например, этот код определяет функцию с именем matRead загружает данные тома из первой переменной файла MAT. Сохранение функции в файле с именем matRead.m.
function data = matRead(filename) inp = load(filename); f = fields(inp); data = inp.(f{1}); end |
Том DICOM в одном файле |
volds = imageDatastore(filepath, ... 'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x)); pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x)); Дополнительные сведения о чтении файлов DICOM см. в разделе |
Том DICOM в нескольких файлах | Выполните следующие действия. Пример см. в разделе Создание хранилища данных изображений, содержащего одно- и многофайловые тома DICOM (панель инструментов обработки изображений).
|
NIfTI | volds = imageDatastore(filepath, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); Дополнительные сведения о чтении файлов NIfTI см. в разделе |
Чтобы связать данные объемного изображения и метки для семантической сегментации или два хранилища данных объемного изображения для регрессии, используйте randomPatchExtractionDatastore(Панель инструментов обработки изображений). Хранилище данных для извлечения случайных исправлений извлекает соответствующие случайно расположенные исправления из двух хранилищ данных. Патчинг - распространенный метод предотвращения нехватки памяти при тренировках с произвольно большими объёмами. Определите размер участка, который соответствует входному размеру сети и, для эффективности памяти, меньше, чем полный размер объема, такой как 64 64 64 voxels.
Вы также можете использовать combine для связывания двух хранилищ данных. Однако связывание двух хранилищ данных с помощью randomPatchExtractionDatastore имеет несколько преимуществ combine.
randomPatchExtractionDatastore поддерживает параллельное обучение, обучение нескольким GPU и чтение предварительных выборок. Укажите параллельное или многопроцессорное обучение с помощью ' аргумент пары имя-значение ExecutionEnvironment'trainingOptions. Укажите чтение предварительной выборки с помощью ' аргумент пары имя-значение DispatchInBackground'trainingOptions. Для чтения предварительной выборки требуется Toolbox™ параллельных вычислений.
randomPatchExtractionDatastore по своей сути поддерживает извлечение пластыря. В отличие от этого, для извлечения исправлений из CombinedDatastore, вы должны определить свою собственную функцию, которая собирает изображения в патчи, а затем использовать transform для применения операций обрезки.
randomPatchExtractionDatastore может генерировать несколько исправлений изображения из одного тестового изображения. Извлечение исправлений «один ко многим» эффективно увеличивает объем доступных обучающих данных.
Глубокое обучение часто требует предварительной обработки и расширения данных. Например, может потребоваться нормализовать интенсивность изображения, повысить контрастность изображения или добавить рандомизированные аффинные преобразования для предотвращения переоборудования.
Для предварительной обработки объемных данных используйте transform функция. transform создает измененную форму хранилища данных, называемую базовым хранилищем данных, путем преобразования данных, считываемых базовым хранилищем данных, в соответствии с набором операций, определенных в пользовательской функции. Toolbox™ обработки изображений предоставляет несколько функций, которые принимают объемный ввод. Для полного списка функций посмотрите 3D Объемную Обработку изображения (Комплект инструментов Обработки изображения). Объемные изображения также можно предварительно обрабатывать с помощью функций MATLAB ®, работающих с многомерными массивами.
Пользовательская функция преобразования должна принимать данные в формате, возвращаемом read функция базового хранилища данных.
Базовое хранилище данных | Формат ввода в пользовательскую функцию преобразования |
|---|---|
ImageDatastore | Ввод в пользовательскую функцию преобразования зависит от
Дополнительные сведения см. в разделе |
PixelLabelDatastore | Ввод в пользовательскую функцию преобразования зависит от
Дополнительные сведения см. в разделе |
RandomPatchExtractionDatastore | Входные данные пользовательской функции преобразования должны представлять собой таблицу с двумя столбцами. Дополнительные сведения см. в разделе |
A RandomPatchExtractionDatastore объект не поддерживает DataAugmentation свойство для объемных данных. Чтобы применить случайные аффинные преобразования к объемным данным в хранилище данных этого типа, необходимо использовать transform функция.
transform функция должна возвращать данные, соответствующие входному размеру сети. transform функция не поддерживает сопоставления «один ко многим».
Этот пример кода показывает, как преобразовать объемные данные в хранилище данных изображения volDS использование произвольного конвейера предварительной обработки, определенного в функции preprocessVolumetricImage. В примере предполагается, что ReadSize из volDS больше 1.
dsTrain = transform(volDS,@(x) preprocessVolumetricImage(x,inputSize));
Определите preprocessVolumetricImage функция, выполняющая требуемые преобразования данных, считанных из базового хранилища данных. Функция должна принимать массив ячеек данных изображения. Функция проходит через каждое изображение в пакете и преобразует изображение в соответствии с этим конвейером предварительной обработки:
Случайное вращение изображения относительно оси Z.
Измените размер тома до размера, ожидаемого сетью.
Создайте шумную версию изображения с гауссовым шумом.
Возврат изображения в массиве ячеек.
function dataOut = preprocessVolumetricImage(data,inputSize) numRows = size(data,1); dataOut = cell(numRows,1); for idx = 1:numRows % Perform randomized 90 degree rotation about the z-axis data = imrotate3(data{idx,1},90*(randi(4)-1),[0 0 1]); % Resize the volume to the size expected by the network dataClean = imresize(data,inputSize); % Add zero-mean Gaussian noise with a normalized variance of 0.01 dataNoisy = imnoise(dataClean,'gaussian',0.01); % Return the preprocessed data dataOut(idx) = dataNoisy; end end
Этот пример кода показывает, как преобразовать объемные данные в хранилище данных случайного извлечения исправлений volPatchDS использование произвольного конвейера предварительной обработки, определенного в функции augmentVolumetricPatch. В примере предполагается, что ReadSize из volPatchDS равно 1 и что сетевые ответы представляют собой изображения меток пикселей в хранилище данных меток пикселей.
dsTrain = transform(volPatchDS,@(x) augmentVolumetricPatch(x));
Определите augmentVolumetricPatch функция, выполняющая требуемые преобразования данных, считанных из базового хранилища данных. Функция должна принимать таблицу данных изображения из двух столбцов. Функция преобразует данные согласно этому конвейеру предварительной обработки:
Случайным образом выберите одно из пяти дополнений.
Примените одинаковое увеличение к обоим изображениям.
Возврат пары дополненных изображений в таблице.
function dataOut = augmentVolumetricPatch(data) img = data.InputImage{1}; resp = data.ResponsePixelLabelImage{1}; % 5 augmentations: none, rot90, fliplr, flipud, rot90(fliplr) augType = {@(x) x,@rot90,@fliplr,@flipud,@(x) rot90(fliplr(x))}; rndIdx = randi(5,1); imgOut = augType{rndIdx}(img); respOut = augType{rndIdx}(resp); % Return the augmented data as a table dataOut = table({imgOut},{respOut}, ... 'VariableNames',["InputImage" "ResponsePixelLabelImage"]); end
imageDatastore | trainNetwork | transform | pixelLabelDatastore (Панель инструментов компьютерного зрения) | randomPatchExtractionDatastore(Панель инструментов обработки изображений)