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

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

thresh = multithresh(I,2);

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

seg_I = imquantize(I,thresh);

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

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

Считайте истинный цвет (RGB) изображение и отобразите его.

I = imread('peppers.png');
imshow(I) 
axis off
title('RGB 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')

Чтобы сравнить результаты, вычислите количество уникальных пиксельных векторов 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')

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

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

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

свернуть все

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

Типы данных: 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