본문 바로가기

MATLAB/ㄴ 기타

26. 이미지 가져오기

그래픽스 파일에서 MATLAB 작업 공간으로 데이터를 가져오려면 imread 함수를 사용하십시오. 

이 함수를 사용하면 TIFF, GIF, JPEG, PNG 형식을 비롯한 여러 표준 파일 형식의 파일에서 데이터를 가져올 수 있습니다.

지원되는 형식의 전체 목록은 imread 함수 도움말 페이지를 참조하십시오.

이 예제에서는 JPEG 형식의 파일에 저장된 이미지 데이터를 다음과 같은 배열 I로 MATLAB 작업 공간으로 읽어옵니다.

 

imread는 이미지를 작업 공간에 uint8 클래스의 다차원 배열로 나타냅니다.

배열의 차원은 데이터의 형식에 따라 다릅니다.

예를 들어, imread는 RGB 색 이미지를 나타내는 데 3차원을 사용합니다.

 

TIFF 파일을 읽어올 때 더욱 세부적으로 제어하려면 Tiff 객체를 사용하십시오.

 


 

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

표준 그래픽스 형식의 파일이 있는 경우에는 imfinfo 함수를 사용하여 파일의 내용에 대한 정보를 얻을 수 있습니다.

imfinfo 함수는 파일에 대한 정보를 포함하는 구조체를 반환합니다.

구조체의 필드는 파일 형식에 따라 달라지지만,

imfinfo는 항상 파일 이름, 마지막 수정 날짜, 파일 크기, 형식을 포함한 일부 기본 정보를 반환합니다.

이 예제에서는 JPEG 형식의 파일에 대한 정보를 반환합니다.

 


 

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

imread 함수에는 몇 가지 제한 사항이 있습니다. 

예를 들어, TIFF 파일은 여러 개의 이미지를 포함할 수 있고 각 이미지는 부분 이미지를 가질 수 있습니다.

imread를 사용하면 여러 이미지가 포함된 TIFF 파일에서 모든 이미지를 읽어올 수 있지만,

부분 이미지에는 액세스할 수 없습니다.

이런 경우, Tiff 객체를 사용하면 TIFF 파일에서 이미지 데이터, 메타데이터, 부분 이미지를 읽어올 수 있습니다.

Tiff 객체를 생성하면 이 객체는 TIFF 파일과의 연결을 나타내고 LibTIFF 라이브러리에 포함된 루틴 중

다수에 대한 액세스를 제공합니다.

Tiff 객체 메서드와 속성을 사용하여 TIFF 파일에서 부분 이미지를 읽어오는 단계별 예제가 다음에 나와 있습니다. 

Tiff 객체를 최대한 활용하려면 TIFF 사양과 기술적인 내용을 잘 알고 있어야 합니다. 

 

TIFF 파일에서 부분 이미지 읽어오기
TIFF 파일은 하나 이상의 이미지 파일 디렉터리(IFD)를 포함할 수 있습니다. 

각 IFD에는 이미지 데이터와 그 이미지와 연관된 메타데이터(태그)가 포함됩니다. 

각 IFD는 하나 이상의 서브IFD를 포함할 수 있고, 서브IFD 역시 이미지 데이터와 메타데이터를 포함할 수 있습니다.

부분 이미지는 일반적으로 자신의 서브IFD를 포함하는 IFD에 있는 이미지 데이터의 축소판 버전입니다.

IFD에서 부분 이미지를 읽어오려면 서브IFD 태그에서 부분 이미지의 위치를 가져와야 합니다.

서브IFD 태그는 부분 이미지를 가리키는 바이트 오프셋으로 구성된 배열을 포함합니다.

그런 다음 서브IFD의 주소를 setSubDirectory 메서드로 전달하여 서브IFD를 현재 IFD로 설정할 수 있습니다.

대부분의 Tiff 객체 메서드는 현재 IFD에서 동작합니다.

1. Tiff 객체 생성자를 사용하여 이미지와 부분 이미지를 포함하는 TIFF 파일을 엽니다. 

이 예제에서는 TIFF 파일 서브디렉터리 만들기에서 생성한 TIFF 파일을 사용합니다. 

이 파일에는 한 개의 IFD 디렉터리가 들어 있으며, 그 디렉터리에는 두 개의 서브IFD가 포함되어 있습니다. 

Tiff 생성자는 TIFF 파일을 열고 파일의 첫 번째 서브IFD를 현재 IFD로 설정합니다.

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


2. 현재 IFD와 연결된 서브IFD의 위치를 검색합니다.

getTag 메서드를 사용하여 서브IFD 태그의 값을 가져옵니다.

이 메서드는 서브IFD의 위치를 지정하는 바이트 오프셋으로 구성된 배열을 반환합니다.

offsets = getTag(t,'SubIFD')


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

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

dirNum = 1; 
setDirectory(t,dirNum);

 

4. 그런 다음 setSubDirectory 메서드를 사용하여 첫 번째 서브IFD로 이동합니다.

서브IFD의 바이트 오프셋을 인수로 지정합니다.

다음 호출을 통해 서브IFD가 현재 IFD로 설정됩니다.

setSubDirectory(t,offsets(1));

 

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

subimage_one = read(t);


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

imagesc(subimage_one)

 

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

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

setDirectory(t,dirNum);

 

8. 그런 다음 setSubDirectory 메서드를 사용하여 두 번째 서브IFD로 이동합니다.

두 번째 서브IFD의 바이트 오프셋을 지정합니다.

setSubDirectory(t,offsets(2));

 

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

subimage_two = read(t);


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

imagesc(subimage_two)

 

11. Tiff 객체를 닫습니다.

close(t);

 


 

https://kr.mathworks.com/help/matlab/import_export/importing-images.html

 

이미지 가져오기 - MATLAB & Simulink - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com