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.

imhistmatch

Ajuste el histograma de la imagen 2-D para que coincida con el histograma de la imagen de referencia

Descripción

ejemplo

J = imhistmatch(I,ref) transforma la imagen en escala de grises o truecolor en 2-D que devuelve la imagen de salida cuyo histograma coincide aproximadamente con el histograma de la imagen de referencia.IJref

  • Si ambas y son imágenes RGB de color verdadero, a continuación, coincide con cada canal de color de forma independiente al canal de color correspondiente de.IrefimhistmatchIref

  • Si es una imagen RGB de color verdadero y es una imagen en escala de grises, a continuación, coincide con cada canal del histograma único derivado de.IrefimhistmatchIref

  • Si es una imagen en escala de grises, también debe ser una imagen en escala de grises.Iref

Las imágenes y pueden ser cualquiera de los tipos de datos permitidos y no tienen que ser iguales en tamaño.Iref

ejemplo

J = imhistmatch(I,ref,nbins) utiliza bins con espaciado igual dentro del intervalo adecuado para el tipo de datos de imagen especificado.nbins La imagen devuelta no tiene más que niveles discretos.Jnbins

  • Si el tipo de datos de la imagen es o bien, entonces el rango del histograma es [0,1].singledouble

  • Si el tipo de datos de la imagen es, entonces el rango del histograma es [0, 255].uint8

  • Si el tipo de datos de la imagen es, entonces el rango del histograma es [0, 65535].uint16

  • Si el tipo de datos de la imagen es, entonces el rango del histograma es [-32768, 32767].int16

ejemplo

J = imhistmatch(___,Name,Value) utiliza pares nombre-valor para cambiar el comportamiento del algoritmo de coincidencia de histograma.

ejemplo

[J,hgram] = imhistmatch(___) Devuelve el histograma de la imagen de referencia utilizada para la coincidencia. es una matriz de 1 por (cuando es de escala de grises) o de 3 por (cuando es truecolor), donde está el número de bins de histograma.refhgramhgramnbinsrefnbinsrefnbins Cada fila en almacena el histograma de un solo canal de color de.hgramref

Ejemplos

contraer todo

Estas imágenes aéreas, tomadas en diferentes momentos, representan vistas superpuestas del mismo terreno en Concord, Massachusetts. Este ejemplo muestra que las imágenes de entrada y pueden ser de diferentes tamaños y tipos de imagen.ARef

Cargue una imagen RGB y una imagen de escala de grises de referencia.

A = imread('concordaerial.png'); Ref = imread('concordorthophoto.png');

Consigue el tamaño de.A

size(A)
ans = 1×3

        2036        3060           3

Consigue el tamaño de.Ref

size(Ref)
ans = 1×2

        2215        2956

Tenga en cuenta que la imagen y son diferentes en tamaño y tipo.ARef La imagen es una imagen RGB de color verdadero, mientras que la imagen es una imagen en escala de grises.ARef Ambas imágenes son de tipo de datos.uint8

Genere la imagen de salida coincidente con el histograma. El ejemplo coincide con cada canal de contra el histograma único de.ARef La imagen de salida adopta las características de la imagen-es una imagen RGB cuyo tamaño y tipo de datos es el mismo que la imagen.BAA El número de niveles distintos presentes en cada canal RGB de la imagen es el mismo que el número de bins en el histograma construido a partir de la imagen en escala de grises.BRef En este ejemplo, el histograma de y tiene el número predeterminado de bins, 64.RefB

B = imhistmatch(A,Ref);

Visualice la imagen RGB, la imagen de referencia y la imagen RGB coincidente con el histograma.ARefB Las imágenes se redimensionan antes de la visualización.

imshow(A) title('RGB Image with Color Cast')

imshow(Ref) title('Reference Grayscale Image')

imshow(B) title('Histogram Matched RGB Image')

Leer una imagen de color y una imagen de referencia. Para demostrar el método Polinómico, asigne la imagen de referencia para que sea la más oscura de las dos imágenes.

I = imread('office_4.jpg'); ref = imread('office_2.jpg'); montage({I,ref}) title('Input Image (Left) vs Reference Image (Right)');

Utilice el método polinómico para ajustar la intensidad de la imagen de modo que coincida con el histograma de la imagen de referencia.Iref Para la comparación, también ajuste la intensidad de la imagen utilizando el método uniforme.I

J = imhistmatch(I,ref,'method','polynomial'); K = imhistmatch(I,ref,'method','uniform'); montage({J,K}) title('Histogram-Matched Image Using Polynomial Method (Left) vs Uniform Method (Right)');

La imagen de coincidencia de histograma utilizando el método uniforme introduce colores falsos en el cielo y la carretera. La imagen coincidente con el histograma que utiliza el método polinómico no muestra este artefacto.

En este ejemplo, verá el efecto en la imagen de salida de variar el número de bins con espaciado igual en el histograma de imagen de destino, desde su valor predeterminado 64 hasta el valor máximo de 256 para los datos de píxel.JRefuint8

Las siguientes imágenes fueron tomadas con una cámara digital y representan dos exposiciones diferentes de la misma escena.

    A   = imread('office_2.jpg');   % Dark Image     Ref = imread('office_4.jpg');   % Reference image

La imagen, siendo la imagen más oscura, tiene una preponderancia de sus píxeles en los bins inferiores.A La imagen de referencia, es una imagen expuesta correctamente y rellena completamente todos los valores de bins disponibles en los tres canales RGB: como se muestra en la tabla siguiente, los tres canales tienen 256 niveles únicos para los valores de píxel de 8 bits.Ref

Los valores únicos de nivel de 8 bits para el canal rojo son 205 para y 256 para.ARef Los valores únicos de nivel de 8 bits para el canal verde son 193 para y 256 para.ARef Los valores únicos de nivel de 8 bits para el canal azul son 224 para y 256 para.ARef

El ejemplo genera la imagen de salida utilizando tres valores diferentes de:Bnbins 64, 128 y 256. El objetivo de la función es transformar la imagen de tal manera que el histograma de la imagen de salida coincida con el histograma de los bins construidos con el mismo espaciado.imhistmatchABRefnbins Como resultado, representa el límite superior del número de niveles de datos discretos presentes en la imagen.nbinsB

[B64,  hgram] = imhistmatch(A, Ref,  64);    [B128, hgram] = imhistmatch(A, Ref, 128); [B256, hgram] = imhistmatch(A, Ref, 256);

En la tabla se describe el número de valores únicos de nivel de 8 bits para cada imagen de salida. Tenga en cuenta que, a medida que aumenta, el número de niveles en cada canal RGB de la imagen de salida también aumenta.nbinsB

nbinsImagen de salidaNúmero de valores de histograma únicos
64B6457
128B128101
256B256134

Este ejemplo muestra cómo realizar la coincidencia de histograma con diferentes números de bins.

Cargue una imagen DICOM de 16 bits de una rodilla con imágenes a través de una resonancia magnética.

K = dicomread('knee1.dcm');   % read in original 16-bit image LevelsK = unique(K(:));       % determine number of unique code values disp(['image K: ',num2str(length(LevelsK)),' distinct levels']);
image K: 448 distinct levels 
disp(['max level = ' num2str( max(LevelsK) )]);
max level = 473 
disp(['min level = ' num2str( min(LevelsK) )]);
min level = 0 

Todos los valores discretos 448 están en valores de código bajo, lo que hace que la imagen se vea oscura. Para rectificar esto, escale los datos de imagen para abarcar todo el intervalo de 16 bits de [0, 65535].

Kdouble = double(K);                  % cast uint16 to double kmult = 65535/(max(max(Kdouble(:)))); % full range multiplier Ref = uint16(kmult*Kdouble);   % full range 16-bit reference image

Oscurece la imagen de referencia para crear una imagen que se pueda utilizar en la operación de coincidencia de histograma.RefA

%Build concave bow-shaped curve for darkening |Ref|. ramp = [0:65535]/65535; ppconcave = spline([0 .1 .50  .72 .87 1],[0 .025 .25 .5 .75 1]); Ybuf = ppval( ppconcave, ramp); Lut16bit = uint16( round( 65535*Ybuf ) ); % Pass image |Ref| through a lookup table (LUT) to darken the image. A = intlut(Ref,Lut16bit);

Visualice la imagen de referencia y la imagen oscura.RefA Tenga en cuenta que tienen el mismo número de valores de código discretos, pero difieren en el brillo general.

subplot(1,2,1) imshow(Ref) title('Ref: Reference Image') subplot(1,2,2) imshow(A) title('A: Darkened Image');

Genere imágenes de salida que coincidan con el histograma utilizando histogramas con un número diferente de bandejas. Primero utilice el número predeterminado de bins, 64. A continuación, utilice el número de valores presentes en la imagen, 448 bins.A

B16bit64 = imhistmatch(A(:,:,1),Ref(:,:,1));  % default: 64 bins  N = length(LevelsK);     % number of unique 16-bit code values in image A. B16bitUniq = imhistmatch(A(:,:,1),Ref(:,:,1),N);

Ver los resultados de las dos operaciones de coincidencia de histograma.

figure subplot(1,2,1) imshow(B16bit64) title('B16bit64: 64 bins') subplot(1,2,2) imshow(Ref) title(['B16bitUniq: ',num2str(N),' bins'])

Argumentos de entrada

contraer todo

Imagen de entrada que se transformará, especificada como una imagen en 2-D truecolor o en escala de grises. La imagen devuelta tomará la clase de tipo de datos de la imagen de entrada.

Tipos de datos: single | double | int16 | uint8 | uint16

Imagen de referencia cuyo histograma es el histograma de referencia, especificado como una imagen en 2-D truecolor o en escala de grises. La imagen de referencia proporciona el histograma de referencia de ubicación igualmente espaciado que la imagen de salida está intentando igualar.nbinsJ

Tipos de datos: single | double | int16 | uint8 | uint16

Número de bins con espaciado igual en el histograma de referencia, especificado como un entero positivo. Además de especificar el número de bins con espaciado igual en el histograma para la imagen, también representa el límite superior del número de niveles de datos discretos presentes en la imagen de salida.refnbinsJ

Tipos de datos: double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: coincide con el histograma de imagen con el de la imagen de referencia mediante la técnica de mapeo polinómico.imhistmatch(I,ref,'Method','polynomial')Iref

Técnica de mapeo utilizada para mapear el histograma de la imagen, especificado como el par separado por comas consistente en uno de estos valores:refI'Method'

  • : Utilice una función de intensidad basada en histograma y ecualización de histograma.'uniform'

  • — Calcular una función de mapeo polinómico cúbico de Hermite a partir de los histogramas acumulativos de las imágenes de origen y de referencia.'polynomial' El método polinómico es útil cuando la imagen de referencia es más oscura que la imagen de entrada. En esta situación, el método polinómico proporciona una transición de color más suave que el método uniforme.

Argumentos de salida

contraer todo

Imagen de salida, devuelta como una imagen en 2-D truecolor o en escala de grises. La imagen de salida se deriva de la imagen cuyo histograma es una coincidencia aproximada con el histograma de la imagen de entrada construida con bins con espaciado igual.Irefnbins La imagen tiene el mismo tamaño y tipo de datos que la imagen de entrada.JI El argumento INPUT representa el límite superior del número de niveles discretos contenidos en la imagen.nbinsJ

Tipos de datos: single | double | int16 | uint8 | uint16

Recuentos de histograma derivados de la imagen de referencia, especificados como vector o matriz.ref Cuando se trata de una imagen truecolor, es una matriz de 3 por.refhgramnbins Cuando es una imagen en escala de grises, es un 1 por vector.refhgramnbins

Tipos de datos: double

Algoritmos

El objetivo es transformar la imagen de tal forma que el histograma de la imagen coincida con el histograma derivado de la imagen.imhistmatchIJref Consiste en bins igualmente espaciados que abarcan toda la gama del tipo de datos de imagen.nbins Una consecuencia de los histogramas coincidentes de esta manera es que también representa el límite superior del número de niveles de datos discretos presentes en la imagen.nbinsJ

Un aspecto importante de comportamiento de este algoritmo a tener en cuenta es que como aumentos en el valor, el grado de fluctuaciones rápidas entre los picos poblados adyacentes en el histograma de la imagen tiende a aumentar.nbinsJ Esto se puede ver en las siguientes gráficas de histograma tomadas del ejemplo de RMN de escala de grises de 16 bits.

Un valor óptimo para representa un trade-off entre más niveles de salida (valores más grandes de) mientras que minimiza las fluctuaciones pico en el histograma (valores más pequeños de).nbinsnbinsnbins

Consulte también

| | |

Introducido en R2012b