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
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
Publicar un comentario