Está en la página 1de 4

1

Histogramas de Imágenes en Escala de Grises.


Daniel Ornelas Barboza
ITESI
Ing. Mecatrónica, Visión Computacional
danielornelas483@gmail.com

seguiremos dándole nombre de histogramas a lo que será


Resumen – Se describe como obtener histogramas de tratado.
una imagen en escala de grises, nos referimos a
histogramas porque veremos 4 tipos de estos, aunque en Uno de los fines para obtener histogramas es la umbralización
realidad 3 se encuentran en función de un histograma de y más aplicaciones en Procesamiento Digital de Imágenes y
frecuencias típico que ya trataremos más adelante. Se Visión Computacional, sin embargo, por el momento no
trabajo con imágenes de las que fuera sencillo predecir creemos que sea de mucho interés sus aplicaciones, si no
como deberían ser más o menos los histogramas de estas y como obtenerlos y cómo se comportan según la imagen.
así poder dar mejores conclusiones de nuestro trabajo.
[2] La manipulación de histogramas es una herramienta
I. INTRODUCCIÓN fundamental en el procesamiento de imágenes. Los
histogramas son fáciles de calcular y también son adecuados
Los histogramas son una de las herramientas estadísticas más
para rápidas implementaciones de hardware, haciendo de las
conocidas, de la que muchas veces se acostumbra a dar a
técnicas basadas en histogramas una herramienta popular para
entender que es solo una gráfica de barras, pero en realidad es
el procesamiento de imágenes en tiempo real. La forma del
más que eso, su objetivo es dar un panorama de como se
histograma está relacionada con la apariencia de la imagen.
distribuye una muestra de datos, por ejemplo, es de nuestro
interés saber cuántos pixeles de una imagen corresponden a
Se desarrollaron funciones para cada tipo de histograma en
cada intensidad según los bits de profundidad de esta, aunque
MATLAB, que nos lo devolvieran al meter como argumento
nuestro enfoque será solo para imágenes en escala de grises de
una imagen en escala de grises de 8 bits de profundidad.
8 bits de profundidad con su respectivo rango dinámico de 0 a
255, una imagen puede tener n pixeles con una intensidad k,
II. DESARROLLO
también puede haber casos extremos donde allá alguna
intensidad que corresponda a la mayoría de la población de A. Histograma de frecuencias
pixeles. Veremos que de un histograma de frecuencias típico Para obtener un histograma de frecuencias de una imagen en
podemos obtener un histograma normalizado el cual para escala de grises de 8 bits de profundidad, se contabilizaron los
nuestro caso nos diría que porcentaje de pixeles corresponden pixeles correspondían a cada intensidad del rango dinámico
a cierta intensidad, también veremos histograma acumulado y correspondiente de 0 a 255, es decir, la función desarrollada
el histograma acumulado normalizado. tiene que mandarnos datos almacenados en un vector, que
indique cuantos pixeles hay de intensidad 0, cuantos de
[1] Una distribución de frecuencias es una herramienta útil intensidad 1 y así sucesivamente hasta llegar a 255. La Figura.
para resumir datos e investigar su distribución; una 1 muestra el histograma de frecuencias de una imagen de
herramienta incluso mejor es un histograma, una gráfica más pocos pixeles (Figura. 2). La función creada la llamamos
fácil de interpretar que una tabla de números. Un histograma his2gram, a la cual se le debe ingresar una imagen en escala de
es una gráfica que consiste en barras adyacentes de igual grises para que arroje resultados correctamente.
anchura dibujadas (a menos que haya espacios en los datos).
La escala horizontal representa clases de valores cuantitativos,
y la escala vertical representa sus frecuencias. Las alturas de
las barras corresponden a los valores de frecuencia.

La anterior cita nos hace entrar en discusión de si en realidad


lo que estamos buscando es una distribución de frecuencias en
lugar de histogramas, esto porque para las aplicaciones de
interés no es realmente necesario siempre mostrar una gráfica,
esto por la cuestión de que es una maquina la que va a realizar
los procesamientos y un histograma seria más una ayuda
visual para nosotros y así poder obtener conclusiones. Aun así,
Figura. 1 Histograma de una imagen en escala de grises de
8x8 pixeles.
2

