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
명령은 적절한 오프셋을 자동으로 제공하므로 X
가 double
형, 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
형으로 변환해야 합니다.
예를 들어, X
가 uint8
형 이미지인 경우 데이터를 double
형으로 형변환합니다.
fft(double(X))
이 경우 출력값은 항상 double
형입니다.
sum
함수는 입력값과 동일한 형식의 결과값을 반환하지만, 계산에 배정밀도를 사용할 수 있는 옵션을 제공합니다.
MATLAB 정수 수학
수학 함수가 double형이 아닌 데이터형에서 어떻게 작동하는지에 대한 자세한 내용은 정수 클래스에 대해 산술 연산하기 항목을 참조하십시오.
대부분의 Image Processing Toolbox™ 함수는 uint8
형 입력값과 uint16
형 입력값을 받습니다. uin
t8형 데이터나 uint16
형 데이터에 대해 정교한 영상 처리를 수행해야 한다면 MATLAB 연산 환경에 이 툴박스를 추가해 구축하는 것이 좋습니다.
기타 8비트 및 16비트 배열 지원
uint8
형 배열과 uint16
형 배열에 대해 다음을 포함하여 기타 여러 가지 작업을 수행할 수 있습니다.
함수
reshape
,cat
,permute
와[]
및'
연산자를 사용하여 배열 형태 변경(reshape), 재정렬(Reordering) 및 결합(Concatenate)save
와load
를 사용하여 MAT 파일에uint8
형 배열 및uint16
형 배열 저장 및 불러오기. (그래픽스 파일 형식 이미지를 불러오거나 저장하는 경우 명령imread
와imwrite
를 대신 사용해야 함을 명심하십시오.)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;
참고
이 이미지는 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;
관련 정보
컬러맵 중에는 진한 색에서 연한 색으로 부드럽게 변하는 색 범위를 가지는 게 있는데, 이를 사용하면 유용한 이미지를 생성할 수 있습니다. 예를 들어, 전형적인 오실로스코프 보기에 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 배열입니다. |