Поддерживаемые форматы файлов для объемных данных изображений включают MAT-файлы, файлы Digital Imaging and Communications in Medicine (DICOM) и файлы Neuroimaging Informatics Technology Initiative (NIfTI).
Считайте данные объемного изображения в ImageDatastore
. Считайте объемные данные о пиксельных метках в PixelLabelDatastore
(Computer Vision Toolbox). Для получения дополнительной информации смотрите Datastores для глубокого обучения.
Таблица показывает типичные использования imageDatastore
и pixelLabelDatastore
для каждого из поддерживаемых форматов файлов. Когда вы создаете datastore, задайте 'FileExtensions'
аргумент как расширения файлов ваших данных. Задайте ReadFcn
свойство как указатель на функцию, который считывает данные формата файла. The filepath
аргумент задает путь к файлам или папке, содержащей данные изображения. Для пиксельных изображений с меткой, дополнительные classNames
и pixelLabelID
аргументы определяют отображение значений меток вокселей именам классов.
Формат файла изображений | Создайте Image Datastore или Pixel Label Datastore |
---|---|
MAT | 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 в нескольких файлах | Выполните следующие действия. Для получения примера смотрите Изображение Create Datastore, содержащий один и Мультифайл тома DICOM (Image Processing Toolbox).
|
NIfTI | volds = imageDatastore(filepath, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); Для получения дополнительной информации о чтении файлов NIfTI см. |
Чтобы связать объемное изображение и данные меток для семантической сегментации или два хранилища данных объемных изображений для регрессии, используйте randomPatchExtractionDatastore
(Image Processing Toolbox). Datastore случайного извлечения закрашенных фигур извлекает соответствующие случайным образом расположенные закрашенные фигуры из двух хранилищ данных. Исправление является распространенным методом, чтобы предотвратить истощение памяти при обучении с произвольно большими томами. Определите размер закрашенной фигуры, который соответствует размеру входа сети и, для эффективности памяти, меньше, чем полный размер объема, таков как воксели 64 на 64 на 64.
Вы также можете использовать combine
функция для связи двух хранилищ данных. Однако связывание двух хранилищ данных с помощью randomPatchExtractionDatastore
имеет несколько преимуществ над combine
.
randomPatchExtractionDatastore
поддерживает параллельное обучение, мультиграфический процессор и предварительное чтение. Задайте параллельное или мультиграфическое обучение с помощью '
Аргумент пары "имя-значение" из ExecutionEnvironment
'trainingOptions
. Задайте предварительное чтение с помощью '
Аргумент пары "имя-значение" из DispatchInBackground
'trainingOptions
. Для чтения предварительной выборки требуется Parallel Computing Toolbox™.
randomPatchExtractionDatastore
по своей сути поддерживает извлечение патча. В противоположность этому, чтобы извлечь закрашенные фигуры из CombinedDatastore
, вы должны задать свою собственную функцию, которая высаживает изображения в закрашенные фигуры, а затем использовать transform
функция для применения операций обрезки.
randomPatchExtractionDatastore
может сгенерировать несколько закрашенные фигуры к изображениям из одного тестового изображения. Извлечение закрашенной фигуры «один ко многим» эффективно увеличивает объем доступных обучающих данных.
Глубокое обучение часто требует предварительной обработки и увеличения данных. Для примера можно хотеть нормализовать интенсивность изображения, улучшить контрастность изображения или добавить рандомизированные аффинные преобразования, чтобы предотвратить сверхподбор кривой.
Для предварительной обработки объемных данных используйте transform
функция. transform
создает измененную форму datastore, называемую underlying datastore, путем преобразования данных, считанных базовым datastore, в соответствии с набором операций, заданным в пользовательской функции. Image Processing Toolbox™ обеспечивает несколько функций, которые принимают объемный вход. Полный список функций см. 3-D разделе «Объемная обработка изображений» (Image Processing Toolbox). Можно также предварительно обработать объемные изображения с помощью функций в MATLAB® которые работают с многомерными массивами.
Пользовательская функция преобразования должна принимать данные в формате, возвращенном read
функция базового datastore.
Базовый Datastore | Формат входа в пользовательскую функцию преобразования |
---|---|
ImageDatastore | Вход в пользовательскую функцию преобразования зависит от
Для получения дополнительной информации смотрите |
PixelLabelDatastore | Вход в пользовательскую функцию преобразования зависит от
Для получения дополнительной информации смотрите |
RandomPatchExtractionDatastore | Вход пользовательской функции преобразования должен быть таблицей с двумя столбцами. Для получения дополнительной информации смотрите |
A RandomPatchExtractionDatastore
объект не поддерживает DataAugmentation
свойство для объемных данных. Чтобы применить случайные аффинные преобразования к объемным данным в этом типе datastore, необходимо использовать transform
функция.
transform
функция должна возвращать данные, которые совпадают с входом сети. transform
функция не поддерживает отображений наблюдений «один ко многим».
Этот пример кода показов, как преобразовать объемные данные в изображение datastore volDS
использование произвольного конвейера предварительной обработки, заданного в функции preprocessVolumetricImage
. Пример принимает, что ReadSize
от volDS
больше 1.
dsTrain = transform(volDS,@(x) preprocessVolumetricImage(x,inputSize));
Определите preprocessVolumetricImage
функция, которая выполняет желаемые преобразования данных, считанных из базового datastore. Функция должна принимать массив ячеек с данными изображений. Функция закольцовывается через каждое изображение в пакете и преобразует изображение согласно этому конвейеру предварительной обработки:
Случайным образом поверните изображение вокруг оси 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
Этот пример кода показывает, как преобразовать объемные данные в datastore случайного извлечения закрашенной фигуры volPatchDS
использование произвольного конвейера предварительной обработки, заданного в функции augmentVolumetricPatch
. Пример принимает, что ReadSize
от volPatchDS
равен 1, и сетевые отклики являются изображениями меток пикселей в хранилище данных меток пикселей.
dsTrain = transform(volPatchDS,@(x) augmentVolumetricPatch(x));
Определите augmentVolumetricPatch
функция, которая выполняет желаемые преобразования данных, считанных из базового datastore. Функция должна принимать двухколоночную таблицу данных изображений. Функция преобразует данные согласно этому конвейеру предварительной обработки:
Случайным образом выберите одно из пяти увеличений.
Примените одно и то же увеличение к обоим изображениям.
Верните пару дополненных изображений в таблицу.
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
(Computer Vision Toolbox) | randomPatchExtractionDatastore
(Набор Image Processing Toolbox)