imquantize
지정된 양자화 수준 및 출력값을 사용하여 영상 양자화
구문
설명
예제
두 개의 임계값을 사용하여 영상을 3개의 수준으로 분할하기
영상을 읽어 들인 후 회색조 영상으로 변환하고 결과를 표시합니다.
I = imread("foggysf2.jpg"); I = rgb2gray(I); imshow(I) title("Grayscale Image")
두 개의 임계값 수준을 계산합니다.
thresh = multithresh(I,2);
imquantize
함수를 사용하여 영상을 3개의 수준으로 분할합니다.
labels = imquantize(I,thresh);
label2rgb
함수를 사용하여 분할된 영상을 컬러 영상으로 변환한 후 이 영상을 표시합니다.
labelsRGB = label2rgb(labels);
imshow(labelsRGB)
title("Segmented Image")
전체 영상 이진화와 평면별 이진화 비교하기
RGB 영상을 읽어 들여 표시합니다.
I = imread("peppers.png"); imshow(I) title("RGB Image");
전체 RGB 영상에서 7개 수준에 대한 임계값을 생성합니다.
threshRGB = multithresh(I,7);
RGB 영상의 각 평면에 대해 임계값을 생성합니다.
threshForPlanes = zeros(3,7); for i = 1:3 threshForPlanes(i,:) = multithresh(I(:,:,i),7); end
전체 영상에서 계산된 임계값 집합으로 전체 영상을 처리합니다.
value = [0 threshRGB(2:end) 255]; quantRGB = imquantize(I, threshRGB, value);
지정된 평면에서 계산된 임계값 벡터를 사용하여 각 RGB 평면을 개별적으로 처리합니다. 해당 평면에 대해 생성된 임계값 벡터를 사용하여 각 RGB 평면을 양자화합니다.
quantPlane = zeros(size(I)); for i = 1:3 value = [0 threshForPlanes(i,2:end) 255]; quantPlane(:,:,i) = imquantize(I(:,:,i),threshForPlanes(i,:),value); end quantPlane = uint8(quantPlane);
포스터화된 영상을 모두 표시한 후 두 이진화 방식의 시각적 차이를 확인합니다.
montage({quantRGB,quantPlane})
title("Full RGB Image Quantization vs. Plane-by-Plane Quantization")
결과를 비교하려면 각 출력 영상에서 고유한 RGB 픽셀 벡터의 개수를 계산하십시오. 평면별 이진화 방식은 전체 RGB 영상 이진화 방식보다 23% 많은 색을 생성함을 알 수 있습니다.
dim = size(quantRGB); quantRGBmx3 = reshape(quantRGB,prod(dim(1:2)),3); quantPlanemx3 = reshape(quantPlane,prod(dim(1:2)),3); colorsRGB = unique(quantRGBmx3,"rows"); disp("Unique colors in RGB image: "+length(colorsRGB));
Unique colors in RGB image: 188
colorsPlane = unique(quantPlanemx3,"rows"); disp("Unique colors in plane-by-plane image: "+length(colorsPlane));
Unique colors in plane-by-plane image: 231
회색조 영상에 임계값을 적용하여 256 수준에서 8 수준으로 만들기
영상의 이산 수준 개수를 256에서 8로 줄입니다. 이 예제에서는 서로 다른 두 가지 방법을 사용하여 8개 출력 수준 각각에 값을 할당합니다.
영상을 읽어 들인 후 이를 표시합니다.
I = imread('coins.png'); imshow(I) axis off title('Grayscale Image')
multithresh
함수로 7개의 임계값을 구하여 영상을 8개 수준으로 분할합니다.
thresh = multithresh(I,7);
각 양자화 구간의 최댓값이 출력 영상의 8개 수준에 할당되도록 valuesMax
벡터를 생성합니다.
valuesMax = [thresh max(I(:))]
valuesMax = 1x8 uint8 row vector
65 88 119 149 169 189 215 255
[quant8_I_max, index] = imquantize(I,thresh,valuesMax);
마찬가지로, 각 양자화 구간의 최솟값이 출력 영상의 8개 수준에 할당되도록 valuesMin
벡터를 생성합니다. 벡터 valuesMin
을 사용하여 다시 imquantize
를 호출하는 대신, 출력 인수 인덱스를 사용하여 값을 출력 영상에 할당합니다.
valuesMin = [min(I(:)) thresh]
valuesMin = 1x8 uint8 row vector
23 65 88 119 149 169 189 215
quant8_I_min = valuesMin(index);
8 수준 출력 영상 두 개를 나란히 표시합니다.
imshowpair(quant8_I_min,quant8_I_max,'montage') title('Minimum Interval Value Maximum Interval Value')
입력 인수
A
— 입력 영상
숫자형 배열
입력 영상으로, 임의 차원의 숫자형 배열로 지정됩니다.
levels
— 양자화 수준
숫자형 벡터
양자화 수준으로, 길이가 N인 숫자형 벡터로 지정됩니다. 이산 양자화 수준의 값은 단조 증가하는 순서여야 합니다.
values
— 양자화 값
숫자형 벡터
양자화 값으로, 길이가 N+1인 숫자형 벡터로 지정됩니다.
출력 인수
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
imquantize
함수는 C 코드 생성을 지원합니다(MATLAB® Coder™가 필요함). 자세한 내용은 Code Generation for Image Processing 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2012b에 개발됨R2021b: 스레드 기반 환경 지원
imquantize
함수는 이제 스레드 기반 환경을 지원합니다.
참고 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)