El Histograma y su ecualización El histograma es un gráfico que relaciona los niveles de intensidad de una imagen y el número de píxeles que poseen tal nivel de intensidad, ello es: f(rk) = nk (1)
donde rk representa el valor de la k-ésima intensidad en el intervalo [0, Imax] y nk es el número de píxeles que posee la intensidad rk. Por ejemplo, para una imagen de tipo uint8, rk tomará los valores entre el intervalo [0, 255]. Representar el histograma de la imagen es programar la ecuación (1). El histograma puede estar normalizado, en tal caso: h(rk) = f(rk) / n = nk / n (2)
donde n representa el número total de píxeles de la imagen. Por ejemplo la siguiente imagen

Se representa por su histograma: >> I=imread('fig1.jpg'); >> II=rgb2gray(I); % Ver método para convertir de color a escala de grises >> [nk, rk]=imhist(II); >> bar(rk, nk, 1); 
El número total de píxeles se puede determinar a través de: >> sum(nk(:,1)) ans = 69720 Lo que corresponde con el número total de píxeles de la imagen: >> whos Name Size Bytes Class II 249x280 69720 uint8 El número de píxeles que tienen el nivel 64 de intensidad son: >> nk(65,1) % El nivel 0 tendrá el índice 1 ans = 41205 El histograma normalizado puede calcularse y representarse (de aplicar (2)): >>nkk=nk./sum(nk(:,1)); >> bar(rk, nkk, 1); La ecualización del histograma: La ecualización del histograma se aplica cuando se desea lograr una distribución más uniforme entre el número de píxeles referido a los diferentes niveles de intensidad presentes en la imagen, ello es, un histograma que se extienda en el intervalo de niveles de gris [0, Imax]. La extenxión de los valores de niveles de gris se realiza utilizando información presente en la propia imagen. Ecualizar el histograma es aplicar la siguiente función de distribución acumulativa: (3)
donde k toma valores en el intervalo [1, Imax+1] (estos intervalos son para utilizar las matrices en Matlab, ello es equivalente a [0, Imax]). El algoritmo que ecualiza un histograma cumple los siguientes pasos: [1] Se obtiene el histograma. [2] El nivel de intensidad rk se sustituye por: sk = mk*Imax (4) [3] Repetir hasta Imax. Un programa en Matlab que realiza el anterior algoritmo para imágenes de tipo uint8 sería: >>a=imread('Fig.jpg'); >>b=imhist(a); >>c=b./numel(a); >>d=cumsum(c); >>e=d.*256; % Figura resultante La ecualización del histograma se realiza a través de la función: >>III=histeq(II, 256); % En III estará la imagen ecualizada La definición del histograma: Como se ha expuesto previamente, la ecualización del histograma extiende los valores de niveles de gris basado en información presente en la propia imagen. En la definición del histograma el propósito es definir una función que represente la tendencia que se desea que el histograma siga en determinada imagen. Para definir un histograma se utiliza la función: >>g = histeq(f, h); donde f es la imagen original, g la imagen resultante y h es la función cuya tendencia se desea que el histograma de la imagen f siga. El intervalo de la función h debe coincidir con el de los niveles de gris de la imagen f ([0, Imax]). Un ejemplo de función que penaliza los blancos y negros y acentúa las tonalidades medias de gris de una imagen puede ser la siguiente campana de Gauss: >> cg=128; >> ac=50; >> h=exp(-((([1:1:256]-cg)./ac)).^2)'; 
Transparencias |
|