Ecualizar una Imagen con GNU Octave

El post de esta ocasión será acerca de ecualización de imágenes en escala de grises en GNU Octave.

Para empezar debemos obtener la imagen y convertirla, así como también podemos obtener los datos de las dimensiones de la imagen.

imagenOriginal=imread('/home/analuz/Imágenes/OctaveIcon.jpg');
imagenGris = rgb2gray(imagenOriginal);
[renglones, columnas, t] = size(imagenGris);

Después procedemos a obtener el histograma de la imagen que es la frecuencia con que se repiten las ocurrencias de los valores en los pixeles entre 0 y 255 y también obtener la probabilidad de cada ocurrencia que es calculada en probabilidadRepetidos().

histograma=zeros(256,1);
probabilidadRepetidos=zeros(256,1);
numeroDePixeles=renglones*columnas;
for i=1:renglones
for j=1:columnas
histograma(imagenGris(i,j)+1)=histograma(imagenGris(i,j)+1)+1;
probabilidadRepetidos(value+1)=histograma(value+1)/numeroDePixeles;
end
end

A continuación se calcula la distribución de probabilidad acumulada.

suma=0;
acumulado=zeros(256,1);
probabilidadAcumulada=zeros(256,1);
salida=zeros(256,1);
for i=1:size(probabilidadRepetidos)
suma=suma+histograma(i);
acumulado(i)=suma;
probabilidadAcumulada(i)=acumulado(i)/numeroDePixeles;
salida(i)=round(probabilidadAcumulada(i)*255);
end

Posteriormente, se genera la imagen ecualizada utilizando los valores obtenidos de salida().

imagenEcualizada=zeros(renglones,columnas);
for i=1:renglones
for j=1:columnas
imagenEcualizada(i,j)=salida(imagenGris(i,j)+1);
end
end

Procedemos a convertir la matriz de la imagen ecualizada a enteros de 8 bits con la funcion uint8(), esto con el fin de que se lea como imagen.

imagenEcualizada=uint8(imagenEcualizada);
Finalmente, podemos plasmar todo lo que hicimos en una ventana con la función subplot().

figure,subplot(1,4,1),imshow(imagenOriginal),title('Imagen Original');
subplot(1,4,2),imshow(imagenGris),title('Imagen gris');
subplot(1,4,3),plot(histograma),title('Histograma');
subplot(1,4,4),imshow(imagenEcualizada),title('Imagen Ecualizada');

El resultado al ejecutar todo el código anterior debe de presentarnos una ventana como ésta:




FUENTES:

- http://angeljohnsy.blogspot.com/2011/04/matlab-code-histogram-equalization.html

Comentarios

Entradas populares