主要内容

深度学习预处理卷

读取体积数据

金宝app支持的体积图像数据文件格式包括mat文件、医学数字成像和通信(DICOM)文件和神经成像信息学技术倡议(NIfTI)文件。

将体积图像数据读入ImageDatastore.将容积像素标号数据读入像素标签数据库(计算机视觉工具箱).有关更多信息,请参见用于深度学习的数据存储

该表格显示了…的典型用法图像数据存储像素标签数据库每个支持的文件格式。金宝app在创建数据存储时,指定“文件扩展名”参数作为数据的文件扩展名。指定ReadFcn属性作为读取文件格式数据的函数句柄。的文件路径参数指定包含图像数据的文件或文件夹的路径。对于像素标签图像,附加的一会pixelLabelID参数指定体素标签值到类名的映射。

图像文件格式

创建图像数据存储或像素标签数据存储

volds=图像数据存储(文件路径,...“文件扩展名”“马特先生”“ReadFcn”@ (x) fcn (x));pixelLabelID pxds = pixelLabelDatastore (filepath,一会,...“文件扩展名”“马特先生”“ReadFcn”@ (x) fcn (x));
fcn是从MAT文件中读取数据的自定义函数。例如,这段代码定义了一个调用的函数matRead从MAT文件的第一个变量加载卷数据。将函数保存在一个名为matRead.m

作用data = matRead(filename) inp = load(filename);f =字段(输入);=输入的数据。(f {1});结束

DICOM卷在单一文件

volds=图像数据存储(文件路径,...“文件扩展名”“.dcm”“ReadFcn”@ (x) dicomread (x));pixelLabelID pxds = pixelLabelDatastore (filepath,一会,...“文件扩展名”“.dcm”“ReadFcn”@ (x) dicomread (x));

有关读取DICOM文件的更多信息,请参阅dicomread(图像处理工具箱)

多个文件中的DICOM卷

遵循这些步骤。例如,请参见创建包含单文件和多文件DICOM卷的镜像数据存储(图像处理工具箱)

  • 属性将文件聚合为单个研究dicomCollection(图像处理工具箱)函数。

  • 阅读研究中的DICOM数据使用dicomreadVolume(图像处理工具箱)函数。

  • 将每个卷写入MAT文件。

  • 创建ImageDatastore像素标签数据库从MAT文件集合中,按照MAT文件的处理程序。

尼弗蒂

volds=图像数据存储(文件路径,...“文件扩展名”“.nii”“ReadFcn”@ (x) niftiread (x));pixelLabelID pxds = pixelLabelDatastore (filepath,一会,...“文件扩展名”“.nii”“ReadFcn”@ (x) niftiread (x));

有关读取NIfTI文件的更多信息,请参见niftiread(图像处理工具箱)

对图像和标签数据

若要将容积图像和标签数据关联起来进行语义分割,或将两个容积图像数据存储关联起来进行回归,请使用randomPatchExtractionDatastore(图像处理工具箱).随机补丁提取数据存储从两个数据存储中提取相应的随机位置补丁。在进行任意大容量的训练时,修补是一种常见的防止内存耗尽的技术。指定一个与网络的输入大小匹配的补丁大小,并且为了内存效率,补丁大小要小于卷的完整大小,例如64 × 64 × 64体素。

你也可以用the结合函数关联两个数据存储。但是,使用randomPatchExtractionDatastore有一些好处结合

  • randomPatchExtractionDatastore金宝app支持并行训练、多gpu训练和预取读取。指定并行或多gpu训练使用执行环境名称-值参数培训选项。使用DispatchInBackground名称-值参数培训选项.预取读取需要并行计算工具箱™。

  • randomPatchExtractionDatastore固有地支持补丁提取。金宝app相比之下,从一个CombinedDatastore,您必须定义自己的函数来将图像裁剪成补丁,然后使用使改变函数应用裁剪操作。

  • randomPatchExtractionDatastore可以从一个测试图像生成多个图像补丁。一对多补丁提取有效地增加了可用的训练数据量。

预处理体积数据

深度学习通常需要对数据进行预处理和增强。例如,您可能希望规范化图像强度、增强图像对比度或添加随机仿射变换以防止过度拟合。

要对容量数据进行预处理,请使用使改变函数。使改变创建数据存储的更改形式,称为底层数据存储,根据自定义函数中定义的操作集转换基础数据存储读取的数据。图像处理工具箱™ 提供多个接受体积输入的函数。有关函数的完整列表,请参阅三维立体图像处理(图像处理工具箱).您也可以使用MATLAB中的函数对体积图像进行预处理®用于多维数组。

自定义转换函数必须接受阅读底层数据存储的功能。

底层数据存储

自定义转换函数的输入格式

ImageDatastore

自定义转换函数的输入依赖于ReadSize财产。

  • 什么时候ReadSize为1时,转换函数必须接受整数数组。控件中的图像类型与数组的大小一致ImageDatastore。例如,灰度图像具有大小-借-n,truecolor图像具有大小-借-n-by-3和具有c渠道有大小-借-n-借-c

  • 什么时候ReadSize大于1时,转换函数必须接受与批处理中每个图像相对应的图像数据单元数组。

有关更多信息,请参见阅读的函数ImageDatastore

像素标签数据库

自定义转换函数的输入依赖于ReadSize财产。

  • 什么时候ReadSize如果为1,则转换函数必须接受分类矩阵。

  • 什么时候ReadSize大于1时,转换函数必须接受分类矩阵的单元格数组。

