Main Content

rgb2ind

RGB 이미지를 인덱스 이미지로 변환

설명

예제

[X,cmap] = rgb2ind(RGB,Q)는 양자화된 색이 Q개인 최소 분산 양자화(Minimum Variance Quantization)와 디더링을 사용하여 RGB 이미지를 인덱스 이미지 X와 그에 연결된 컬러맵 cmap으로 변환합니다.

[X,cmap] = rgb2ind(RGB,tol)은 허용오차가 tol인 균일 양자화(Uniform Quatization)와 디더링을 사용하여 RGB 이미지를 인덱스 이미지로 변환합니다.

X = rgb2ind(RGB,inmap)은 지정된 컬러맵 inmap에서의 역 컬러맵(inverse colormap) 알고리즘과 디더링을 사용하여 RGB 이미지를 인덱스 이미지로 변환합니다.

___ = rgb2ind(___,dithering)은 디더링을 활성화하거나 비활성화합니다.

예제

모두 축소

성운의 트루컬러 uint8 JPEG 이미지를 읽고 표시합니다.

RGB = imread('ngc6543a.jpg');
figure
imagesc(RGB)
axis image
zoom(4)

Figure contains an axes object. The axes object contains an object of type image.

RGB를 32색의 인덱스 이미지로 변환합니다.

[IND,map] = rgb2ind(RGB,32);
figure
imagesc(IND)
colormap(map)
axis image
zoom(4)

Figure contains an axes object. The axes object contains an object of type image.

입력 인수

모두 축소

RGB 이미지로, m×n×3 배열로 지정됩니다.

데이터형: single | double | uint8 | uint16

최소 분산 양자화에 사용되는 양자화된 색의 개수로, 65,536보다 작거나 같은 양의 정수로 지정됩니다. 반환되는 컬러맵 cmapQ개 이하의 색을 갖습니다.

균일 양자화에 사용되는 허용오차로, [0, 1] 범위의 숫자로 지정됩니다. 반환되는 컬러맵 cmap(floor(1/tol)+1)^3개 이하의 색을 갖습니다.

입력 컬러맵으로, 범위 [0, 1]의 값으로 구성된 c×3 행렬로 지정됩니다. inmap의 각 행은 컬러맵의 하나의 색에 대한 빨간색, 녹색, 파란색 성분을 지정하는, 요소를 3개 가진 RGB 3색입니다. 컬러맵은 최대 65,536개의 색을 갖습니다.

데이터형: double

디더링 수행 여부로, 'dither' 또는 'nodither'로 지정됩니다. 디더링을 수행하면 공간 해상도가 희생되는 대신 색 해상도가 높아집니다. 자세한 내용은 dither를 참조하십시오.

'nodither'를 선택하면 rgb2ind는 디더링을 수행하지 않습니다. 그 대신 이 함수는 원본 이미지의 각 색을 새 컬러맵의 가장 가까운 색으로 매핑합니다.

출력 인수

모두 축소

인덱스 이미지로, 음이 아닌 정수로 구성된 m×n 행렬로 반환됩니다. map의 길이가 256보다 작거나 같은 경우 출력 이미지는 uint8형 클래스입니다. 그렇지 않은 경우 출력 이미지는 uint16형 클래스입니다. 출력 배열 X에서 값 0은 컬러맵에서 첫 번째 색에 대응합니다.

참고

이미지 X의 값은 컬러맵 map에 대한 인덱스이고 필터링 작업과 같은 수학적 처리에서는 사용되어선 안 됩니다.

데이터형: uint8 | uint16

컬러맵으로, [0, 1] 범위의 값으로 구성된 c×3 행렬로 반환됩니다. cmap의 각 행은 컬러맵의 하나의 색에 대한 빨간색, 녹색, 파란색 성분을 지정하는, 요소를 3개 가진 RGB 3색입니다. 컬러맵은 최대 65,536개의 색을 갖습니다.

데이터형: double

알고리즘

  • 균일 양자화 — tol을 지정하는 경우 rgb2ind는 균일 양자화를 사용하여 이미지를 변환합니다. 균일 양자화는 RGB 색 큐브를 길이 tol의 작은 큐브로 자릅니다. 예를 들어, tol에 0.1을 지정하면 큐브 모서리는 RGB 큐브 길이의 1/10입니다. 전체 작은 큐브 개수는 다음과 같습니다.

    t = (floor(1/tol)+1)^3
    

    각 큐브는 출력 이미지에서 한 가지 색을 나타냅니다. 따라서, 컬러맵의 최대 길이는 t입니다. rgb2ind는 입력 이미지에 나타나지 않는 색은 제외하므로, 실제 컬러맵은 t보다 작을 수 있습니다.

  • 최소 분산 양자화 — Q를 지정하는 경우 rgb2ind는 최소 분산 양자화를 사용합니다. 최소 분산 양자화는 이미지에 색이 분산된 방식에 따라, RGB 색 큐브를 다양한 크기의 작은 상자(큐브일 필요는 없음)로 자릅니다. 입력 이미지가 실제로 지정한 것보다 더 적은 수의 색을 사용하는 경우, 출력 컬러맵도 작아집니다.

  • 역 컬러맵 — 입력 컬러맵 inmap을 지정하는 경우 rgb2ind는 컬러맵 매핑을 사용합니다. 역 컬러맵 알고리즘은 지정한 컬러맵을 색 구성요소당 32개의 수준으로 양자화합니다. 그런 다음, 입력 이미지의 각 픽셀에 대해 양자화된 컬러맵에서 가장 근접한 색을 찾습니다.

참고 문헌

[1] Spencer W. Thomas, "Efficient Inverse Color Map Computation", Graphics Gems II, (ed. James Arvo), Academic Press: Boston. 1991. (includes source code)

버전 내역

R2006a 이전에 개발됨

참고 항목

| | |

도움말 항목