Main Content

8비트 및 16비트 이미지

인덱스 이미지

배정밀도(64비트) 부동소수점 숫자는 숫자형 데이터에 대한 디폴트 MATLAB® 표현입니다. 그러나, 이미지 작업에 필요한 메모리 요구 사항을 줄이기 위해 숫자형 클래스 uint8형 또는 uint16형을 사용하여 각각 8비트나 16비트 부호 없는 정수로 이미지를 저장할 수 있습니다. 데이터 행렬에 uint8형 클래스가 포함된 이미지를 8비트 이미지라고 하고, 데이터 행렬에 uint16형 클래스가 포함된 이미지를 16비트 이미지라고 합니다.

image 함수는 8비트 이미지 또는 16비트 이미지의 경우 배정밀도로 변환하지 않고 바로 표시할 수 있습니다. 하지만, image는 이미지 행렬이 uint8형이나 uint16형인 경우 조금 다르게 행렬 값을 해석합니다. 해석 방식은 이미지 유형에 따라 달라집니다.

X의 클래스가 uint8형이거나 uint16형인 경우에는 컬러맵 인덱스로 사용되기 전에 인덱스 값이 1씩 오프셋됩니다. 값 0이 컬러맵의 첫 번째 행을, 값 1이 두 번째 행을 가리키는 식으로 진행됩니다. image 명령은 적절한 오프셋을 자동으로 제공하므로 Xdouble형, uint8형, uint16형 중 무엇이든지 상관없이 표시 방법이 동일합니다.

image(X); colormap(map);

uint8형 및 uint16형 데이터에 대한 컬러맵 인덱스 오프셋은 표준 그래픽스 파일 형식을 지원하기 위해 작성되었습니다. 표준 그래픽스 파일 형식은 일반적으로 256색 컬러맵에 대한 인덱싱 형식으로 이미지 데이터를 저장합니다. 오프셋을 사용하면 메모리 효율성이 더 높은 uint8형 배열과 uint16형 배열을 사용하여 인덱싱 형식의 이미지를 조작하고 표시할 수 있습니다.

오프셋으로 인해, uint8형 또는 uint16형 인덱스 이미지를 double형으로 변환하려면 1을 더해야 합니다. 예를 들면 다음과 같습니다.

X64 = double(X8) + 1;
	or
X64 = double(X16) + 1;

이와 반대로, double형 인덱스 이미지를 uint8형이나 uint16형으로 변환하려면 1을 빼야 합니다.

X8 = uint8(X64 - 1);
	or
X16 = uint16(X64 - 1);

명암 이미지

double형 이미지 배열의 범위는 일반적으로 [0, 1]이지만, 8비트 명암 이미지의 범위는 일반적으로 [0, 255]이며 16비트 명암 이미지 범위는 일반적으로 [0, 65535]입니다. 회색조 컬러맵을 사용하여 8비트 명암 이미지를 표시하려면 다음 명령을 사용하십시오.

imagesc(I,[0 255]); colormap(gray);

double형에서 uint16형으로 명암 이미지를 변환하려면 우선 65535를 곱해야 합니다.

I16 = uint16(round(I64*65535));

이와 반대로, uint16형 명암 이미지를 double형으로 변환하려면 변환 후에 65535로 나눠야 합니다.

I64 = double(I16)/65535;

RGB 이미지

8비트 RGB 이미지의 색 성분은 범위 [0, 1]의 부동소수점 값이 아니라 범위 [0, 255]의 정수입니다. 색 성분이 (255,255,255)인 픽셀은 흰색으로 표시됩니다. image 명령은 클래스가 double형, uint8형, uint16형 중 무엇이든지 상관없이 RGB 이미지를 올바르게 표시합니다.

image(RGB);

RGB 이미지를 double형에서 uint8형으로 변환하려면 우선 255를 곱해야 합니다.

RGB8 = uint8(round(RGB64*255));

이와 반대로, uint8형의 RGB 이미지를 double형으로 변환하려면 변환 후에 255로 나눠야 합니다.

RGB64 = double(RGB8)/255

RGB 이미지를 double형에서 uint16형으로 변환하려면 우선 65535를 곱해야 합니다.

RGB16 = uint16(round(RGB64*65535));

이와 반대로, uint16형의 RGB 이미지를 double형으로 변환하려면 변환 후에 65535로 나눠야 합니다.

RGB64 = double(RGB16)/65535;

uint8형 및 uint16형에 대한 수학 연산 지원

다음 MATLAB 함수를 uint8형 데이터나 uint16형 데이터에 사용하려면 먼저 데이터를 double형으로 변환해야 합니다.

예를 들어, Xuint8형 이미지인 경우 데이터를 double형으로 형변환합니다.

fft(double(X))

이 경우 출력값은 항상 double형입니다.

sum 함수는 입력값과 동일한 형식의 결과값을 반환하지만, 계산에 배정밀도를 사용할 수 있는 옵션을 제공합니다.

MATLAB 정수 수학

수학 함수가 double형이 아닌 데이터형에서 어떻게 작동하는지에 대한 자세한 내용은 정수 클래스에 대해 산술 연산하기 항목을 참조하십시오.

대부분의 Image Processing Toolbox™ 함수는 uint8형 입력값과 uint16형 입력값을 받습니다. uint8형 데이터나 uint16형 데이터에 대해 정교한 영상 처리를 수행해야 한다면 MATLAB 연산 환경에 이 툴박스를 추가해 구축하는 것이 좋습니다.