la programación. La Figura. 4 muestra el histograma


normalizado de la imagen de la Figura. 2, por ejemplo, un
0.06 corresponde a un 6%.

Figura. 4 Histograma normalizado de una imagen.

Figura. 2 Imagen de 8x8 pixeles D. Histograma acumulado normalizado


Se usa el mismo proceso de un histograma normalizado,
B. Histograma acumulado pero usando el histograma acumulado de la imagen, por esta
Para obtener un histograma acumulado de una imagen razón mandamos llamar la función histacum para así facilitar
tomamos como punto de partida el histograma de la codificación, igualmente nos indicara los porcentajes,
frecuencias de esta, entonces, se debe hacer la suma de las además el ultimo valor debe corresponder al número 1 ósea
frecuencias obtenidas del primer histograma de forma el 100% de pixeles de la imagen, la función fue llamada
ascendente, también el ultimo valor debe corresponder al hisan. La Figura. 5 muestra como se ve un histograma
número de pixeles total de la imagen. acumulado normalizado.

HA(i ) = HA(i − 1) + H (i ) (1)

HA corresponde a frecuencias del histograma acumulado,


H a frecuencias del histograma convencional e i
corresponde a la intensidad.

La Figura. 3 muestra el histograma acumulado de la imagen


Figura. 2.

Figura. 5 Histograma acumulado normalizadas.

Las funciones se desarrollaron considerando que las


posiciones de arreglos en Matlab comienzan a leerse a partir
de 1 y no de 0 como en otros lenguajes.

III. PRUEBAS Y RESULTADOS

Probamos las funciones con 2 imágenes, una clara y una más


Figura. 3 Histograma acumulado de una imagen. oscura para tener presente más fácilmente como deben
comportarse los histogramas, usaremos las siguientes
La función creada para obtener el histograma la llamamos abreviaturas para referirnos al tipo de histograma, H =
histacum, en esta mandamos llamar la función his2gram para histograma de frecuencias, HA = histograma acumulado, HN
así facilitar su implementación. = histograma normalizado, HAN = histograma acumulado
normalizado, las imágenes escogidas son las de la Figura. 6 y
C. Histograma normalizado de la Figura. 7 mientras que la Figura. 8 y Figura. 9 son los
Obtener un histograma normalizado es muy sencillo, si se histogramas de cada una en forma respectiva.
hace a partir del histograma de frecuencias, simplemente se
divide la frecuencia entre el número total de datos o pixeles,
en nuestro caso el tamaño de la imagen o número de pixeles
r * c , esto nos mostrara en lugar de la frecuencia el
porcentaje de pixeles que tiene cada intensidad.

H (i)
HN (i ) = (2)
r *c
HN corresponde a frecuencias del histograma acumulado,
H a frecuencias del primer histograma e i corresponde a la
intensidad. La función fue llamada histnom y de igual
manera mandamos llamar la función his2gram para facilitar Figura. 6 Imagen elegida como clara.
3

c) HA, d) HAN.

De los histogramas de la Figura. 9 al ser de una imagen muy


oscura, vemos que efectivamente los valores tienden hacia el
lado contrario(negro) que, en el caso anterior, también vemos
como en HA y HAN desde una intensidad cercana a 150 ya no
aumentan los valores, ósea que el 100% de los datos se
encuentra mas o menos antes de la intensidad con valor 150.

IV. CONCLUSIÓN
Los histogramas son una muy buena herramienta, ya que estos
nos indican hacia donde se cargan los datos en base a alguna
Figura. 7 Imagen elegida como oscura. característica, para nuestro caso intensidades al trabajar con
imágenes, si damos un ejemplo rápido los histogramas de la
imagen oscura nos dicen que podemos ignorar todas las
intensidades mayores a 150 y así acotaríamos el rango
dinámico sobre el cual estamos trabajando, pensando bien
cómo hacerlo y así sacar ventaja de ello, por ejemplo,
umbralizar en base a ello. Nos queda la duda de que manera se
graficarían histogramas de imágenes en un espacio de color,
por ejemplo, en RGB, y si podemos tratar la información que
estos nos brinden bajo el mismo enfoque.

