imquantize

Квантуйте изображение с помощью заданных уровней квантования и выходных значений

Описание

пример

quant_A = imquantize(A,levels) квантует изображение A использование заданных значений квантования, содержащихся в N вектор элемента levels. Выходное изображение quant_A - тот же размер, что и A и содержит   N + 1 дискретные целочисленные значения в области значений 1 на   N + 1 которые определяются следующими критериями:

  • Если A(k) ≤ levels(1), то   quant_A(k) = 1.

  • Если levels(m-1) < A(k) ≤ levels(m), то quant_A(k) = m. 

  • Если A(k) > levels(N), то   quant_A(k) = N + 1.

Обратите внимание, что imquantize присваивает значения двум неявно заданным конечным интервалам:

  • <reservedrangesplaceholder1> ≤ <reservedrangesplaceholder0>

  • A(k)> levels(N)

пример

quant_A = imquantize(___,values) добавляет   N + 1 вектор элемента values где N = length(levels). Каждый из   N + 1 элементы values задайте значение квантования для одного из   N + 1 дискретные пиксельные значения в quant_A.

  • Если A(k) ≤ levels(1), то   quant_A(k) = values(1).

  • Если levels(m-1) < A(k) ≤ levels(m), то quant_A(k) =  values(m).

  • Если A(k) > levels(N), то   quant_A(k) = values(N + 1).

пример

[quant_A,index] = imquantize(___) возвращает index массива, такой что:

quant_A = values(index)

Примеры

свернуть все

Чтение изображения и его отображение.

I = imread('circlesBrightDark.png');
imshow(I)
axis off
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Вычислите два пороговых уровня.

thresh = multithresh(I,2);

Сегментируйте изображение на три уровня с помощью imquantize .

seg_I = imquantize(I,thresh);

Преобразуйте сегментированное изображение в цветное с помощью label2rgb и отобразите его.

RGB = label2rgb(seg_I); 	 
figure;
imshow(RGB)
axis off
title('RGB Segmented Image')

Figure contains an axes. The axes with title RGB Segmented Image contains an object of type image.

Чтение изображения truecolor (RGB) и отображение его.

I = imread('peppers.png');
imshow(I) 
axis off
title('RGB Image');

Figure contains an axes. The axes with title RGB Image contains an object of type image.

Сгенерируйте пороги для семи уровней из всего изображения RGB.

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);

Отобразите оба апостериализированных изображения и отметьте визуальные различия в двух схемах порога.

imshowpair(quantRGB,quantPlane,'montage') 
axis off
title('Full RGB Image Quantization        Plane-by-Plane Quantization')

Figure contains an axes. The axes with title Full RGB Image Quantization Plane-by-Plane Quantization contains an object of type image.

Чтобы сравнить результаты, вычислите количество уникальных векторов RGB-пикселей в каждом выходном изображении. Обратите внимание, что схема плоского порога дает примерно на 23% больше цветов, чем полная схема изображения RGB.

dim = size( quantRGB );
quantRGBmx3   = reshape(quantRGB,   prod(dim(1:2)), 3);
quantPlanemx3 = reshape(quantPlane, prod(dim(1:2)), 3);

colorsRGB   = unique(quantRGBmx3,   'rows' );
colorsPlane = unique(quantPlanemx3, 'rows' );

disp(['Unique colors in RGB image            : ' int2str(length(colorsRGB))]);
Unique colors in RGB image            : 188
disp(['Unique colors in Plane-by-Plane image : ' int2str(length(colorsPlane))]);
Unique colors in Plane-by-Plane image : 231

Уменьшите количество дискретных уровней в изображении с 256 до 8. Этот пример использует два различных метода для присвоения значений каждому из восьми выходных уровней.

Чтение изображения и его отображение.

I = imread('coins.png');
imshow(I) 
axis off
title('Grayscale Image')

Figure contains an axes. The axes with title Grayscale Image contains an object of type image.

Разделите изображение на восемь уровней путем получения семи порогов из мультифрейма.

thresh = multithresh(I,7);

Создайте 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);

Точно так же создайте valuesMin вектор таким образом, чтобы минимальное значение в каждом интервале квантования было присвоено восьми уровням выходного изображения. Вместо вызова imquantize снова с вектором valuesMin , используйте индекс выходного аргумента, чтобы присвоить эти значения выходному изображению.

valuesMin = [min(I(:)) thresh]
valuesMin = 1x8 uint8 row vector

    23    65    88   119   149   169   189   215

quant8_I_min = valuesMin(index);

Отобразите оба восьмиуровневых выходных изображений один за другим.

imshowpair(quant8_I_min,quant8_I_max,'montage') 
title('Minimum Interval Value           Maximum Interval Value')

Figure contains an axes. The axes with title Minimum Interval Value Maximum Interval Value contains an object of type image.

Входные параметры

свернуть все

Входное изображение, заданное как числовой массив любой размерности.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Уровни квантования, заданные как N вектор элемента. Значения дискретных уровней квантования должны быть в монотонно увеличивающемся порядке.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Значения квантования, заданные как   N + 1 вектор элемента.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Квантованное выходное изображение, возвращенное в виде числового массива того же размера, что и A. Если задан values входного параметра, то quant_A является совпадающим типом данных, что и values. Если values не задан, то quant_A имеет класс double.

Массив сопоставления, возвращенный как массив того же размера, что и входа изображения A. Он содержит целочисленные индексы, которые получают доступ к values для создания выходного изображения: quant_A = values(index). Если входной параметр values не определен, то index = quant_A.

Типы данных: double

Расширенные возможности

.

Генерация кода GPU
Сгенерируйте код CUDA ® для графических процессоров NVIDIA ® с помощью GPU Coder™

.

См. также

| |

Введенный в R2012b