Main Content

transform

データストアの変換

説明

dsnew = transform(ds1,ds2,...,dsN,@fcn) は、変換関数 fcn を使用して 1 つ以上の入力データストアを変換し、変更されたデータストア dsnew を返します。fcn は、関数 transform への呼び出しのすべての入力データストアの前または後に配置できます。

dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo) は、変換関数 fcn の代替定義を使用します。代替定義により、関数 read で返されたデータストアの追加情報を使用できるようになります。

すべて折りたたむ

イメージの集合用のデータストアを作成し、そのデータストア内のすべてのイメージに同じ変換を適用します。たとえば、集合内のすべてのイメージを、指定したターゲット サイズに変更します。

2 つのイメージを含む ImageDatastore を作成します。

imds = imageDatastore({'street1.jpg','peppers.png'})
imds = 
  ImageDatastore with properties:

                       Files: {
                              ' .../Bdoc24a.2511836/build/matlab/toolbox/matlab/demos/street1.jpg';
                              ' .../Bdoc24a.2511836/build/matlab/toolbox/matlab/imagesci/peppers.png'
                              }
                     Folders: {
                              ' .../filer/batfs1904-0/Bdoc24a.2511836/build/matlab/toolbox/matlab/demos';
                              ' .../batfs1904-0/Bdoc24a.2511836/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              

サイズ変更後のイメージを表示します。

tiledlayout(1,2);
nexttile
imshow(imgReSz1); axis on; title('Resized Street1.jpg')
nexttile
imshow(imgReSz2); axis on; title('Resized peppers.png')

Figure contains 2 axes objects. Axes object 1 with title Resized Street1.jpg contains an object of type image. Axes object 2 with title Resized peppers.png contains an object of type image.

複数の datastore オブジェクトを作成し、同じ変換をすべてのデータストアに適用します。たとえば、複数のイメージを 1 つの四角形内の整列イメージとして結合します。

1 つのイメージをもつ ImageDatastore を作成します。

imds1 = imageDatastore({'ngc6543a.jpg'})
imds1 = 
  ImageDatastore with properties:

                       Files: {
                              ' .../Bdoc24a.2511836/build/matlab/toolbox/matlab/demos/ngc6543a.jpg'
                              }
                     Folders: {
                              ' .../filer/batfs1904-0/Bdoc24a.2511836/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              

すべてのイメージを 1 つの四角形内の整列イメージに結合して、すべてのデータストアを変換します。imds1 のカラー イメージをグレースケールに変換して、その次元を他のイメージの次元と一致させます。

tds1 = transform(imds1,imdsR,imdsG,imdsB, @(x1,x2,x3,x4) [rgb2gray(x1),x2;x3,x4]);
tile = read(tds1);

タイル イメージを表示します。

imshow(tile)

Figure contains an axes object. The axes object contains an object of type image.

入力引数

すべて折りたたむ

入力データストア。組み込みデータストアの完全な一覧については、ファイル形式またはアプリケーション用のデータ ストアの選択を参照してください。カスタム データストアも指定できます。

データを変換する関数。関数ハンドルとして指定します。関数はデータを入力として受け取り、fcn に定義された変換に基づいて変換したデータを返します。

変換関数には次のシグネチャが必要であり、ds1_data,ds2_data,...dsN_data は、関数 read を使用して返されるデータと同じ形式でなければなりません。

function dataOut = transformFcn(ds1_data,ds2_data,...dsN_data)
..
end

あるいは、関数 read で返されるデータに関する追加情報を使用するように、変換関数 fcn を定義できます。この代替定義を使用するには、IncludeInfo の値を true に指定しなければなりません。この場合、変換関数には次のシグネチャが必要です。

function [dataOut,infoOut] = transformFcn(ds1_data,ds2_data,...dsN_data,ds1_info,ds2_info...dsN_info)
..
end

例: @transformFcn

データ型: function_handle

関数 read からの情報を含めるかどうか。true または false として指定します。関数 read は、抽出されたデータに関する情報を info struct に返します。詳細については、関数 read のページを参照してください。

IncludeInfo の値を true に設定した場合は、変換関数 fcn の代替シグネチャを使用しなければなりません。

出力引数

すべて折りたたむ

変換後のデータを含む新しいデータストア。TransformedDatastore オブジェクトとして返されます。

拡張機能

バージョン履歴

R2019a で導入