Main Content

이미지 파일 읽기, 쓰기 및 쿼리

이미지 형식 사용

그래픽스 파일 형식 이미지의 원래 형식은 MATLAB® 행렬로 저장되는 형식이 아니며, 행렬로 저장하려 해도 저장되지 않습니다. 대부분의 그래픽스 파일은 형식별 정보 태그를 포함하는 헤더로 시작하며, 연속적인 스트림으로 읽어올 수 있는 비트맵 데이터로 이어집니다. 이러한 이유로 인해 표준 MATLAB I/O 명령 loadsave를 사용하여 그래픽스 파일 형식 이미지를 읽고 쓸 수 없습니다.

그래픽스 파일 형식에서 이미지 데이터를 읽고 쓰려면 특수 MATLAB 함수를 호출해야 합니다.

  • 그래픽스 파일 형식 이미지를 읽기 위해서는 imread를 사용합니다.

  • 그래픽스 파일 형식 이미지를 쓰기 위해서는 imwrite를 사용합니다.

  • 그래픽스 파일 형식 이미지 특성에 대한 정보를 얻기 위해서는 imfinfo를 사용합니다.

이 표에서는 이미지 유형에 따라 사용해야 하는 MATLAB 명령이 명확하게 나와 있습니다.

절차

사용할 함수

행렬을 MAT 파일로 불러오거나 저장합니다.

load

save

그래픽스 파일 형식 이미지(예: BMP, TIFF)를 불러오거나 저장합니다.

imread

imwrite

MATLAB 작업 공간으로 불러온 이미지를 표시합니다.

image

imagesc

유틸리티

imfinfo

ind2rgb

그래픽스 이미지 읽기

imread 함수는 지원되는 모든 그래픽스 이미지 파일에서 지원되는 어떠한 비트 심도(Bit Depth)로도 이미지를 읽을 수 있습니다. 읽어 들이는 이미지는 대부분 8비트입니다. 이렇게 메모리로 읽어온 이미지는 uint8형 클래스로 저장됩니다. 이 규칙의 기본적인 예외는 PNG 및 TIFF 이미지의 경우 MATLAB에서 16비트 데이터가 지원된다는 점입니다. 즉, 16비트 PNG나 TIFF 이미지를 읽어 들이는 경우 이 이미지는 uint16형 클래스로 저장됩니다.

참고

인덱스 이미지의 경우, 이미지 배열 자체가 uint8형 또는 uint16형 클래스더라도 imread는 항상 컬러맵을 double형 클래스의 배열로 읽어옵니다.

다음 명령은 이미지 ngc6543a.jpg를 작업 공간 변수 RGB로 읽어온 후 image 함수를 사용하여 이미지를 표시합니다.

RGB = imread('ngc6543a.jpg');
image(RGB)

imwrite 함수를 사용하여 이미지 데이터를 쓸(저장) 수 있습니다. 다음 명령문은

load clown % An image that is included with MATLAB
imwrite(X,map,'clown.bmp')

광대 이미지를 포함하는 BMP 파일을 생성합니다.

그래픽스 이미지 쓰기

imwrite를 사용하여 이미지를 저장하는 경우 디폴트 동작은 비트 심도(Bit Depth)를 uint8로 자동으로 줄이는 것입니다. MATLAB에 사용되는 많은 이미지는 8비트이며, 대부분의 그래픽스 파일 형식 이미지에는 배정밀도 데이터가 필요하지 않습니다. 이미지 데이터를 uint8형으로 저장하는 데 대한 규칙의 한 가지 예외는 PNG 이미지와 TIFF 이미지를 uint16형으로 저장할 수 있다는 점입니다. 이들 두 가지 형식은 16비트 데이터를 지원하므로 imwrite에 대한 데이터형으로 uint16을 지정하여 MATLAB의 디폴트 동작을 재정의할 수 있습니다. 다음 예제에서는 imwrite를 사용하여 16비트 PNG 파일을 쓰는 방법을 보여줍니다.

imwrite(I,'clown.png','BitDepth',16);

그래픽스 이미지 서브셋 설정(자르기)

이미지 파일의 일부분만 사용하여 작업하거나 이미지를 하위 섹션으로 나누어야 하는 경우가 있습니다. 명령줄에 작업하려는 사각형 하위 섹션의 내재적 좌표를 지정하고 파일로 저장합니다. 하위 섹션에서 각 코너의 점 좌표를 모르는 경우 다음 예제와 같이 대화형 방식으로 선택합니다.

% Read RGB image from graphics file. 
im = imread('street2.jpg'); 

% Display image with true aspect ratio
image(im); axis image

% Use ginput to select corner points of a rectangular
% region by pointing and clicking the mouse twice
p = ginput(2); 

% Get the x and y corner coordinates as integers
sp(1) = min(floor(p(1)), floor(p(2))); %xmin
sp(2) = min(floor(p(3)), floor(p(4))); %ymin
sp(3) = max(ceil(p(1)), ceil(p(2)));   %xmax
sp(4) = max(ceil(p(3)), ceil(p(4)));   %ymax

% Index into the original image to create the new image
MM = im(sp(2):sp(4), sp(1): sp(3),:);

% Display the subsetted image with appropriate axis ratio
figure; image(MM); axis image

% Write image to graphics file. 
imwrite(MM,'street2_cropped.tif') 

이미지 각 코너의 좌표를 아는 경우에는 위 예제에서 ginput을 사용하는 대신 직접 sp를 정의할 수 있습니다.

또한 이미지와 상호 작용하여 서브셋을 설정할 때 "고무줄 상자"(Rubber Band Box)를 표시할 수도 있습니다. 자세한 내용은 rbbox에 대한 코드 예제를 참조하십시오. 자세한 내용은 ginput 함수와 image 함수에 대한 도움말 문서를 참조하십시오.

그래픽스 파일에 대한 정보 얻기

imfinfo 함수를 사용하면 앞에서 나열한 모든 표준 형식의 그래픽스 파일에 대한 정보를 얻을 수 있습니다. 파일 형식에 따라 얻는 정보가 다르지만, 최소한 다음의 정보가 항상 포함됩니다.

  • 파일 이름(파일이 현재 폴더에 있지 않을 경우 폴더 경로 포함)

  • 파일 형식

  • 파일 형식의 버전 번호

  • 파일 수정 날짜

  • 파일 크기(단위: 바이트)

  • 이미지 너비(단위: 픽셀)

  • 이미지 높이(단위: 픽셀)

  • 픽셀당 비트 수

  • 이미지 유형: RGB(트루컬러), 농도(회색조) 또는 인덱스