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

Ajustar el histograma de la imagen en 2-D para coincidir con el histograma de la imagen de referencia

Sintaxis

J = imhistmatch(I,ref)
J = imhistmatch(I,ref,nbins)
J = imhistmatch(___,Name,Value)
[J,hgram] = imhistmatch(___)

Descripción

ejemplo

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

  • Si tanto I como ref son truecolor imágenes RGB, imhistmatch coincide con cada canal de color de I de forma independiente al canal de color correspondiente de ref.

  • Si I es una imagen truecolor RGB y ref es una imagen en escala de grises, imhistmatch coincide con cada canal de I contra el histograma único derivado de ref.

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

Las imágenes I y ref pueden ser cualquiera de los tipos de datos permisibles y no necesitan ser iguales en tamaño.

ejemplo

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

  • Si el tipo de datos de la imagen es single o double, entonces el rango de histograma es [0,1].

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

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

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

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 ref utilizada para la coincidencia en hgram. hgram es un 1-por-nbins (cuando ref es escala de grises) o una matriz de 3 pornbins (cuando ref es truecolor), donde nbins es el número de bins de histograma. Cada fila en hgram almacena el histograma de un único canal de color de ref.

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 A y Ref pueden ser de diferentes tamaños y tipos de imágenes.

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

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

Obtener el tamaño de A.

size(A)
ans = 1×3

        2036        3060           3

Obtener el tamaño de Ref.

size(Ref)
ans = 1×2

        2215        2956

Tenga en cuenta que la imagen A y Ref son diferentes en tamaño y tipo. Image A es una imagen de truecolor RGB, mientras que la imagen Ref es una imagen en escala de grises. Ambas imágenes son de tipo de datos uint8.

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

B = imhistmatch(A,Ref);

Visualice la imagen RGB A, la imagen de referencia Refy el histograma coincidente con la imagen RGB B. Las imágenes se redimensionan antes de mostrar.

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

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

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

Lea 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 I para que coincida con el histograma de la imagen de referencia ref. Para la comparación, también ajuste la intensidad de la I de la imagen usando el método uniforme.

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 histograma coincidente con el método uniforme introduce colores falsos en el cielo y la carretera. La imagen que coincide con el histograma mediante el método polinómico no exhibe este artefacto.

En este ejemplo, verá el efecto en la imagen de salida J de variar el número de bins igualmente espaciados en el histograma de destino de Refde imagen, desde su valor predeterminado 64 al valor máximo de 256 para los datos de píxeles uint8 .

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

Imagen A, siendo la imagen más oscura, tiene una preponderancia de sus píxeles en los contenedores inferiores. La imagen de referencia, Ref, 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 8 bits de píxel.

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

El ejemplo genera la imagen de salida B utilizando tres valores diferentes de nbins: 64, 128 y 256. El objetivo de function imhistmatch es transformar la imagen A de tal manera que el histograma de la imagen de salida B sea una coincidencia con el histograma de Ref construido con nbins bins igualmente espaciados. Como resultado, nbins representa el límite superior del número de niveles de datos discretos presentes en la Bde imagen.

[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 de 8 bits únicos para cada imagen de salida se describe en la tabla. Tenga en cuenta que a medida que aumenta nbins , el número de niveles en cada canal RGB de la imagen de salida B también aumenta.

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

En este ejemplo se muestra cómo realizar la coincidencia de histogramas con diferentes números de bins.

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

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 bajos, lo que hace que la imagen se vea oscura. Para rectificar 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

Oscurecer la imagen de referencia Ref para crear una A de imagen que se pueda utilizar en la operación de coincidencia de histograma.

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

Ver la imagen de referencia Ref y la Ade imagen oscurecida. Tenga en cuenta que tienen el mismo número de valores de código discretos, pero que 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 mediante histogramas con un número diferente de bins. Primero utilice el número predeterminado de bins, 64. A continuación, utilice el número de valores presentes en la imagen A, 448 bins.

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 transformará, especificada como imagen de truecolor o escala de grises 2-D. 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 escala de grises de 2-D o truecolor. La imagen de referencia proporciona el histograma de referencia de bin nbins igualmente espaciado que la imagen de salida J está intentando coincidir.

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 refde imagen, nbins también representa el límite superior del número de niveles de datos discretos presentes en la imagen de salida J.

Tipos de datos: double

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos Name,Value . Name es el nombre del argumento y Value es el valor correspondiente. Name debe aparecer dentro de comillas simples (' '). Puede especificar varios argumentos de par de nombre y valor en cualquier orden como Name1,Value1,...,NameN,ValueN.

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

Técnica de mapeo utilizada para mapear el histograma de ref a la imagen I, especificada como el par separado por comas consistente en 'Method' y uno de estos valores:

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

  • 'polynomial' — Calcula una función de mapeo polinomio de ermitaño cúbico a partir de los histogramas acumulados de las imágenes de origen y de referencia. 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 da una transición de color más suave que el método uniforme.

Argumentos de salida

contraer todo

Imagen de salida, devuelta como imagen de truecolor o escala de grises 2-D. La imagen de salida se deriva de la imagen I cuyo histograma es una coincidencia aproximada al histograma de la imagen de entrada ref construido con nbins bins igualmente espaciados. Image J es del mismo tamaño y tipo de datos como input Image I. Argumento de entrada nbins representa el límite superior del número de niveles discretos contenidos en la Jde imagen.

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

Recuentos de histogramas derivados de refde imagen de referencia, especificados como vector o matriz. Cuando ref es una imagen truecolor, hgram es una matriz de 3 pornbins . Cuando ref es una imagen en escala de grises, hgram es un vector 1 pornbins .

Tipos de datos: double

Algoritmos

El objetivo de imhistmatch es transformar la imagen I de tal manera que el histograma de la imagen J coincida con el histograma derivado de la imagen ref. Se compone de nbins bins igualmente espaciados que abarcan toda la gama del tipo de datos de la imagen. Una consecuencia de la coincidencia de histogramas de esta manera es que nbins también representa el límite superior del número de niveles de datos discretos presentes en la imagen J.

Un aspecto importante del comportamiento de este algoritmo a notar es que como nbins aumenta de valor, el grado de fluctuaciones rápidas entre los picos poblados adyacentes en el histograma de la imagen J tiende a aumentar. Esto se puede ver en las siguientes gráficas de histograma tomadas del ejemplo de resonancia magnética de escala de grises de 16 bits.

Un valor óptimo para nbins representa un intercambio entre más niveles de salida (valores más grandes de nbins) al tiempo que minimiza las fluctuaciones de pico en el histograma (valores más pequeños de nbins).

Consulte también

| | |

Introducido en R2012b