有关更多信息,请参见阅读(计算机视觉工具箱)的函数像素标签数据库

RandomPatchExtractionDatastore

自定义转换函数的输入必须是一个包含两列的表。

有关更多信息,请参见阅读(图像处理工具箱)的函数RandomPatchExtractionDatastore

使改变函数必须返回与网络输入大小匹配的数据。的使改变函数不支持一对多观察映射。金宝app

对中的体积数据应用随机仿射变换的步骤RandomPatchExtractionDatastore,你必须使用使改变函数。的数据扩充此数据存储的属性不支持卷数据。金宝app

例子

在图像数据存储中批量转换体积数据

此示例演示如何使用示例图像预处理管道转换图像数据存储中的体积数据。

指定保存在MAT文件中的一组体积图像。

filepath = fullfile (matlabroot,“工具箱”“图像”“imdata”“mristack.mat”);files=[filepath;filepath;filepath];

创建一个存储多个映像的映像数据存储。指定该ReadSize大于1的数据存储。指定自定义读函数,matRead.此功能在本示例的支持功能部分中定义。金宝app

volDS = imageDatastore(文件,“FileExtensions”“.mat”...“ReadSize”3.“ReadFcn”@ (x) matRead (x));

指定网络的输入大小。

inputSize = [128 128];

对图像进行预处理volDS中定义的自定义预处理管道preprocessVolumetricIMDS金宝app支持功能。

dsTrain = transform(vds,@(x) preprocessVolumetricIMDS(x,inputSize));

读取一批数据。

minibatch =阅读(dsTrain)
minibatch =3×1单元阵列{128x128x21 uint8} {128x128x21 uint8}

金宝app支持功能

matRead函数从MAT文件的第一个变量加载体积数据。

作用data = matRead(filename) inp = load(filename);f =字段(输入);=输入的数据。(f {1});结束

preprocessVolumetricIMDS函数对从底层图像数据存储读取的数据执行所需的转换。因为图像数据存储的读取大小大于1,所以该函数必须接受图像数据的单元格数组。该函数遍历每个读取图像,并根据预处理管道转换数据:

  • 随机旋转图像z设在。

  • 将卷大小调整为网络预期的大小。

  • 创建带有高斯噪声的图像的噪声版本。

  • 返回单元格数组中的图像。

作用numRows = size(batchIn,1);batchOut =细胞(numRows, 1);idx = 1: numRows%沿z轴随机旋转90度imrotate = imrotate3(batchIn{idx,1},90*(randi(4)-1),[0 0 1]);%将卷大小调整为网络预期的大小imResized = imresize (imRotated inputSize);加入零均值高斯噪声,归一化方差为0.01imNoisy = imnoise (imResized,“高斯”, 0.01);%返回预处理数据batchOut (idx) = {imNoisy};结束结束

在随机面片提取数据存储中转换体积数据

此示例演示如何使用示例图像预处理管道转换随机面片提取数据存储中的体积数据对。

指定两组保存在MAT文件中的体积图像。每一组包含5张立体图像。

dir = fullfile (matlabroot,“工具箱”“图像”“imdata”“BrainMRILabeled”);filesVol1 = fullfile (dir,“图像”);filesVol2 = fullfile (dir,“标签”);

在一个图像数据存储中存储每一组容量图像。指定自定义读函数,matRead.此功能在本示例的支持功能部分中定义。金宝app使用默认的ReadSize为1。

vol1DS = imageDatastore (filesVol1,“FileExtensions”“.mat”“ReadFcn”@ (x) matRead (x));vol2DS = imageDatastore (filesVol2,“FileExtensions”“.mat”“ReadFcn”@ (x) matRead (x));

指定网络的输入大小。

inputSize = [128 128];

创建一个随机补丁提取数据存储,从两个数据存储中提取相应的补丁。为每个图像选择三个补丁。

patchVolDS = randomPatchExtractionDatastore (vol1DS vol2DS inputSize,“PatchesPerImage”3);

对图像进行预处理patchVolDS中定义的自定义预处理管道预处理卷数CPATCHDS金宝app支持功能。

dsTrain = transform(patchVolDS,@(x) preprocessVolumetricPatchDS(x));

读取一批数据。

minibatch =阅读(dsTrain)
minibatch =15×2表InputImage ResponseImage ____________________ ___________________ {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8} {128x128x155 uint8{8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8} {8 - x8 - x155 Uint8}

金宝app支持功能

matRead函数从MAT文件的第一个变量加载体积数据。

作用data = matRead(filename) inp = load(filename);f =字段(输入);=输入的数据。(f {1});结束

预处理卷数CPATCHDS函数对从底层随机补丁提取数据存储读取的数据执行所需的转换。函数必须接受一个表。该函数根据预处理管道对数据进行转换:

  • 随机选择五种增益之一。

  • 对表的两列中的数据应用相同的扩展。

  • 返回表中增强的图像对。

作用numRows = size(batchIn,1);batchOut = batchIn;%5个增强:零、rot90、fliplr、flipud、rot90(fliplr)augType = {@ (x) x, @rot90 @fliplr, @flipud, @ (x) rot90 (fliplr (x))};idx=1:numRows img=batchIn{idx,1}{1};resp=batchIn{idx,2}{1};rndIdx=randi(5,1);imgauge=augType{rndIdx}(img);respAug=augType{rndIdx}(resp);batchOut(idx,:)={imgaugg,respAug};结束结束

另请参阅

||(计算机视觉工具箱)|(图像处理工具箱)|

相关的例子

更多关于