Main Content

이미지 가져오기

그래픽스 파일에서 MATLAB® 작업 공간으로 데이터를 가져오려면 imread 함수를 사용하십시오. 이 함수를 사용하면 TIFF(Tagged Image File Format), GIF(Graphics Interchange Format), JPEG(Joint Photographic Experts Group), PNG(Portable Network Graphics) 형식을 비롯한 여러 표준 파일 형식의 파일에서 데이터를 가져올 수 있습니다. 지원되는 형식의 전체 목록은 imread 함수 도움말 페이지를 참조하십시오.

예를 들어, JPEG 형식의 파일에 저장된 이미지 데이터를 배열 I로 MATLAB 작업 공간으로 읽어옵니다.

I = imread("ngc6543a.jpg");

imread는 이미지를 작업 공간에 uint8 클래스의 다차원 배열로 나타냅니다. 배열의 차원은 데이터의 형식에 따라 다릅니다. 예를 들어, imread는 RGB 색 이미지를 나타내는 데 3차원을 사용합니다.

whos I
  Name        Size                 Bytes  Class    Attributes

  I         650x600x3            1170000  uint8              

TIFF 파일을 읽어올 때 더욱 세부적으로 제어하려면 Tiff 객체를 사용하십시오. 자세한 내용은 TIFF 파일에서 이미지 데이터와 메타데이터 읽어오기 항목을 참조하십시오.

이미지 파일에 대한 정보 가져오기

표준 그래픽스 형식의 파일이 있는 경우에는 imfinfo 함수를 사용하여 이 파일의 내용에 대한 정보를 얻을 수 있습니다. imfinfo 함수는 파일에 대한 정보를 포함하는 구조체를 반환합니다. 구조체의 필드는 파일 형식에 따라 달라지지만, imfinfo는 항상 파일 이름, 마지막 수정 날짜, 파일 크기, 형식을 포함한 일부 기본 정보를 반환합니다.

예를 들어, JPEG(Joint Photographic Experts Group) 형식의 파일에 대한 정보를 가져올 수 있습니다.

info = imfinfo("ngc6543a.jpg")
info = 

           Filename: 'current_directory\ngc6543a.jpg'
        FileModDate: '01-Oct-1996 16:19:44'
           FileSize: 27387
             Format: 'jpg'
      FormatVersion: ''
              Width: 600
             Height: 650
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {'CREATOR: XV Version 3.00b  Rev: 6/15/94  Quality = 75, Smoothing = 0↵'}

TIFF 파일에서 이미지 데이터와 메타데이터 읽어오기

imread를 사용하여 TIFF 파일에서 이미지 데이터와 메타데이터를 가져올 수 있지만, 이 함수에는 몇 가지 제한 사항이 있습니다. 예를 들어, TIFF 파일은 여러 개의 이미지를 포함할 수 있고 각 이미지는 여러 개의 부분 이미지를 가질 수 있습니다. imread를 사용하면 여러 이미지가 포함된 TIFF 파일에서 모든 이미지를 읽어올 수 있지만, 부분 이미지에는 액세스할 수 없습니다. 이런 경우, Tiff 객체를 사용하면 TIFF 파일에서 이미지 데이터, 메타데이터, 부분 이미지를 읽어올 수 있습니다. Tiff 객체를 생성하면 이 객체는 TIFF 파일과의 연결을 나타내고 LibTIFF 라이브러리에 포함된 루틴 중 다수에 대한 액세스를 제공합니다.

이 예제에는 Tiff 객체 메서드와 속성을 사용하여 TIFF 파일에서 부분 이미지를 읽어오는 단계별 설명이 나와 있습니다. Tiff 객체를 최대한 활용하려면 TIFF 사양과 기술적인 내용을 잘 알고 있어야 합니다. LibTIFF - TIFF Library and Utilities의 문서를 참조하십시오.

TIFF 파일에서 부분 이미지 읽어오기

TIFF 파일은 하나 이상의 이미지 파일 디렉터리(IFD)를 포함할 수 있습니다. 각 IFD에는 이미지 데이터와 그 이미지와 연관된 메타데이터(태그)가 포함됩니다. 각 IFD는 하나 이상의 subIFD를 포함할 수 있고, subIFD 역시 이미지 데이터와 메타데이터를 포함할 수 있습니다. 부분 이미지는 일반적으로 자신의 subIFD를 포함하는 IFD에 있는 이미지 데이터의 축소된 해상도(축소판) 버전입니다.

IFD에서 부분 이미지를 읽어오려면 SubIFD 태그에서 부분 이미지의 위치를 가져와야 합니다. SubIFD 태그는 부분 이미지를 가리키는 바이트 오프셋으로 구성된 배열을 포함합니다. 그런 다음 subIFD의 주소를 setSubDirectory 메서드로 전달하여 subIFD를 현재 IFD로 설정할 수 있습니다. 대부분의 Tiff 객체 메서드는 현재 IFD에서 동작합니다.

Tiff 객체 생성자를 사용하여 이미지와 부분 이미지를 포함하는 TIFF 파일을 엽니다. 이 예제에서는 TIFF 서브디렉터리 만들기에서 생성한 TIFF 파일을 사용합니다. 이 파일에는 두 개의 subIFD가 포함된 한 개의 IFD가 들어 있습니다. Tiff 생성자는 TIFF 파일을 열고 파일의 첫 번째 subIFD를 현재 IFD로 설정합니다.

t = Tiff("my_subimage_file.tif","r");

현재 IFD와 연결된 subIFD의 위치를 검색합니다. getTag 메서드를 사용하여 SubIFD 태그의 값을 가져옵니다. 이 메서드는 subIFD의 위치를 지정하는 바이트 오프셋으로 구성된 배열을 반환합니다.

offsets = getTag(t,"SubIFD");

첫 번째 부분 이미지로 이동합니다.

먼저, 현재 IFD를 첫 번째 부분 이미지가 포함된 디렉터리로 설정합니다.

dirNum = 1; 
setDirectory(t,dirNum)

그런 다음 setSubDirectory 메서드를 사용하여 첫 번째 subIFD로 이동합니다. subIFD의 바이트 오프셋을 인수로 지정합니다. 다음 호출을 통해 subIFD가 현재 IFD로 설정됩니다.

setSubDirectory(t,offsets(1))

파일에 있는 다른 IFD를 읽어오는 것과 같은 방식으로 현재 IFD(첫 번째 subIFD)에서 이미지 데이터를 읽어옵니다.

subimage_one = read(t);

첫 번째 부분 이미지를 확인합니다.

imagesc(subimage_one)

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

두 번째 부분 이미지로 이동합니다.

먼저, 현재 IFD를 두 번째 부분 이미지가 포함된 디렉터리로 재설정합니다.

setDirectory(t,dirNum)

그런 다음 setSubDirectory 메서드를 사용하여 두 번째 subIFD로 이동합니다. 두 번째 subIFD의 바이트 오프셋을 지정합니다.

setSubDirectory(t,offsets(2))

파일에 있는 다른 IFD를 읽어오는 것과 같은 방식으로 현재 IFD(두 번째 subIFD)에서 이미지 데이터를 읽어옵니다.

subimage_two = read(t);

두 번째 부분 이미지를 확인합니다.

imagesc(subimage_two)

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

Tiff 객체를 닫습니다.

close(t)

참고 항목

관련 항목