quant_A = imquantize(A,levels)는 N개 요소 벡터 levels에 포함된 지정된 양자화 값을 사용하여 영상 A를 양자화합니다. 양자화된 영상 quant_A는 A와 크기가 같으며 범위 1~N+1에 있는 N+1개의 이산 정수 값을 포함합니다. 정수 값은 다음 기준에 따라 결정됩니다.
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));
양자화된 영상으로, A와 같은 크기의 숫자형 배열로 반환됩니다. 입력 인수 values가 지정된 경우 quant_A는 values와 같은 데이터형입니다. 그렇지 않으면 quant_A는 double 데이터형입니다.
매핑 배열로, 입력 영상 A와 같은 크기의 숫자형 배열로 반환됩니다. 배열에는 정수 인덱스가 포함되며, 이 인덱스로 values에 액세스하여 출력 영상 quant_A = values(index)를 생성합니다. 입력 인수 values를 지정하지 않은 경우 index = quant_A입니다.