Main Content

transform

데이터저장소 변환

R2019a 이후

설명

예제

dsnew = transform(ds1,ds2,...,dsN,@fcn)은 변환 함수 fcn을 사용하여 하나 이상의 입력 데이터저장소를 변환하고 변환된 데이터저장소 dsnew를 반환합니다. fcntransform 함수 호출 시 모든 입력 데이터저장소 앞이나 뒤에 위치할 수 있습니다.

dsnew = transform(ds1,ds2,...,dsN,@fcn,'IncludeInfo',IncludeInfo)는 변환 함수 fcn의 대체 정의를 사용합니다. 대체 정의를 사용하면 데이터저장소의 read 함수에서 반환된 추가 정보를 사용할 수 있습니다.

예제

모두 축소

이미지 모음을 위한 데이터저장소를 만들고 데이터저장소의 모든 이미지에 동일한 변환을 적용합니다. 예를 들어, 모음에 있는 모든 이미지의 크기를 지정된 대상 크기로 조정합니다.

두 개의 이미지가 있는 ImageDatastore를 만듭니다.

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

                       Files: {
                              ' .../devel/bat/Bdoc23b/build/matlab/toolbox/matlab/demos/street1.jpg';
                              ' .../devel/bat/Bdoc23b/build/matlab/toolbox/matlab/imagesci/peppers.png'
                              }
                     Folders: {
                              '/mathworks/devel/bat/Bdoc23b/build/matlab/toolbox/matlab/demos';
                              '/mathworks/devel/bat/Bdoc23b/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 객체를 만들고 모든 데이터저장소에 동일한 변환을 적용합니다. 예를 들어, 여러 이미지를 하나의 사각형 타일 형식 이미지로 결합합니다.

한 개의 이미지가 있는 ImageDatastore를 만듭니다.

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

                       Files: {
                              ' .../devel/bat/Bdoc23b/build/matlab/toolbox/matlab/demos/ngc6543a.jpg'
                              }
                     Folders: {
                              '/mathworks/devel/bat/Bdoc23b/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)

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

입력 인수

모두 축소

입력 데이터저장소입니다. 내장된 데이터저장소의 전체 목록을 보려면 파일 형식 또는 응용 프로그램에 맞는 데이터저장소 선택하기 항목을 참조하십시오. 사용자 지정 데이터저장소를 지정할 수도 있습니다.

데이터를 변환하는 함수로, 함수 핸들로 지정됩니다. 이 함수는 데이터를 입력값으로 받아 fcn에 정의된 변환을 기반으로 변환된 데이터를 반환합니다.

변환 함수는 다음과 같은 시그니처를 가져야 하며 ds1_data,ds2_data,...dsN_dataread 함수를 사용하여 반환된 데이터와 동일한 형식이어야 합니다.

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 구조체의 추출된 데이터에 대한 정보를 반환합니다. 자세한 내용은 read 함수 도움말 페이지를 참조하십시오.

IncludeInfo의 값을 true로 설정할 경우 변환 함수 fcn에 대한 대체 시그니처를 사용해야 합니다.

출력 인수

모두 축소

변환된 데이터를 갖는 새 데이터저장소로, TransformedDatastore 객체로 반환됩니다.

확장 기능

버전 내역

R2019a에 개발됨