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 значения присвоений к двум неявно заданным интервалам конца:

  • A(k)levels(1)

  • 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.

Считайте истинный цвет (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

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

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

Смотрите также

| |

Представленный в R2012b