Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

histeq

Mejorar el contraste mediante la ecualización de histogramas

Descripción

ejemplo

J = histeq(I) transforma la imagen en escala de grises I para que el histograma de la imagen en escala de grises de salida J tenga 64 bins y sea aproximadamente plano.

J = histeq(I,n) transforma la imagen en escala de grises I para que el histograma de la imagen en escala de grises de salida J con n bins sea aproximadamente plano. El histograma de J es más plano si n es mucho menor que el número de niveles discretos de I.

J = histeq(I,hgram) transforma la imagen en escala de grises I para que el histograma de la imagen en escala de grises de salida J se ajuste aproximadamente al histograma objetivo hgram. El número de bins del histograma de la imagen de salida es igual a length(hgram).

newcmap = histeq(X,map) transforma los valores del mapa de colores para que el histograma del componente gris de la imagen indexada X sea aproximadamente plano. El mapa de colores transformado es newcmap.

newcmap = histeq(X,map,hgram) transforma el mapa de colores asociado a la imagen indexada X para que el histograma del componente gris de la imagen indexada (X, newcmap) se ajuste aproximadamente al histograma objetivo hgram. La función histeq devuelve el mapa de colores transformado en newcmap. length(hgram) debe ser igual que size(map,1).

ejemplo

[___,T] = histeq(___) también devuelve la transformación T que asigna el componente gris de la imagen en escala de grises o el mapa de colores de entrada al componente gris de la imagen en escala de grises o al mapa de colores de salida.

Ejemplos

contraer todo

Lea una imagen en el área de trabajo.

I = imread('tire.tif');

Mejore el contraste de una imagen de intensidad mediante la ecualización del histograma.

J = histeq(I);

Muestre la imagen original y la imagen ajustada.

imshowpair(I,J,'montage')
axis off

Figure contains an axes object. The axes object contains an object of type image.

Muestre un histograma de la imagen original.

figure
imhist(I,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

Muestre un histograma de la imagen procesada.

figure
imhist(J,64)

Figure contains 2 axes objects. Axes object 1 contains an object of type stem. Axes object 2 contains 2 objects of type image, line.

Cargue un conjunto de datos 3D.

load mristack

Realice la ecualización del histograma.

enhanced = histeq(mristack);

Muestre el primer corte de datos de la imagen original y de la imagen con contraste.

figure
subplot(1,2,1)
imshow(mristack(:,:,1))
title('Slice of Original Image')
subplot(1,2,2)
imshow(enhanced(:,:,1))
title('Slice of Enhanced Image')

Figure contains 2 axes objects. Axes object 1 with title Slice of Original Image contains an object of type image. Axes object 2 with title Slice of Enhanced Image contains an object of type image.

Este ejemplo muestra cómo representar la curva de transformación para la ecualización de histogramas. histeq puede devolver un vector de 1 por 256 que muestra, para cada posible valor de entrada, el valor de salida resultante. (Los valores de este vector están en el intervalo [0,1], independientemente de la clase de la imagen de entrada). Puede representar estos datos para obtener la curva de transformación.

Lea una imagen en el área de trabajo.

I = imread('pout.tif');

Ajuste el contraste mediante la ecualización de histogramas utilizando la función histeq. Especifique el valor de retorno de la transformación de la escala de grises, T, que es un vector que asigna los niveles de gris de la imagen de intensidad I a los niveles de gris de J.

[J,T] = histeq(I);

Represente la curva de transformación. Observe cómo esta curva refleja los histogramas de la figura anterior, con valores de entrada mayoritariamente entre 0,3 y 0,6, mientras que los valores de salida se distribuyen uniformemente entre 0 y 1.

figure
plot((0:255)/255,T);

Figure contains an axes object. The axes object contains an object of type line.

Argumentos de entrada

contraer todo

Imagen en escala de grises, especificada como arreglo numérico de cualquier dimensión.

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

Histograma objetivo, especificado como vector numérico. El histograma objetivo debe tener bins igualmente espaciados que abarcan valores de intensidad en el rango apropiado. El rango de valores de intensidad depende del tipo de datos de la imagen de entrada.

  • single o double — [0, 1].

  • uint8 — [0, 255].

  • uint16 — [0, 65535].

  • int16 — [–32768, 32767].

De forma predeterminada, el número de bins del histograma objetivo es igual a length(hgram).

Por ejemplo:

hgram = 256:-4:4;
J = histeq(I,hgram);
especifica un histograma objetivo con 64 bins como una función no plana linealmente decreciente que enfatiza los valores de los píxeles pequeños.

histeq adapta automáticamente hgram para que sum(hgram) == numel(I). El histograma J se ajusta mejor a hgram si length(hgram) es mucho menor que el número de niveles discretos de I.

Tipos de datos: single | double

Número de niveles discretos de gris, especificado como entero positivo.

Tipos de datos: single | double

Imagen indexada, especificada como arreglo numérico de cualquier dimensión. Los valores de X son un índice del mapa de colores map.

Tipos de datos: single | double | uint8 | uint16

Mapa de colores asociado a la imagen indexada X, especificado como matriz numérica de c por 3 con valores comprendidos en el intervalo [0, 1]. Cada fila es un triplete RGB que especifica los componentes rojo, verde y azul de un único color del mapa de colores.

Tipos de datos: double

Argumentos de salida

contraer todo

Imagen en escala de grises transformada, devuelta como arreglo numérico del mismo tamaño y clase que la imagen de entrada, I.

Transformación de la escala de grises, devuelta como vector numérico. La transformación T asigna niveles de gris de la imagen I a niveles de gris de J.

Tipos de datos: double

Mapa de colores transformado, especificado como matriz numérica de n por 3 con valores comprendidos en el intervalo [0, 1]. Cada fila es un triplete RGB que especifica los componentes rojo, verde y azul de un único color del mapa de colores.

Tipos de datos: double

Algoritmos

Cuando se suministra un histograma objetivo hgram, histeq elige la transformación de grises T para minimizar

|c1(T(k))c0(k)|,

c0 es el histograma acumulativo de la imagen de entrada I, y c1 es la suma acumulativa de hgram para todas las intensidades k. Esta minimización está sujeta a estas restricciones:

  • T debe ser monótono

  • c1(T(a)) no puede sobrepasar c0(a) en más de la mitad de la distancia entre los recuentos del histograma en a

histeq usa la transformación b = T(a) para asignar los niveles de gris de X (o el mapa de colores) a sus nuevos valores.

Si no especifica hgram, histeq crea un hgram plano

hgram = ones(1,n)*prod(size(A))/n;

y, después, aplica el algoritmo anterior.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo