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

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

Descripción

ejemplo

quant_A = imquantize(A,levels) cuantifica la imagen utilizando valores de cuantificación especificados contenidos en el vector de elemento.UnNlevels La imagen de salida tiene el mismo tamaño que y contiene valores enteros discretos en el intervalo a los que se determinan los siguientes criterios:quant_AUnN + 11N + 1

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

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

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

Tenga en cuenta que asigna valores a los dos intervalos de finalización definidos implícitamente:imquantize

  • A(k)levels(1)

  • >A(k)levels(N)

ejemplo

quant_A = imquantize(___,values) agrega el vector de elemento where = ().N + 1valuesNlengthlevels Cada uno de los elementos de especificar el valor de cuantización para uno de los valores de píxel discretos en.N + 1valuesN + 1quant_A

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

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

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

ejemplo

[quant_A,index] = imquantize(___) Devuelve una matriz de forma que:index

=quant_Avalues(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);

Convierta la imagen segmentada en imagen en color usando y mostrarla.label2rgb

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

Leer imagen TrueColor (RGB) y mostrarla.

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

Genere umbrales para siete niveles de toda la imagen RGB.

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 toda la imagen con el conjunto de valores de umbral 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 de umbral calculado a partir del plano dado. Cuantice cada plano RGB utilizando el vector de 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);

Visualice 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 umbral plano por plano produce aproximadamente un 23% más de colores que el esquema de imagen RGB completo.

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

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

thresh = multithresh(I,7);

Construya el vector 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

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 forma similar, construya el vector 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.valuesMin En lugar de volver a llamar con el vector, utilice el índice de argumento de salida para asignar esos valores a la imagen de salida.imquantizevaluesMin

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

    23    65    88   119   149   169   189   215

quant8_I_min = valuesMin(index);

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

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 cuantización, especificados como vector de elemento.N Los valores de los niveles de cuantificación discretos deben estar en orden de aumento monótono.

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 cuantizada, devuelta como una matriz numérica del mismo tamaño que.Un Si se especifica el argumento de entrada, entonces es el mismo tipo de datos que.valuesquant_Avalues Si no se especifica, entonces es de clase.valuesquant_Adouble

Matriz de asignación, devuelta como una matriz del mismo tamaño que la imagen de entrada.Un Contiene índices enteros a los que se accede para construir la imagen de salida: = ().valuesquant_Avaluesindex Si no se define el argumento de entrada, entonces =.valuesindexquant_A

Tipos de datos: double

Capacidades ampliadas

Consulte también

| |

Introducido en R2012b