Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

imquantize

Cuantificar la imagen utilizando los niveles de cuantificación y los valores de salida especificados

Sintaxis

quant_A = imquantize(A,levels)
quant_A = imquantize(___,values)
[quant_A,index] = imquantize(___)

Descripción

ejemplo

quant_A = imquantize(A,levels) cuantifica la A de la imagen mediante los valores de cuantificación especificados contenidos en el elemento N vector levels. La imagen de salida quant_A es del mismo tamaño que A y contiene N + 1 valores enteros discretos en el rango 1 a N + 1 los cuales están determinados por los siguientes criterios:

  • Si A(k)levels(1), entonces quant_A(k) = 1.

  • Si levels(m-1) < A(k)levels(m) , then quant_A(k) = m.

  • If A(k) > levels(N), then quant_A(k) = N + 1.

Tenga en cuenta que imquantize asigna valores a los dos intervalos finales definidos implícitamente:

  • A(k)levels(1)

  • A(k) > levels(N)

ejemplo

quant_A = imquantize(___,values) agrega el elemento N + 1 vector values donde N = length(levels). Cada uno de los elementos N + 1 de values especifica el valor de cuantización para uno de los valores de píxel discreto N + 1 en quant_A.

  • Si A(k)levels(1), entonces quant_A(k) = values(1).

  • Si levels(m-1) < A(k)levels(m) , then quant_A(k) = values(m).

  • If A(k) > levels(N), then quant_A(k) = values(N + 1).

ejemplo

[quant_A,index] = imquantize(___) Devuelve un array index tal que:

quant_A = values(index)

Ejemplos

contraer todo

Leer la imagen y mostrarla.

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

Calcule dos niveles de umbral.

thresh = multithresh(I,2);

Segmenta la imagen en tres niveles usando imquantize .

seg_I = imquantize(I,thresh);

Convertir la imagen segmentada en imagen de color usando label2rgb y mostrarla.

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

Lea la imagen de TrueColor (RGB) y muestrela.

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

Genere umbrales para siete niveles a partir de toda la imagen RGB.

threshRGB = multithresh(I,7);

Generar umbrales para cada plano de la imagen RGB.

threshForPlanes = zeros(3,7);     for i = 1:3     threshForPlanes(i,:) = multithresh(I(:,:,i),7); end

Procese toda la imagen con el conjunto de valores de umbral calculados a partir de toda la imagen.

value = [0 threshRGB(2:end) 255];  quantRGB = imquantize(I, threshRGB, value);

Procese cada plano RGB por separado utilizando el vector umbral calculado desde el plano dado. Cuantificar cada plano RGB utilizando el vector umbral generado para ese plano.

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

Muestre las imágenes posterizadas y observe las diferencias visuales en los dos esquemas de umbral.

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

Para comparar los resultados, calcule el número de vectores de píxel RGB únicos en cada imagen de salida. Tenga en cuenta que el esquema de umbrales plano por plano rinde un 23% más de colores que el esquema completo de imagen 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 

Reduzca el número de niveles discretos en una imagen de 256 a 8. En este ejemplo se utilizan dos métodos diferentes para asignar valores a cada uno de los ocho niveles de salida.

Leer la imagen y mostrarla.

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

Divida la imagen en ocho niveles obteniendo siete umbrales de multitrilla.

thresh = multithresh(I,7);

Construya el vector valuesMax de forma que el valor máximo de cada intervalo de cuantificación se asigne a los ocho niveles de la imagen de salida.

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

De manera similar, construya el vector valuesMin de forma que el valor mínimo en cada intervalo de cuantificación se asigne a los ocho niveles de la imagen de salida. En lugar de llamar a imquantize de nuevo con el vector valuesMin , utilice el índice de argumentos de salida para asignar esos valores a la imagen de salida.

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

    23    65    88   119   149   169   189   215

quant8_I_min = valuesMin(index);

Mostrar ambas imágenes de salida de ocho niveles lado a lado.

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

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como una matriz numérica de cualquier dimensión.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Niveles de cuantificación, especificados como un vector de elemento N . Los valores de los niveles discretos de cuantización deben estar en orden monotónicamente creciente.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Valores de cuantización, especificados como un vector de elemento N + 1 .

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Argumentos de salida

contraer todo

Imagen de salida cuantificada, devuelta como una matriz numérica del mismo tamaño que A. Si se especifica el argumento de entrada values , entonces quant_A es el mismo tipo de datos que values. Si no se especifica values , entonces quant_A es de clase double.

Array mapping, devuelto como una matriz del mismo tamaño que la imagen de entrada A. Contiene índices enteros que acceden a values para construir la imagen de salida: quant_A = values(index). Si no se define el argumento de entrada values , entonces index = quant_A.

Tipos de datos: double

Capacidades ampliadas

Consulte también

| |

Introducido en R2012b