Main Content

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 2D para que coincida con el histograma de la imagen de referencia

Descripción

ejemplo

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

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

  • Si es una imagen RGB truecolor y es una imagen en escala de grises, entonces hace coincidir cada canal con el histograma único derivado de .IrefimhistmatchIref

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

Imágenes y pueden ser cualquiera de los tipos de datos permitidos y no tienen por qué ser iguales en tamaño.Iref

ejemplo

J = imhistmatch(I,ref,nbins) utiliza bins igualmente espaciados dentro del rango adecuado para el tipo de datos de imagen dado.nbins La imagen devuelta no tiene más que niveles discretos.Jnbins

  • Si el tipo de datos de la imagen es o , 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 en . es una matriz de 1 por (cuando es en escala de grises) o 3 por (cuando es truecolor), donde está el número de bins de histograma.refhgramhgramnbinsrefnbinsrefnbins Cada fila 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. En este ejemplo se 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 en escala de grises de referencia.

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

Obtenga el tamaño de .A

size(A)
ans = 1×3

        2036        3060           3

Obtenga 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 del histograma. El ejemplo coincide con cada canal con el único histograma de .ARef La imagen de salida toma 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 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 tienen el número predeterminado de bins, 64.RefB

B = imhistmatch(A,Ref);

Muestre la imagen RGB, la imagen de referencia y el histograma coincidente con la imagen RGB.ARefB Las imágenes se redimensionan antes de mostrarlas.

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

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

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

Lea una imagen en color y una imagen de referencia. Para demostrar el método polinómio, 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ómio 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 coincidente con el histograma utilizando el método uniforme introduce colores falsos en el cielo y la carretera. La imagen coincidente con el histograma mediante el método polinómico no exhibe este artefacto.

En este ejemplo, verá el efecto en la imagen de salida de variar el número de bins igualmente espaciados en el histograma de destino de la imagen, desde su valor predeterminado 64 hasta el valor máximo de 256 para los datos de píxeles.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 contenedores inferiores.A La imagen de referencia, , es una imagen correctamente expuesta 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 valores de píxelde 8 bits.Ref

Los valores de nivel únicos de 8 bits para el canal rojo son 205 para y 256 para .ARef Los valores de nivel únicos de 8 bits para el canal verde son 193 para y 256 para .ARef Los valores de nivel únicos 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 construido con bins igualmente espaciados.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);

El número de valores de nivel únicos de 8 bits para cada imagen de salida se describe en la tabla. 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 imageada a través de la RMN.

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 

Los 448 valores discretos tienen valores de código bajos, lo que hace que la imagen se vea oscura. Para corregir esto, escale los datos de la imagen para abarcar todo el rango 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

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

Vea la imagen de referencia y la imagen oscurecida.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 coincidentes con histogramas utilizando histogramas con un número diferente de bandejas. En primer lugar, utilice el número predeterminado de ubicaciones, 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);

Vea 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 va a transformar, especificada como una imagen de color verdadero o en escala de grises 2D. 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 de color verdadero 2D o en escala de grises. La imagen de referencia proporciona el histograma de referencia bin igualmente espaciado que la imagen de salida está intentando hacer coincidir.nbinsJ

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

Número de bins igualmente espaciados en el histograma de referencia, especificado como un entero positivo. Además de especificar el número de bins igualmente espaciados 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 opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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 la imagen con el de la imagen de referencia mediante la técnica de mapeo polinómio.imhistmatch(I,ref,'Method','polynomial')Iref

Técnica de mapeo utilizada para asignar el histograma de a la imagen, especificado como el par separado por comas que consta de y uno de estos valores:refI'Method'

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

  • — Calcular una función de mapeo polinómial de Hermita cúbica a partir de los histogramas acumulados de las imágenes de origen y de referencia.'polynomial' El método polinómio es útil cuando la imagen de referencia es más oscura que la imagen de entrada. En esta situación, el método polinómio 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 de color verdadero 2D 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 igualmente espaciados.Irefnbins La imagen es del mismo tamaño y tipo de datos que la imagen de entrada.JI El argumento de entrada representa el límite superior del número de niveles discretos contenidos en la imagen.nbinsJ

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

Los recuentos de histograma se derivan de la imagen de referencia, especificada como vector o matriz.ref Cuando es una imagen truecolor, es una matriz de 3 por.refhgramnbins Cuando es una imagen en escala de grises, es un vector de 1 por.refhgramnbins

Tipos de datos: double

Algoritmos

El objetivo de es transformar la imagen de tal manera que el histograma de la imagen coincida con el histograma derivado de la imagen.imhistmatchIJref Consiste en bins igualmente espaciados que abarcan todo el rango del tipo de datos de imagen.nbins Una consecuencia de la coincidencia de histogramas 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 conductual importante de este algoritmo a tener en cuenta es que a medida que aumenta el valor, el grado de fluctuaciones rápidas entre los picos adyacentes poblados 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 en escala de grises de 16 bits.

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

Consulte también

| | |

Introducido en R2012b