如何拆分AugmenteImage数据存储?

如何拆分AugmenteImage数据存储?,image,matlab,image-processing,input,Image,Matlab,Image Processing,Input,我有一个ImageDatastore,我想分割其中的每个文件,因为每个文件都有两张图片,像640*480-rgb,从640到1240*480黑白 有路吗 我想也许是这样的,但不起作用 augimds = augmentedImageDatastore(imageSize,imds); imageSize = [1:480 1:1280 3]; augimds2 = augmentedImageDatastore(imageSize,imds); 您可以设置自定义读取函数,读取图像并裁剪左半

我有一个ImageDatastore,我想分割其中的每个文件,因为每个文件都有两张图片,像640*480-rgb,从640到1240*480黑白

有路吗

我想也许是这样的,但不起作用

augimds = augmentedImageDatastore(imageSize,imds);


imageSize = [1:480 1:1280 3];
augimds2 = augmentedImageDatastore(imageSize,imds);

您可以设置自定义读取函数,读取图像并裁剪左半部分

定义自定义读取函数:

function J = customreaderLeftSide(im_file_name)
    %Custom read function for imageDatastore: read file, and return the left half
    I = imread(im_file_name);
    J = I(:, 1:end/2, :); %Crop left half

    %In case you want the right half, use: J = I(:, end/2+1:end, :);
end
为imageDatastore设置自定义图像读取器功能:

imds.ReadFcn = @customreaderLeftSide;
我创建了一个完整的代码示例:

构建5个用于测试的示例图像:1.jpg、2.jpg、3.jpg、4.jpg。5.jpg 创建imageDatastore主要选择Image1.jpg、2.jpg、3.jpg、4.jpg、5.jpg。 设置自定义图像读取器功能。 执行readall,并显示第三个图像。 将以下代码复制并粘贴到m文件中,以查看其工作原理:

%Build images for testing: 1.jpg, 2.jpg, 3.jpg, 4.jpg. 5.jpg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I = imread('peppers.png');
I1 = imresize(I, [480, 640]);
I2 = rgb2gray(I1);I2 = cat(3, I2, I2, I2);
J = [I1 I2];
for i = 1:5
    %Add number to each image (in case you don't have license, replace with K = J).
    K = insertText(J, [100, 100], num2str(i), 'FontSize', 72);
    imwrite(K, [num2str(i), '.jpg']);
    %figure;imshow(K);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Create image data store (maually select images 1.jpg, 2.jpg, 3.jpg , 4.jpg, 5.jpg)
imds = imageDatastore({'1.jpg','2.jpg','3.jpg','4.jpg','5.jpg'});
imds.ReadFcn = @customreaderLeftSide; %Set custom image reader function.

%Read all images, and display the third image.
imgs = readall(imds);
imshow(imgs{3})


function J = customreaderLeftSide(im_file_name)
    %Custom read function for imageDatastore: read file, and return the left half
    I = imread(im_file_name);
    J = I(:, 1:end/2, :); %Crop left half
end

我希望您可以根据自己的需要定制上述示例

从R2019a开始,所有数据存储都有一个转换函数,可用于修改读取结果。例如:

imds = imageDatastore(pathToYourImages);
dsLeftRightSplit = transform(imds,@(x) {x(:,1:640,:),x(:,641:end,:)});
figure
montage(read(dsLeftRightSplit))
在上面的代码中,匿名函数取x,imageDatastore返回的图像读取并返回一个包含两个图像的单元格数组,通过索引将其拆分为原始图像


你能发布一张图片样本吗?问题是关于使用ImageDatastore还是关于如何执行拆分?图片,我需要将其拆分为2个拆分代码:I1=I:,1:640,:;I2=I:,641:结束,:;是的,但我需要将其应用于ImageDatastore,因为如果我执行smth,如data=imds.readall;裁剪_1=数据:,1:640,:;它开始说我在2位置的指数超过1