如何拆分AugmenteImage数据存储?
我有一个ImageDatastore,我想分割其中的每个文件,因为每个文件都有两张图片,像640*480-rgb,从640到1240*480黑白 有路吗 我想也许是这样的,但不起作用如何拆分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); 您可以设置自定义读取函数,读取图像并裁剪左半
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