Поддерживаемые форматы файлов для объемных данных изображения включают MAT-файлы, Цифровую Обработку изображений и Коммуникации в Медицине (DICOM) файлы и Нейрообработка изображений Технологической Инициативы Информатики (NIfTI) файлы.
Считайте объемные данные изображения в ImageDatastore
. Считайте объемные данные о пиксельных метках в PixelLabelDatastore
(Computer Vision Toolbox). Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.
Таблица показывает типичные использования imageDatastore
и pixelLabelDatastore
для каждых из поддерживаемых форматов файлов. Когда вы создаете datastore, задаете 'FileExtensions'
аргумент как расширения файла ваших данных. Задайте ReadFcn
свойство как указатель на функцию, который считывает данные формата файла. filepath
аргумент задает путь к файлам или папке, содержащей данные изображения. Поскольку пиксель помечает изображения, дополнительный classNames
и pixelLabelID
аргументы задают отображение значений метки вокселя к именам классов.
Формат файла изображения | Создайте Datastore метки 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 в нескольких файлах | Выполните эти шаги. Для примера смотрите, Создают 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
может сгенерировать несколько закрашенных фигур изображений от одного тестового изображения. Экстракция закрашенной фигуры One-many эффективно увеличивает сумму доступных обучающих данных.
Глубокое обучение часто требует, чтобы данные были предварительно обработаны и увеличены. Например, можно хотеть нормировать интенсивность изображений, улучшить контрастность изображений или добавить рандомизированные аффинные преобразования, чтобы предотвратить сверхподбор кривой.
Чтобы предварительно обработать объемные данные, используйте transform
функция. transform
создает измененную форму datastore, названного underlying datastore, путем преобразования данных, считанных базовым datastore согласно набору операций, которые вы задаете в пользовательской функции. Image Processing Toolbox™ обеспечивает несколько функций, которые принимают объемный вход. Для полного списка функций смотрите 3-D Объемную Обработку изображений (Image Processing Toolbox). Можно также предварительно обработать объемные изображения с помощью функций в MATLAB®, которые работают над многомерными массивами.
Пользовательская функция преобразования должна принять данные в формате, возвращенном read
функция базового datastore.
Лежание в основе Datastore | Формат входа к пользовательской функции преобразования |
---|---|
ImageDatastore | Вход к пользовательской функции преобразования зависит от
Для получения дополнительной информации смотрите |
PixelLabelDatastore | Вход к пользовательской функции преобразования зависит от
Для получения дополнительной информации смотрите |
RandomPatchExtractionDatastore | Вход к пользовательской функции преобразования должен быть таблицей с двумя столбцами. Для получения дополнительной информации смотрите |
RandomPatchExtractionDatastore
объект не поддерживает DataAugmentation
свойство для объемных данных. Чтобы применить случайные аффинные преобразования к объемным данным в этом типе datastore, необходимо использовать transform
функция.
transform
функция должна возвратить данные, которые совпадают с входным размером сети. transform
функция не поддерживает one-many отображения наблюдения.
Этот пример кода показывает, как преобразовать объемные данные в 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 и что сетевые ответы являются пиксельными изображениями метки в пиксельном datastore метки.
dsTrain = transform(volPatchDS,@(x) augmentVolumetricPatch(x));
Задайте augmentVolumetricPatch
функция, которая выполняет желаемые преобразования данных, считанных из базового datastore. Функция должна принять таблицу 2D столбца данных изображения. Функция преобразовывает данные согласно этому конвейеру предварительной обработки:
Случайным образом выберите одно из пяти увеличений.
Примените то же увеличение к обоим изображениям.
Возвратите увеличенную пару изображений в таблице.
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)