Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

imquantize

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

Descripción

ejemplo

quant_A = imquantize(A,levels) cuantifica la imagen A utilizando los valores de cuantificación especificados que se incluyen en el vector de N elementos levels. La imagen de salida quant_A tiene el mismo tamaño que A y contiene N + 1 valores enteros discretos en el intervalo 1 a N + 1, que están determinados por los siguientes criterios:

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

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

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

Observe que imquantize asigna valores a los dos intervalos finales definidos de manera implícita:

  • A(k)levels(1)

  • A(k) > levels(N)

ejemplo

quant_A = imquantize(___,values) añade el vector de N + 1 elementos values, donde N = length(levels). Cada uno de los N + 1 elementos de values especifica el valor de cuantificación para uno de los N + 1 valores de los píxeles discretos en quant_A.

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

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

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

ejemplo

[quant_A,index] = imquantize(___) devuelve un arreglo index de manera que:

quant_A = values(index)

Ejemplos

contraer todo

Lea una imagen, conviértala en escala de grises y muestre el resultado.

I = imread("foggysf2.jpg");
I = rgb2gray(I);
imshow(I)
title("Grayscale Image")

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

Calcule dos niveles de umbral.

thresh = multithresh(I,2);

Segmente la imagen en tres niveles utilizando la función imquantize.

labels = imquantize(I,thresh);

Convierta la imagen segmentada en una imagen en color utilizando la función label2rgb y muestre la imagen.

labelsRGB = label2rgb(labels);
imshow(labelsRGB)
title("Segmented Image")

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

Lea y muestre una imagen RGB.

I = imread("peppers.png");
imshow(I) 
title("RGB Image");

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

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

threshRGB = multithresh(I,7);

Genere umbrales para cada plano de la imagen RGB.

threshForPlanes = zeros(3,7);			

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

Procese la imagen completa con el conjunto de valores de los umbrales calculados a partir de la imagen completa.

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

Procese cada plano RGB por separado utilizando el vector umbral calculado a partir del plano dado. Cuantifique 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 ambas imágenes posterizadas y observe las diferencias visuales en los dos esquemas de uso de los umbrales.

montage({quantRGB,quantPlane}) 
title("Full RGB Image Quantization vs. Plane-by-Plane Quantization")

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

Para comparar los resultados, calcule el número de vectores de píxeles RGB únicos en cada imagen de salida. Tenga en cuenta que el esquema de uso de umbrales plano a plano produce aproximadamente un 23% más de colores que el esquema de la imagen RGB completa.

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

colorsRGB = unique(quantRGBmx3,"rows");
disp("Unique colors in RGB image: "+length(colorsRGB));
Unique colors in RGB image: 188
colorsPlane = unique(quantPlanemx3,"rows");
disp("Unique colors in plane-by-plane image: "+length(colorsPlane));
Unique colors in plane-by-plane image: 231

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

Lea una imagen y muéstrela.

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

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

Divida la imagen en ocho niveles obteniendo siete umbrales con la función multithresh.

thresh = multithresh(I,7);

Construya el vector valuesMax de tal manera que el valor máximo en 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);

Del mismo modo, construya el vector valuesMin de tal manera 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 volver a llamar a imquantize con el vector valuesMin, utilice el índice del argumento 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);

Muestre ambas imágenes de salida con ocho niveles una al lado de la otra.

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

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

Argumentos de entrada

contraer todo

Imagen de entrada, especificada como arreglo numérico de cualquier dimensión.

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

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

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

Valores de cuantificación, especificados como vector de N+1 elementos.

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

Argumentos de salida

contraer todo

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

Arreglo de asignación, devuelto como un arreglo 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 el argumento de entrada values no está definido, index = quant_A.

Tipos de datos: double

Capacidades ampliadas

Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.

Historial de versiones

Introducido en R2012b

expandir todo

Consulte también

| |