REFERENCIAS
[1] Triola, M. F. (2018). Estadística. En M. F. Triola,
Estadística (pág. 51). Pearson.
[2] Rafael C. Gonzalez, R. E. (2018). Digital Image
Processing. En R. E. Rafael C. Gonzalez, Digital Image
Processing (pág. 133). Pearson.
Figura. 8 Histogramas de la imagen clara, a) H, b) HN, ANEXOS
c) HA, d) HAN.
De la Figura. 8 hacemos el análisis sabiendo que las A1. Código de la función his2gram.
intensidades claras tienden hacia el 255(blanco), para
imágenes en escala de grises con 8 bits de profundidad, por function [H] = his2gram(I)
esto vemos que los histogramas no tienen incluso valores con %Esta función devuelve el histograma de
intensidades de 0 a 100, y que la intensidad con mayor numero frecuencias de una imagen en
de pixeles es una cercana a 255, por ello se escogió esa %escala de grises con 8 bits de
imagen, porque ya se sabia hacia donde se iban a distribuir el profundidad.
mayor número de datos. %*No devuelve una gráfica, si no un
vector de tamaño 256 que contiene los
%datos obtenidos.
%
%Ejemplo:
%
%H=his2gram(I)
%
%donde I es la imagen en escala de
grises.

%Cálculo del tamaño de la imagen.


[r,c] = size(I);
%Creación del vector con valores de 0.
H(256)=0;
%Barrido de la imagen y contabilización
de los pixeles.
for i = 1:r
for j = 1:c
%Si el barrido está en un píxel
Figura. 9 Histogramas de la imagen clara, a) H, b) HN, con cierto valor, este se
4

%guardara en la variable b, por %el valor en el histograma


tomar en cuenta la numeración de acumulado es igual a sumar el valor
%las posiciones de vectores en %contabilizado en esa posición
Matlab, supongamos que la intensidad del primer histograma más el valor
%leída es 150 aumentaremos el %anterior en el histograma
contador en la posición 150+1 del acumulado.
%vector. HA(i) = H(i)+ HA(i-1);
B = I(i,j); else
H(B+1)= H(B+1)+1; %Al ser la primera posición el
end valor es el mismo.
end HA(i) = H(i);
end end
end
A2. Código de la función histnom. end

function [HN] = histnom(I) A4. Código de la función hisan.


%Devuelve el Histograma Normalizado de function [HAN] = hisan(I)
una imagen en escala de grises, este %Devuelve el histograma acumulado
%tiene como argumento de entrada la misma normalizado de una imagen en escala de
imagen. %grises de 8 bits de profundidad, es
%Ejemplo: bueno para en que valores se
% %encuentran cierto porcentaje de los
%HN=histnom(I); datos.
% %
%Donde I es la imagen en escala de grises %Ejemplo:
con 8 bits de profundidad. %
%HAN=hisan(I);
%Cálculo de tamaño de la imagen para así %
normalizar. %I es una imagen en escala de grises.
[r,c] = size(I);
%Calculamos el histograma con ayuda de la %Calculamos es tamaño de la imagen para
función his2gram y solo dividimos así poder normalizar
%entre el tamaño de la imagen para [r,c] = size(I);
normalizar. %Calcula el histograma acumulado y se
HN = his2gram(I)/(r*c); normaliza dividiendo sobre el tamaño
End %de la imagen.
HAN = histacum(I)/(r*c);
A3. Código de la función histacum end
function [HA] = histacum(I)
%Devuelve el histograma acumulado, de una
imagen en escala de
%grises con 8 bits de profundidad.
%
%Ejemplo:
%
%HA=histacum(I)
%
%Donde y es la imagen en escala de grises

%Cálculo del histograma.


H = his2gram(I);
%Creación del vector que guardara los
datos inicializados en ceros.
HA(256) = 0 ;
%Ciclo para barrido los vectores de
tamaño 256
for i = 1:256
if i>1
%Si ya estamos posicionados en
la segunda casilla del vector

También podría gustarte