3图像预处理
3.1调整输入图像
您可以使用该imcrop功能提取图像的一部分。
imgcrop = imcrop(img , [ = imcrop(img , [horiz vert w h ]);;
这会提取宽度w和高度h的图像,其左上角在水平方向上第horiz个像素,在垂直方向第vert个像素。
使用该imcrop功能将存储在变量中的图像裁剪img到(130,80)像素开始的部分,宽度为426像素,高度为426像素。将结果存储回变量img:
img = imcrop(img,[130 80 426 426]);
您可以使用该imresize功能调整图像大小。
imgresz = imresize (img ,[ numrows numcols ]);
这种大小调整img是numrows-by- numcols。也就是说,imgresz具有numcols像素的宽度和像素的高度numrows。
使用该imresize函数将存储在变量中的图像调整img为227×227。将结果存储回变量img:
img = imresize(img,[227 227]);
您可以使用该repmat功能多次复制数组。
y = repmat (x ,[ 1 1 3 ]);
这会x在第一维中复制阵列一次,在第二维中复制一次,在第三维复制三次。如果x是表示灰度图像的矩阵,y则将是代表颜色(RGB)图像的3-D阵列。
使用该repmat函数img在第三维中复制三次,以便将其从227乘227转换为227乘227乘3。将结果存储回变量img:
img = repmat(img , [1 ,1 ,3]);
通常需要在众多图像上执行相同的预处理步骤。您可以创建包含预处理步骤的自定义导入功能。
修改本地函数wormread以对导入的图像执行三个必需的修改:
crop to()[130 80 426 426] (imcrop)
调整为227-by-227(imresize)
从灰度转换为RGB(repmat)
function img = wormread(file)
img = imread(file);
% TODO - add modifications
img = imcrop(img,[130 80 426 426]);
img = imresize(img,[227 227]);
img = repmat(img,[1 1 3]);
end
3.2添加自定义导入功能(函数)到图像存储区
您可以使用ReadFcn图像数据存储的属性来指定将图像读入内存时使用的自定义导入功能。使用该@符号来定义导入函数的函数句柄。
ds = imageDatastore(location,'ReadFcn',@myfun);
这将在location使用函数myfun作为导入函数时创建图像的数据存储区。
创建一个名为wormds的数据存储,它指向存储在变量pathToImages中的文件夹路径中的图像文件,使用wormread函数作为导入函数:
wormds = imageDatastore(pathToImages,'ReadFcn',@wormread);
使用该read函数将第一个图像导入到一个名为的变量中img:
img = read(wormds);
使用该imshow功能可视化第一张图像:
imshow(img);
3.3 Augmenting images in a Datastore
您可以使用augmentedImageSource函数执行基本的预处理,该函数将图像数据存储作为输入。 输出可以作为训练数据源传递给trainNetwork函数。