Преобразуйте datastore
преобразовывает одно или несколько входных хранилищ данных с помощью функции преобразования dsnew
= transform(ds1,ds2,...,dsN
,@fcn
)fcn
и возвращает преобразованный datastore dsnew
@fcn
может быть помещен прежде или после всех входных хранилищ данных в вызове transform
функция.
использует альтернативное определение функции преобразования dsnew
= transform(ds1,ds2,...,dsN
,@fcn
,'IncludeInfo',IncludeInfo
)fcn
. Альтернативное определение позволяет вам использовать дополнительную информацию, возвращенную read
функция datastore.
Создайте datastore для набора изображений и примените то же преобразование ко всем изображениям в datastore. Например, измените размер всех изображений в наборе к заданному целевому размеру.
Создайте ImageDatastore
с двумя изображениями.
imds = imageDatastore({'street1.jpg','peppers.png'})
imds = ImageDatastore with properties: Files: { ' .../devel/bat/BR2020bd/build/matlab/toolbox/matlab/demos/street1.jpg'; ' .../devel/bat/BR2020bd/build/matlab/toolbox/matlab/imagesci/peppers.png' } Folders: { '/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/matlab/demos'; '/mathworks/devel/bat/BR2020bd/build/matlab/toolbox/matlab/imagesci' } AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage
Считайте все изображения. Заметьте, что datastore содержит изображения различных размеров.
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
Преобразуйте все изображения в datastore к заданному целевому размеру.
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');
Создайте несколько объектов datastore и примените то же преобразование ко всем хранилищам данных. Например, объедините повторные изображения в одно прямоугольное мозаичное изображение.
Создайте ImageDatastore
с одним изображением.
imds1 = imageDatastore({'ngc6543a.jpg'})
imds1 = ImageDatastore with properties: Files: { ' .../devel/bat/BR2020bd/build/matlab/toolbox/matlab/demos/ngc6543a.jpg' } Folders: { '/mathworks/devel/bat/BR2020bd/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'});
Считайте изображение, сохраненное в каждом datastore, и отобразите их размеры.
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
— Введите хранилища данныхВведите хранилища данных. Для полного списка встроенных хранилищ данных смотрите, Выбирают Datastore for File Format или Application. Также можно задать пользовательский datastore.
@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
struct (). Для получения дополнительной информации смотрите read
функциональная страница.
Когда вы устанавливаете значение IncludeInfo
к true
, необходимо использовать альтернативную подпись для функции преобразования fcn
.
dsnew
— Новый datastore с преобразованными даннымиTransformedDatastore
объектНовый datastore с преобразованными данными, возвращенными как TransformedDatastore
объект.
combine
| datastore
| hasdata
| preview
| read
| readall
| reset
| TransformedDatastore
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.