Преобразовать хранилище данных
преобразует одно или несколько хранилищ входных данных с помощью функции преобразования dsnew = transform(ds1,ds2,...,dsN,@fcn)fcn и возвращает преобразованное хранилище данных dsnew. fcn может быть помещено до или после всех входных хранилищ данных в вызове transform функция.
использует альтернативное определение функции преобразования dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo)fcn. Альтернативное определение позволяет использовать дополнительную информацию, возвращаемую read функции хранилища данных.
Создайте хранилище данных для коллекции изображений и примените такое же преобразование ко всем образам в хранилище данных. Например, измените размер всех изображений в коллекции до заданного целевого размера.
Создание ImageDatastore с двумя изображениями.
imds = imageDatastore({'street1.jpg','peppers.png'})imds =
ImageDatastore with properties:
Files: {
' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos/street1.jpg';
' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/imagesci/peppers.png'
}
Folders: {
'/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos';
'/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/matlab/imagesci'
}
AlternateFileSystemRoots: {}
ReadSize: 1
Labels: {}
SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"]
DefaultOutputFormat: "png"
ReadFcn: @readDatastoreImage
Прочитайте все изображения. Обратите внимание, что хранилище данных содержит изображения различных размеров.
img1 = read(imds); % reads the first image img2 = read(imds); % reads the next image whos img1 img2
Name Size Bytes Class Attributes img1 480x640x3 921600 uint8 img2 384x512x3 589824 uint8
Преобразование всех изображений в хранилище данных в заданный целевой размер.
targetSize = [224,224]; imdsReSz = transform(imds,@(x) imresize(x,targetSize));
Считывайте изображения и отображайте их размеры.
imgReSz1 = read(imdsReSz); imgReSz2 = read(imdsReSz); whos imgReSz1 imgReSz2
Name Size Bytes Class Attributes imgReSz1 224x224x3 150528 uint8 imgReSz2 224x224x3 150528 uint8
Отображение измененных размеров изображений.
subplot(121); imshow(imgReSz1); axis on; title('Resized Street1.jpg'); subplot(122); imshow(imgReSz2); axis on; title('Resized peppers.png');

Создайте несколько объектов хранилища данных и примените одно и то же преобразование ко всем хранилищам данных. Например, объединить несколько изображений в одно прямоугольное мозаичное изображение.
Создание ImageDatastore с одним изображением.
imds1 = imageDatastore({'ngc6543a.jpg'})imds1 =
ImageDatastore with properties:
Files: {
' .../devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos/ngc6543a.jpg'
}
Folders: {
'/mathworks/devel/bat/BR2021ad/build/matlab/toolbox/matlab/demos'
}
AlternateFileSystemRoots: {}
ReadSize: 1
Labels: {}
SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"]
DefaultOutputFormat: "png"
ReadFcn: @readDatastoreImage
Считывайте изображение в рабочую область для создания файла изображения из каждого цветового канала исходного изображения.
rgbImage = imread('ngc6543a.jpg'); imwrite(rgbImage(:,:,1),'nebula_red.jpg'); imwrite(rgbImage(:,:,2),'nebula_green.jpg'); imwrite(rgbImage(:,:,3),'nebula_blue.jpg');
Создание ImageDatastore объект для каждого одноканального изображения.
imdsR = imageDatastore({'nebula_red.jpg'});
imdsG = imageDatastore({'nebula_green.jpg'});
imdsB = imageDatastore({'nebula_blue.jpg'});Считывайте изображения, хранящиеся в каждом хранилище данных, и отображайте их размеры.
imOriginal = read(imds1); img_red = read(imdsR); img_green = read(imdsG); img_blue = read(imdsB); whos img1 img_red img_green img_blue
Name Size Bytes Class Attributes img_blue 650x600 390000 uint8 img_green 650x600 390000 uint8 img_red 650x600 390000 uint8
Преобразование всех хранилищ данных путем объединения всех изображений в одно прямоугольное мозаичное изображение. Преобразование цветного изображения в imds1 в оттенках серого, чтобы его размеры соответствовали размерам других изображений.
tds1 = transform(imds1,imdsR,imdsG,imdsB, @(x1,x2,x3,x4) [rgb2gray(x1),x2;x3,x4]); tile = read(tds1);
Отображение мозаичного изображения.
imshow(tile)

ds1,ds2,...,dsN - Хранилища входных данныхВходные хранилища данных. Полный список встроенных хранилищ данных см. в разделе Выбор хранилища данных для формата файла или приложения. Можно также указать пользовательское хранилище данных.
@fcn - Функция преобразования данныхФункция, преобразующая данные, заданная как дескриптор функции. Функция принимает данные как входные и возвращает преобразованные данные на основе преобразований, определенных в fcn.
Функция преобразования должна иметь эту сигнатуру и ds1_data,ds2_data,...dsN_data должен иметь ту же форму, что и данные, возвращенные с помощью read функция.
function dataOut = transformFcn(ds1_data,ds2_data,...dsN_data) .. end
Кроме того, можно определить функцию преобразования. fcn для использования дополнительной информации о данных, возвращенных read функция. Чтобы использовать это альтернативное определение, необходимо указать значение IncludeInfo быть true. В этом случае функция преобразования должна иметь эту подпись.
function [dataOut,infoOut] = transformFcn(ds1_data,ds2_data,...dsN_data,ds1_info,ds2_info...dsN_info) .. end
Пример: @transformFcn
Типы данных: function_handle
IncludeInfo - Включить информацию из read функцияtrue | falseВключить информацию из read функция, указанная как true или false. read функция возвращает информацию об извлеченных данных в info структура. Дополнительные сведения см. в разделе read страница функции.
При установке значения IncludeInfo кому true, необходимо использовать альтернативную сигнатуру для функции преобразования fcn.
dsnew - Новое хранилище данных с преобразованными даннымиTransformedDatastore объектНовое хранилище данных с преобразованными данными, возвращенное как TransformedDatastore объект.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.