이미지 파일 읽기, 쓰기 및 쿼리
이미지 형식 사용
그래픽스 파일 형식 이미지의 원래 형식은 MATLAB® 행렬로 저장되는 형식이 아니며, 행렬로 저장하려 해도 저장되지 않습니다. 대부분의 그래픽스 파일은 형식별 정보 태그를 포함하는 헤더로 시작하며, 연속적인 스트림으로 읽어올 수 있는 비트맵 데이터로 이어집니다. 이러한 이유로 인해 표준 MATLAB I/O 명령 load
및 save
를 사용하여 그래픽스 파일 형식 이미지를 읽고 쓸 수 없습니다.
그래픽스 파일 형식에서 이미지 데이터를 읽고 쓰려면 특수 MATLAB 함수를 호출해야 합니다.
그래픽스 파일 형식 이미지를 읽기 위해서는
imread
를 사용합니다.그래픽스 파일 형식 이미지를 쓰기 위해서는
imwrite
를 사용합니다.그래픽스 파일 형식 이미지 특성에 대한 정보를 얻기 위해서는
imfinfo
를 사용합니다.
이 표에서는 이미지 유형에 따라 사용해야 하는 MATLAB 명령이 명확하게 나와 있습니다.
그래픽스 이미지 읽기
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(트루컬러), 농도(회색조) 또는 인덱스