exponenta event banner

imquantize

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

Описание

пример

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

  • Если A (k ) ≤ уровни (1), то quant_A (k ) = 1.

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

  • Если A (k ) > уровни (N), то quant_A (k ) = N + 1.

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

  • A (k) Уровни(1)

  • A (k) > уровни (N)

пример

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

  • Если A (k ) ≤ уровни (1), то quant_A (k ) = значения (1).

  • Если уровни (m-1 ) < A ( k) ≤ уровни (m), то quant_A (k ) = значения (m).

  • Если A (k ) > уровни (N), то quant_A (k ) = значения (N + 1).

пример

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

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.

Разбейте изображение на восемь уровней, получив семь пороговых значений из multithresh.

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. Если заданы значения входных аргументов, то quant_A является тем же типом данных, что и значения. Если значения не указаны, то quant_A относится к классу double.

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

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

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

.

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

.

См. также

| |

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