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

Cuantifique la imagen utilizando los niveles de cuantificación y los 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 los valores enteros discretos en el intervalo y contiene valores enteros discretos en el intervalo, determinados por los criterios siguientes:quant_AUnN + 11N + 1

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

  • Si , a continuación, .levels(m-1)A(k)levels(m)quant_A(k)m

  • Si > , a continuación, .A(k)levels(N)quant_A(k) = N + 1

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

  • A(k)levels(1)

  • >A(k)levels(N)

ejemplo

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

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

  • Si , a continuación, .levels(m-1)A(k)levels(m)quant_A(k)values(m)

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

ejemplo

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

=quant_Avalues(index)

Ejemplos

contraer todo

Lea la imagen y muésela.

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

Calcular dos niveles de umbral.

thresh = multithresh(I,2);

Segmente la imagen en tres niveles utilizando .imquantize

seg_I = imquantize(I,thresh);

Convierta la imagen segmentada en imagen a color con y muéstrala.label2rgb

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

Lea la imagen truecolor (RGB) y muésela.

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

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 toda la imagen.

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

Procese cada plano RGB por separado utilizando el vector de umbral calculado desde el plano dado. Cuantifique 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);

Muestre ambas 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íxeles 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 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.

Lea la imagen y muésela.

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

Divide la imagen en ocho niveles obteniendo siete umbrales de multithresh.

thresh = multithresh(I,7);

Construya el vector de forma 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);

Del mismo modo, construya el vector de forma 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 cuantificación, especificados como un vector de elemento.N Los valores de los niveles de cuantificación discretos deben estar en orden de aumento monótona.

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

Valores de cuantificació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 .Un Si se especifica el argumento de entrada, 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 a la construcción de la imagen de salida: .valuesquant_Avaluesindex Si no se define el argumento de entrada, entonces .valuesindexquant_A

Tipos de datos: double

Capacidades ampliadas

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

Consulte también

| |

Introducido en R2012b