기타 8비트 및 16비트 배열 지원

uint8형 배열과 uint16형 배열에 대해 다음을 포함하여 기타 여러 가지 작업을 수행할 수 있습니다.

  • 함수 reshape, cat, permute[]' 연산자를 사용하여 배열 형태 변경(reshape), 재정렬(Reordering) 및 결합(Concatenate)

  • saveload를 사용하여 MAT 파일에 uint8형 배열 및 uint16형 배열 저장 및 불러오기. (그래픽스 파일 형식 이미지를 불러오거나 저장하는 경우 명령 imreadimwrite를 대신 사용해야 함을 명심하십시오.)

  • find를 사용하여 uint8형 배열과 uint16형 배열에서 0이 아닌 요소로 구성된 인덱스 찾기. 단, 반환되는 배열은 항상 double형 클래스입니다.

  • 관계 연산자

8비트 RGB 이미지를 회색조 이미지로 변환하기

정수 데이터에 대해 산술 연산을 수행할 수 있습니다. 이를 통해 이미지 데이터의 숫자형 클래스를 우선적으로 변환할 필요 없이 이미지 유형을 변환할 수 있습니다.

이 예제에서는 8비트 RGB 이미지를 MATLAB 변수로 읽어온 후 회색조 이미지로 변환합니다.

rgb_img = imread('ngc6543a.jpg'); % Load the image
image(rgb_img) % Display the RGB image

axis image;

Color image displayed in axes

참고

이 이미지는 NASA 계약 NAs5-26555 하에 Association of Universities for Research in Astronomy, Inc에서 운영하는 Space Telescope Science Institute의 지원을 받아 생성되었으며 AURA/STScI의 승인을 받아 재현되었습니다. AURA/STScI에서 생성한 이미지의 디지털 변환은 무료로 얻을 수 있습니다. 출처: J.P. Harrington 및 K.J. Orkowski(메릴랜드 대학교) 및 NASA.

NTSC 표준에 따라 RGB 값을 결합하여 단색 휘도를 계산합니다. 즉, 시감도(Eye's Sensitivity)와 관련된 계수를 RGB 색에 적용합니다.

I = .2989*rgb_img(:,:,1)...
	+.5870*rgb_img(:,:,2)...
	+.1140*rgb_img(:,:,3);

I는 정수 값으로 표현된 명암 이미지로, 정수 값의 범위는 최솟값이 0이며

min(I(:))
ans =
	0

최댓값이 255입니다.

max(I(:))
ans = 
	255

이 이미지를 표시하기 위해서는 256개의 값을 가지는 회색조 컬러맵을 사용해야 합니다. 그러면 데이터와 색 간의 매핑을 스케일링할 필요가 없습니다. 하지만 다른 크기의 컬러맵을 사용하는 경우 스케일링 작업이 필요합니다. 컬러맵에 각 데이터 값에 대한 항목이 포함되어 있지 않을 경우 imagesc 함수를 사용하십시오.

이제 회색 컬러맵을 사용하여 새 Figure에 이미지를 표시합니다.

figure; colormap(gray(256)); image(I);
axis image;

Color image displayed using a grayscale colormap appears gray

관련 정보

컬러맵 중에는 진한 색에서 연한 색으로 부드럽게 변하는 색 범위를 가지는 게 있는데, 이를 사용하면 유용한 이미지를 생성할 수 있습니다. 예를 들어, 전형적인 오실로스코프 보기에 colormap(summer(256))을 사용할 수 있습니다. 추가 옵션은 colormap을 참조하십시오.

brighten 함수를 사용하면 컬러맵에서 색 농도를 높이거나 낮춰 컴퓨터 디스플레이 차이를 보정하거나 이미지에서 희미하거나 흐린 영역에 대한 가시성을 향상시킬 수 있습니다(반대쪽 범위는 희생).

이미지 유형 및 숫자형 클래스 요약

이 표에서는 이미지 유형과 데이터 클래스에 따라 데이터 행렬 요소가 픽셀 색으로 어떻게 해석되는지를 요약하여 보여줍니다.

이미지 유형

double형 데이터

uint8형 데이터 또는 uint16형 데이터

인덱스

이미지는 범위 [1, p]의 정수로 구성된 m×n 배열입니다.

컬러맵은 범위 [0, 1]의 부동소수점 값으로 구성된 p×3 배열입니다.

이미지는 범위 [0, p –1]의 정수로 구성된 m×n 배열입니다.

컬러맵은 범위 [0, 1]의 부동소수점 값으로 구성된 p×3 배열입니다.

농도

이미지는 컬러맵 인덱스를 생성하기 위해 선형 스케일링된 부동소수점 값으로 구성된 m×n 배열입니다. 일반적인 값의 범위는 [0, 1]입니다.

컬러맵은 범위 [0, 1]의 부동소수점 값으로 구성된 p×3 배열이며, 일반적으로 회색조입니다.

이미지는 컬러맵 인덱스를 생성하기 위해 선형 스케일링된 정수로 구성된 m×n 배열입니다. 일반적인 값의 범위는 [0, 255] 또는 [0, 65535]입니다.

컬러맵은 범위 [0, 1]의 부동소수점 값으로 구성된 p×3 배열이며, 일반적으로 회색조입니다.

RGB(트루컬러)

이미지는 범위 [0, 1]의 부동소수점 값으로 구성된 m×n×3 배열입니다.

이미지는 범위 [0, 255] 또는 [0, 65535]의 정수로 구성된 m×n×3 배열입니다.