You are on page 1of 18

Funciones en Matlab Manejo de LUTs Tcnicas Espaciales para el Mejoramiento de Imgenes. Laboratorio No. 2 Edna Cristina Corts P.

. Andrea Liliana Narvez. Giovanny A. Snchez Cod: 2045255 Cod: 2051107 Cod: 2040984 As, los filtros espaciales se pueden dividir en tres categoras: - Filtros pasa bajos: enfatizan las bajas frecuencias, suavizando las imgenes y atenuando ruidos. - Filtros pasa altos: enfatizan las altas frecuencias, para mejorar o afilar las caractersticas lineales como los lmites en general. - Filtro detectores de bordes: realizan otro tipo de operaciones con los pxeles, pero siempre con el resultado de enfatizar los bordes que rodean a un objeto en una imagen, para hacerlo ms fcil de analizar.
II. OBJETIVOS

I. INTRODUCCIN

El filtrado espacial es la operacin que se aplica a una imagen para resaltar o atenuar detalles espaciales con el fin de mejorar la interpretacin visual o facilitar un procesamiento posterior, y constituye una de las tcnicas comprendidas dentro del realce de imgenes. Ejemplos comunes incluyen aplicar filtros para mejorar los detalles de bordes en imgenes, o para reducir o eliminar patrones de ruido. El filtrado espacial es una operacin "local" en procesamiento de imagen, en el sentido de que modifica el valor de cada pxel de acuerdo con los valores de los pxeles que lo rodean; se trata de transformar los niveles de gris originales de tal forma que se parezcan o diferencien ms de los correspondientes a los pxeles cercanos. La frecuencia espacial define la magnitud de cambios en el nivel de gris por unidad de distancia en una determinada zona de la imagen. Las reas de la imagen con pequeos cambios o con transiciones graduales en los valores de los datos se denominan reas de bajas frecuencias. Las reas de grandes cambios o rpidas transiciones se conocen como reas de altas frecuencias (por ejemplo, los bordes).

Conocer las caractersticas principales de funciones de Matlab para el Procesamiento Digital de imgenes. Estudiar el mecanismo de creacin y manipulacin de funciones y subfunciones en Matlab. Generacin y manipulacin de LUTs para mejora de imgenes.

Implementar diversas tcnicas de mejoramiento de imgenes y realizar un estudio comparativo. Aplicar los mtodos de aumento del contraste, fraccionamiento de planos de bits, ecualizacin del histograma y mejora local a imgenes monocromticas. Apropiar las tcnicas de diseo y aplicacin de filtros digitales en el dominio espacial. Analizar y comparar los efectos de los diferentes tipos de filtros espaciales en las imgenes digitales.

LUT, Vector resultante para aplicar la transformacin. Consigne el cdigo y explique el algoritmo utilizado.
[LUT]=makeLUT([50 80 ;100 256],256)

Fig. No 1. Tabla de Asignacin Dinmica

III. RESULTADOS Y ANLISIS 1. Generacin de LUTs. Implemente

Al generar una look up table lo que obtenemos es una transformacin de tonos de gris que dependern de los valores iniciales y condiciones en las que se generan las LUT. En este caso obtenemos una LUT que tiene una pendiente diferente en intervalos que podemos variar cuando ingresamos los valores iniciales de nuestro vector. Al generar la tabla lo que obtenemos es un vector de transformacin que se puede aplicar a una imagen para resaltar ciertos niveles de gris y comprimir otros dependiendo del caso. 2. Aumento del contraste. Realice un programa en Matlab que lea una imagen, calcule su histograma, y permita introducir por teclado los parmetros de la funcin MakeLUT con el propsito de generar una LUT para aumentar el contraste sobre la imagen original. El programa debe visualizar en una misma ventana, las imgenes y los histogramas de entrada y de salida.

una funcin en Matlab que permita generar una LUT (tabla de asignacin dinmica) para ser utilizada en el mejoramiento de imgenes monocromticas. El programa debe recibir las coordenadas de varios puntos por donde debe pasar la funcin de transformacin y el nmero de niveles de gris L. La funcin debe generar un vector (LUT) con todos los valores numricos enteros entre 0 y L-1, y visualizar la grfica r vs. s (nivel de entrada vs nivel de gris de salida) en una ventana. La funcin debe presentar el siguiente encabezado: function [LUT] = MakeLUT (RS , L) donde, RS, vector de dos columnas que contiene los pares de coordenadas r y s de los puntos por donde pasa la funcin de transformacin. L, Nmero de niveles de gris de la imagen.

Las imgenes resultantes deben almacenarse en archivos TIF. Consigne el cdigo y explique el algoritmo utilizado.
function prueba(imagen, RS, L) an = input ( ' Ingrese la imagen= '); disp ('Ejemplos de parametros para la Lut') disp ('[50 80;100 256]') disp ('[10 20;30 100]' ) disp ('[10 20;30 100]' ) disp (' O introduce los parametros que desees') RS = input('Ingrese los parametros de la make lut='); I=imread(an); [h,w] = size(I); [am Lm]= size (RS); L=256 T = makeLUT(RS,L); %Llama funcin lut ic = I; for y =1:h-1 for x=1:w-1 r = I(y,x); ic(y,x)= T(r+1); end end figure; subplot(2,2,2); imhist(I); title('Histograma original'); subplot(2,2,4); imhist(ic); title('Histograma modificado'); subplot(2,2,1); imshow(I); title('Imagen original'); subplot(2,2,3); imshow(ic); title('Imagen Modificada'); % se almacena la imagen modificada. imwrite(ic,strcat('I','figura_contrastada.tif'));

ic donde esta guarda a I (la imagen original); con un ciclo for se recorre toda la matriz, en I (imagen original) empezamos en la posicin (1,1) (digamos que el pixel es igual a 50) y se carga en r, en la nueva matriz ic en la posicin (1,1) va ser cargada con el valor de la transformacin digamos que sea 51 (T(r+1)); y asi sucesivamente para cada pixel de la matriz hasta llenar todas las posiciones de la matriz ic (imagen modificada). Finalmente se muestran las imgenes (original y modificada) y los histogramas (original y modificado) 2.1. Pruebe el programa del numeral anterior para las imgenes bacteria.tif, moon.tif y saturn.tif. Para cada caso explique en qu se apoya para seleccionar la funcin de transformacin (parmetros de MakeLUT) que permita mejorar el contraste. Consigne los resultados e indique que efectos se produce sobre la imagen.

Fig. No 2. Aumento de Contraste de la imagen Moon.tif

En este algoritmo el usuario introduce por teclado la imagen (se guarda en la variable an, se lee la imagen y se guarda en una variable I) que desea aumentar el contraste y los parmetros de la LUT (se guarda en la variable RS), luego se determina el tamao de I y de RS, a continuacin se llama la funcin makeLUT(RS,L) y se crea una variable

Fig. No 3. LUT de la imagen Moon.tif, con Parmetros [50 80; 100 256] ,256

Fig. No 6. Aumento de Contraste de la imagen cell.tif

Fig. No 7. LUT de la imagen saturn.tif, con Parmetros [5 8; 10 20] ,256 Fig. No 4. Aumento de Contraste de la imagen saturn.tif

Fig. No 5. LUT de la imagen saturn.tif, con Parmetros [10 20; 30 100] ,256

Como se puede observar entre mas grande sean los valores de los parmetros de MakeLUT la imagen va a tener mayor contraste como se puede apreciar en la fig No 2. de la imagen moon; mientras que en la fig No 6. de la imagen de cell se puede observar que no hubo mucho cambio de contraste debido a que se utilizo valores muy pequeos en los parmetros de MakeLUT. 3. Fraccionamiento de planos de bits. Realice un programa que tome una imagen y genere sus planos de bits. El programa debe verificar el nmero de bits por cada pixel (8 o 16) y visualizar los planos en ventanas grficas diferentes por grupos. Consigne el cdigo y explique el algoritmo utilizado.
clear, clc; close all; i=imread('tire.tif'); subplot(3,3,1)

imshow(i); title('imagen original'); informacion=imfinfo('tire.tif'); bits = informacion.BitDepth; ancho= informacion.Width; altura= informacion.Height; Ngris=2^bits; i=double(i); for x=1:altura for y=1:ancho binario=dec2bin(i(x,y),8); doble=double(binario)-48; im1(x,y)=doble(1); im2(x,y)=doble(2); im3(x,y)=doble(3); im4(x,y)=doble(4); im5(x,y)=doble(5); im6(x,y)=doble(6); im7(x,y)=doble(7); im8(x,y)=doble(8); end end Subplot(3,3,2); imshow(logical(im8)) title('Plano 1'); subplot(3,3,3); imshow(logical(im7)); title('Plano 2'); subplot(3,3,4); imshow(logical(im6)); title('Plano 3'); subplot(3,3,5); imshow(logical(im5)); title('Plano 4'); subplot(3,3,6); imshow(logical(im4)); title('Plano 5'); subplot(3,3,7); imshow(logical(im3)); title('Plano 6'); subplot(3,3,8); imshow(logical(im2)); title('Plano 7'); subplot(3,3,9);

imshow(logical(im1)); title('Plano 8');

Fig. No 8. Fraccionamiento de Bits de la imagen tire.tif

El algoritmo que utilizamos consiste en: primero lemos la imagen (tire.tif) y la guardamos en la variable i, luego mostramos la imagen, se hizo una lectura
de datos a partir de la estructura (informacin) extrayendo toda la informacin de la imagen con el comando "imfinfo, de esta informacin se determino el numero de bits de la imagen, el ancho y la altura, seguidamente determinamos los parmetros de la imagen, como la matriz de la imagen esta en uint8 se pasa a double,

a continuacin por medio de un ciclo for tomamos cada uno de los valores de los pxeles de la imagen, se pasan de decimal a binario para poderlos operar y como el numero debe ser de 8 bits, los que no tengan todos los valores se rellena con ceros, luego cada uno de estas 8 cifras binarias se guardan en variables separadas para poder fraccionar el plano de bits, finalmente mostramos los planos de bits. 3.1. Aplique el programa del numeral anterior a la imagen moon.tif y a su respectiva imagen mejorada (resultado de 2.1). Consigne y analice los resultados. Explique las diferencias encontradas.

qq(1,(s+1))=acu; acu=0; end d=0; qqq=[]; for k=1:length(qq) d=qq(k)+d; qqq=[qqq d]; end qqq=qqq./max(qqq); qqq=floor(255*qqq);
Fig. No 9. Fraccionamiento de Bits de la imagen moon.tif

T=qqq ; xecual=applyLUT(x,T); subplot(2,2,1); imshow(x); title('Imagen Original'); subplot(2,2,2); imhist(x) title('Histograma Imagen Original'); subplot(2,2,3); imshow(xecual); title('Imagen Ecualizada'); subplot(2,2,4); imhist(xecual) title('Histograma de la Imagen Ecualizada');

Como se puede observar en ambas imgenes los planos de bits del 1 al 3 son muy borrosos, ya que no contienen informacin relevante de la imagen (bajas frecuencias). A partir de los planos 6 al 8 se puede apreciar el realce de los bordes, ya que estos planos son los que aportan mayor informacin de la imagen (altas frecuencias). Ecualizacin del histograma. Implemente una funcin que tome una imagen y le aplique la tcnica de ecualizacin del histograma. El programa debe visualizar en una misma ventana, las imgenes y los histogramas antes y despus del tratamiento. La imagen resultante debe almacenarse en un archivo con el mismo formato de la imagen de entrada. Consigne el cdigo y explique el algoritmo utilizado.
4.
function prueba(archivo) x=imread('rice.png'); [al an]=size(x); pix=0:255; acu=0; for s=0:255 for i=1:al for j=1:an if x(i,j)==s acu=acu+1; end end end

Para aplicar la tcnica de ecualizacin a una imagen aplicamos una funcin donde, primero se lee la imagen y se guarda en una variable x, luego a partir de ciclos for anidados se calcula el histograma de la imagen, donde las variables i, j, recorren toda la matriz y si x(i, j) es igual a s (que va desde 0 hasta 255) se va acumulando (en una variable acu que se inicializa en cero y se le suma 1) es decir que se van contando el numero de pixeles iguales , finalmente el histograma queda guardado en la variable qq; seguidamente a partir de un ciclo for calculamos el histograma acumulado (queda guardado en la variable qqq), normalizamos el histograma, luego aplicamos el vector de transformacin a la variable qqq y por ultimo se visualizan las imgenes con su histograma original y ecualizado.

4.1. Pruebe el programa del numeral anterior con las imgenes tire.tif, saturn.tif y pout.tif. Consigne y analice los resultados. Explique el efecto obtenido en cada caso.

Fig No 12. Ecualizacin del Histograma de la imagen pout.tif

Fig No 10. Ecualizacin del Histograma de la imagen tire.tif

Como podemos ir observando en las imgenes anteriores la ecualizacin de la imagen lo que genera aparte de un distribucin del histograma de la imagen, hace que todos los valores sean parecidos (que las lneas sean del mismo alto), en el histograma original de las figuras 10 y 11 (Imgenes tire.tif y saturn.tif) se puede observar que stas son muy oscuras, es decir, a la izquierda, al ecualizarlo no quedan las lneas del mismo tamao en la distribucin; en la figura 12 (imagen pout.tif) podemos apreciar que la imagen es gris y al ecualizar el histograma se nota una mejora de la imagen ya que los pxeles fueron mejores distribuidos logrando observar mejor algunos detalles que en la imagen original no se vean. 5. Especificacin del histograma. Implemente una funcin que tome una imagen y le aplique la tcnica de especificacin del histograma. Para este caso, se considera que el histograma deseado presenta un comportamiento gaussiano centrado alrededor del valor L/2 (donde, L es la cantidad de niveles de gris) y que el usuario puede indicar la desviacin estndar. El programa debe visualizar en una misma ventana, las imgenes y los histogramas antes y despus del tratamiento. La imagen resultante debe almacenarse en un archivo con el mismo formato de la imagen de entrada. Consigne el cdigo y explique el algoritmo utilizado. R/ Algoritmo explicacin y su respectiva

Fig No 11. Ecualizacin del Histograma de la imagen saturn.tif

Especificacin de histograma, consiste en modificar el nivel de intensidad de un pxel de la imagen a corregir mediante una transformacin tal que el histograma de la imagen resultante

presente un histograma similar al de la imagen de referencia. Cuando los histogramas son similares significa que el brillo medio, contraste y distribucin de niveles de grises son tambin parecidos. Esta tcnica funciona mejor mientras mayor sea el nmero de pxeles y, sobre todo, de niveles de grises.
function [fig,var]= Espec_Histog(img,desvi) % [fig,var]= Espec_Histog('tire.tif',50) % [fig,var]= Espec_Histog('saturn.png',50)

y en algunos casos puede ser beneficioso ya que la imagen se puede clarar u oscurecer segn el caso.
subplot(3,3,1); imshow(i); title('Imagen original'); subplot(3,3,3); plot(his_ib); title('Histograma de la imagen'); subplot(3,3,5); plot(camp); title('Campana de Gauss (Histograma deseado)'); subplot(3,3,7); imshow(k); title('Especificacion de la imagen'); subplot(3,3,9); plot(y); title('Especificacin del histograma');

La parte del cdigo anterior nos permite crear la funcin para que en el workspace la persona pueda variar los diferentes parmetros segn la necesidad, su imagen y la desviacin para la campana de gauss.
i=imgread(img); informacion=imgfinfo(img); bits = informacion.BitDepth; Ancho= informacion.Width; Altura= informacion.Height; Ngris=2^bits; Lmin=0; Lmax=Ngris-1; imgshow(i); ib=histeq(i); his_ib= imghist(ib); figure plot(his_ib) a=1; Lmedio=Ngris/2; gauss=a*exp(-((([1:1:Ngris]Lmedio)./desvi)).^2);

Finalmente se visualizan las imgenes con sus respectivos tratamientos. 5.1. Pruebe el programa del numeral anterior con las imgenes tire.tif y saturn.tif. Consigne y analice los resultados. Explique el efecto obtenido en cada caso y las diferencias con el tratamiento presentado en los numerales 4.1.

Con el procedimiento anterior lo que hicimos fue la ecualizacin inversa lo que nos permite pasar de la imagen ecualizada a una nueva imagen cuyo histograma tiene la forma dada por el histograma deseado que se ha utilizado.
k=histeq(i,camp); y=imhist(k);

Con la funcin histeq la imagen queda automticamente ecualizada y se puede observar la imagen con una distribucin de niveles de gris mucho mas uniforme

Fig No 13. Especificacin del histograma de la imagen tire.tif

A veces con la ecualizacin no es suficiente para resaltar ciertos detalles de las imgenes que queremos observar mejor, para este caso se puede observar que cuando obtiene el histograma de la imagen ya ecualizada vemos que igual es una imagen de bajo contraste. Como el histograma de forma de campana de Gauss se puede observa que tiene mas niveles claros de gris entonces cuando aplicamos este vector de transformacin se puede ver que la imagen se aclara un poco y se pueden ver mas detalles.

cuadrada de tamao impar a una imagen digital. La funcin debe tener el siguiente formato:
function [i_out] = fmask1 [i_in, mask, k ]

Consigne el cdigo del programa y explique su algoritmo.


function [i_out]=fmask2(i_in,mask,k); clc; a=input('ingrese el tamao de la mascara \ntamao = '); if mod(a,2)==0; Flag = ' mascara de tamao par, ingrese una de tamao impar 3x3 5x5 7x7 9x9' return; end k=input('\ningrese el kernel\nkernel = '); for x=1:a for y=1:a mask1(x,y)=input('ingrese el valor= '); end end mask =1/(a^2)*mask1; im=imread('cameraman.tif'); A=double(im); [am Lm]= size (mask); [a L]= size (im);

Fig No 14. Especificacin del histograma de la imagen saturn.tif

En este caso al aplicar el vector de transformacin de la campana de Gauss a la imagen se puede observar que efectivamente el histograma de la imagen tomo la apariencia de la campana de Gauss, y se aclara un poco, permitiendo observar unos detalles que en la original no era permitido, pero tambin se pierden otros detalles que se pueden ver en la original, en lo posible se debe trabajar con las dos imgenes para tener una mejor interpretacin de la misma. 6. Filtrado espacial 6.1. Mscaras. Realice una funcin en Matlab que permita aplicar una mscara

Flag = ' mascara de tamao impar continuando el proceso' P=zeros(a+am-1, L+Lm-1); limite=fix(am/2); for i=1:a; for j=1:L; P(i+limite,j+limite)=A(i,j); end end for s=1:a; for S=1:L; for z=1:am; for x=1:Lm; I(z,x)=P(s+z-1,S+x-1)*mask(z,x); end end i_out1(s,S)=sum(sum(I)); end end i_out1=i_out1.*k; low=min(min(i_out1)); i_out1=i_out1-low; hi=max(max(i_out1)); m=255/hi;

i_out=i_out1.*m; subplot(1,1,1); imshow(im); title('Imagen original'); subplot(1,1,2); imshow(uint8(i_out)); title('Imagen despues de tratamiento');

6.2. Imgenes de prueba. Genere un programa que tome una imagen y le adicione ruido aleatorio con parmetros especificados por el usuario. El programa debe visualizar las imgenes antes y despus de modificadas indicando el tipo de ruido adicionado. La imagen resultante debe grabarse en un archivo .tif con un nombre indicado por el usuario. Para generar el ruido utilice la funcin imnoise( ) de Matlab, con las opciones: gaussian, SALT & pepper, y speckle.

Fig No 15. Mscara Cuadrada de tamao Impar de la imagen cameraman.tif

function ruido(i_in,tipo,k) i_in = input('Ingrese la imagen ='); disp('OPRIMA 1= RUIDO GAUSSIAN') disp('OPRIMA 2= SALT & PEPPER') disp('OPRIMA 3= RUIDO SPECKLE') tipo = input('Ingrese el tipo de ruido='); while tipo ~=1 & tipo ~=2 & tipo ~=3 disp('Opcin Incorrecta') tipo = input('Ingrese el tipo de ruido='); end k = input('Ingrese k ='); I = imread(i_in); if tipo==1 disp(' selecciono ruido gaussian') J = imnoise(I,'gaussian', k); subplot (1,2,1) imshow(I) title ('Imagen Original') subplot (1,2,2) imshow(J) title ('Imagen con Ruido Gaussian') elseif tipo==2 disp(' selecciono ruido salt & pepper') J = imnoise(I,'salt & pepper', k); subplot (1,2,1) imshow(I) title ('Imagen Original') subplot (1,2,2) imshow(J) title ('Imagen con Ruido Salt & Pepper') elseif tipo==3 disp(' selecciono ruido speckle') J = imnoise(I,'speckle', k); subplot (1,2,1)

Con el cdigo anterior lo que pudimos hacer fue implementar la convolucin en forma matricial, el objetivo de aplicar mascaras a las imgenes es con el fin de hacer diferentes filtros para el mejoramiento de las imgenes, los diferentes filtros que se realicen dependen de los valores que contenga la matriz o mascara que se le aplique, en el anterior cdigo se puede observar que el usuario es el que introduce los valores de la matriz, teniendo en cuenta que debe ser una matriz cuadrada e impar, para as asegurar un valor central, que es el principal para el procesamiento de la imagen, y tambin se debe tener en cuenta el valor de la variable K ya que es un valor que multiplica toda la matriz y esta se puede ver muy afectada por esta condicin En el cdigo se observa que es necesario la creacin de nuevas columnas y filas de ceros alrededor de la imagen original que depende de el tamao de la mascara, y esto se debe hacer para evitar que esta opere con valores inexistentes, luego de las operaciones de multiplicacin y suma sucesivas se puede ir generando la nueva imagen.

imshow(I) title ('Imagen Original') subplot (1,2,2) imshow(J) title ('Imagen con Ruido Speckle') end

Para ingresar la imagen se usa el comando input y se guarda en la variable i_in. Posteriormente se le presenta al usuario un men, donde tiene la opcin de escoger el tipo de ruido que desea agregarle a la imagen, la opcin 1 corresponde al Ruido Gaussiano, la opcin 2 corresponde al Ruido salt & pepper, y la opcin 3 corresponde al Ruido speckle; Si el usuario oprime una opcin diferente a las anteriores le aparecer un mensaje indicndole que la opcin es incorrecta, esto se hace por medio del ciclo while. Luego el usuario ingresa el valor de k, el cual es diferente para cada ruido. La funcin imnoise, permite convertir una imagen original a una imagen ruidosa agregndole ruido segn el tipo y los parmetros especificados. Finalmente se hace la visualizacin de la imagen original y la imagen con su respectivo ruido con el comando imshow. 6.3 Filtros de Alisamiento (Paso bajo). Genere una funcin para aplicar a una imagen un filtro promedio o un filtro mediana segn seleccin del usuario en una ventana de dilogo. Pruebe el programa con las imgenes alumgrs.tif y pout.tif, y a sus respectivas imgenes con ruido.
function [i_out]=promedio (i_in,mask,k) im=imread('moon.tif' ); %leemos imagen A=double(im); [f,c]=size(A); disp('OPRIMA 1: filtro promedio') disp('OPRIMA 2: filtro mediana') tipo = input('Ingrese el tipo de filtro ='); % matriz qla mascara : mask=[0 1 0;1 1 1;0 1 0] while tipo ~=1 & tipo ~=2 disp('Opcin Incorrecta') tipo = input('Ingrese el tipo de filtro='); end

Fig No 16. Ruido Gaussian de la imagen eight.tif

Fig No 17. Ruido Salt & Pepper de la imagen eight.tif

Fig No 18. Ruido Speckle de la imagen eight.tif

Este algoritmo requiere de la entrada de datos por parte del usuario es por esto que se hace uso de function ruido (i_in, tipo, k), donde el usuario ingresa la imagen que desea observar (usando la funcin i_in), el tipo de ruido y el valor de k.

if tipo==1 for i=2:f-1 for j=2:c-1 D(i,j)=sum(sum(A((i-1):(i+1),(j-1):(j+1)))); D(i,j)=D(i,j)/9; end end elseif tipo==2 for i=2:f-1 for j=2:c-1 F(i,j)=median([A(i-1,(j-1):(j+1)) A(i,(j1):(j+1)) A(i+1,(j-1):(j+1))]); end end end figure subplot(1,2,1); imshow(uint8(A)); title('Imagen Original'); subplot(1,2,2); imshow(uint8(F)); if tipo==1 title('Imagen filtrada (promedio)'); else title('Imagen filtrada (mediana)'); end end
Fig No 22. Filtro de alisamiento (Mediana) de la imagen moon.tif

Fig No 21. Filtro de alisamiento (promedio) de la imagen moon.tif

Fig No 19. Filtro de alisamiento (promedio) de la imagen pout.tif

En el anterior algoritmo el usuario tiene opcin de aplicar el tipo de filtro que desea, la opcin 1 corresponde al filtro promedio, la opcin 2 corresponde al filtro mediana, s el usuario digita una opcin diferente le aparecer un mensaje indicndole que el la opcin es incorrecta, esto se hace por medio del ciclo while. Para el filtro promedio creamos una mascara 3X3 donde todos los coeficientes de las mascara son 1s, luego la imagen completa se divide por 9 (o sea, por la suma de todos los coeficientes). Una aplicacin importante de este tipo de filtrado es el borrocidad de la imagen. Para el filtro mediana el algoritmo usado (2 ciclos for anidados) forma un vector, concatenando 3 filas de 3 elementos cada una que corresponde a

Fig No 20. Filtro de alisamiento (Mediana) de la imagen pout.tif

una ventana de 3X3 de la matriz A, y luego se obtiene la mediana de ese vector por medio de la funcin de Matlab median. Finalmente se realiza la visualizacin de dichas imgenes, sta depende de la opcin escogida por el usuario. 6.5 Filtros de Resalte (Paso alto). Utilizando la funcin fmask1, aplique las mscaras de realce indicadas a las imgenes alumgrns.tif y pout.tif, y a sus respectivas imgenes con ruido. i. Filtro Paso Alto Bsico ii. High-boost
function [i_out]=fmask1 (ima_in,mask,k) k = input('Ingrese k ='); ima_in = input('Ingrese la imagen ='); mask = input('Ingrese la mascara ='); im=imread(ima_in); A=double(im); [am Lm]= size (mask); [a L]= size (im); if mod(am,2)==0 Flag = ' mascara de tamao par ingrese una de tamao impar 3x3 5x5 7x7 9x9' return; end Flag = ' mascara de tamao impar' P=zeros(a+am-1, L+Lm-1); limite=fix(am/2); for i=1:a; for j=1:L; P(i+limite,j+limite)=A(i,j); end end for s=1:a; for S=1:L; for z=1:am; for x=1:Lm; I(z,x)=P(s+z-1,S+x-1)*mask(z,x); end end i_out1(s,S)=sum(sum(I)); end end i_out=i_out1.*k;

i_out1=i_out1-low; hi=max(max(i_out1)); m=255/hi; i_out=i_out1.*m; subplot(1,2,1) imshow(im); title('Imagen original'); subplot(1,2,2) imshow(uint8(i_out)); title('Imagen despus de tratamiento');

Utilizando la fmask1 se implemento un programa con el cual se realiz un filtro pasa alto, se declara una variable im donde se almacena la imagen que deseamos procesar, verificamos las dimensiones de la mascara y de la imagen; posteriormente, se comprueba que la matriz que ingrese el usuario a travs de la interfaz grfica sea de tamao par y en caso contrario se presentan banderas. Por otra parte, creamos una matriz de ceros P que va desde ancho hasta ancho-1, y de largo hasta largo-1, a fin de evitar que cuando sea recorrida la imagen y se hagan las respectivas operaciones se presente un desbordamiento, de igual forma, hacemos otro ciclo for anidado para signar la matriz A en P y ejecutar la mscara que recorra toda la matriz. Finalmente, se realiza la visualizacin de la imagen original y la imagen modificada. 6.6. Consigne los resultados y efecte un anlisis comparativo de los resultados. Indique en que situaciones se puede desempear mejor cada filtro.

Fig No 23. Filtro Paso Alto Bsico de la imagen pout.tif

Fig No 24. Filtro High-boost de la imagen pout.tif

procesar y una cadena de caracteres indicando el tipo de operador a aplicar (Sobel, Roberts, Prewitt). El programa debe visualizar en una misma ventana la imagen de entrada y de salida. Tambin debe visualizarse el tipo de operador usado. Efecte un ajuste automtico al rango dinmico de las imgenes de salida para que su visualizacin sea la adecuada. Consigne el cdigo del programa y explique su algoritmo. No debe utilizarse funciones de Matlab que hagan la totalidad de lo pedido.
function [i_out]=fmask1(i_in,mask,k); clc; k=1 a=input('Seleccione el operador gradiente \n 1.Sobel \n 2.Roberts \n 3.Prewitt \n operador= ','s'); b=input('Seleccione tipo de operador gradiente \n 1.tipo A \n 2.tipo B \n tipo= ','s'); operador=str2num(a); tipo=str2num(b) if operador==1 if tipo==1 mask =1/9*[-1 -2 -1;0 0 0;1 2 1]; flag= ' selecciono operador gradiente sobel tipo 1' end if tipo==2 mask =1/9*[-1 0 1;-2 0 2;-1 0 1]; flag= ' selecciono operador gradiente sobel tipo 2' end end if operador==2 if tipo==1 mask =1/4*[1 0;0 -1]; flag= ' selecciono operador gradiente Roberts tipo 1' end if tipo==2 mask =1/4*[0 1;-1 0]; flag= ' selecciono operador gradiente Roberts tipo 2' end end if operador==3 if tipo==1 mask =1/9*[-1 -1 -1;0 0 0;1 1 1]; flag= ' selecciono operador gradiente Prewitt tipo 1'

El objetivo de los filtros pasa alto es destacar los detalles finos de una imagen o intensificar detalles que han sido difuminados. En el filtro pasa alto bsico, se utiliza una mascara la cual en su centro tiene un valor positivo y el resto son valores negativos, pero tambin elimina el termino de frecuencia cero (0) y esto lo que hace es reducir significativamente el contraste global. El resultado de este filtro implican de alguna forma desplazamiento o cambio de escala, para que el final los niveles de grises queden dentro del intervalo. El filtro high-boost, lo que hace es multiplicar la imagen original por un factor de amplificacin, y el resultado de aplicar este filtro es que la imagen se parezca mas a la original, con un grado relativo de mejora de los bordes, esto depende del valor del factor amplificacin, si ste aumenta el fondo de la imagen se hace mas brillante. Lo malo de estos filtros es que intensifican el ruido, junto con las transiciones bruscas de la intensidad de la imagen. 6.7. Operador Gradiente. Realice un programa en Matlab que permita calcular la magnitud del gradiente de una imagen (El gradiente es un vector). La funcin debe recibir como parmetros de entrada la imagen a

end if tipo==2 mask =1/9*[-1 0 1;-1 0 1;-1 0 1]; flag= ' selecciono operador gradiente Prewitt tipo 2' end end im=imread('cameraman.tif'); A=double(im); [am Lm]= size (mask); [a L]= size (im); Flag = ' mascara de tamao impar continuando el proceso' P=zeros(a+am-1, L+Lm-1); limite=fix(am/2); for i=1:a; for j=1:L; P(i+limite,j+limite)=A(i,j); end end for s=1:a; for S=1:L; for z=1:am; for x=1:Lm; I(z,x)=P(s+z-1,S+x-1)*mask(z,x); end end i_out1(s,S)=sum(sum(I)); end end low=min(min(i_out1)); if low<0 i_out1=i_out1-low; end low=min(min(i_out1)); i_out1=i_out1-low; hi=max(max(i_out1)); m=255/hi; i_out=i_out1.*m; subplot(1,2,1); imshow(im); title('Imagen original'); subplot(1,2,2); imshow(uint8(i_out)); title('Imagen despues de tratamiento');

operador Prewitt. El tipo para cada operador ya esta definido, es decir que en ste no decidimos la mascara sino que ya esta predeterminada dependiendo de la opcin que escoja el usuario y el kernel siempre ser 1. Luego se hace una reduccin del rango dinmico y finalmente es visualizada la imagen. 6.8. Aplique cada uno de los operadores gradiente a las imgenes ic.tif y alumgrns.tif, y a sus respectivas imgenes con ruido. Consigne los resultados y efecte un anlisis comparativo de los resultados. Indique en que situaciones se puede desempear mejor cada operador.

Fig No 25. Operador Sobel de la imagen cameraman.tif

Fig No 26. Operador Roberts de la imagen cameraman.tif

Para este algoritmo el usuario tiene la opcin de escoger con cual operador y tipo de operador quiere trabajar, cada operador gradiente tiene dos tipos (tipo 1 y tipo 2), la opcin 1 corresponde al operador Sobel, opcin 2 corresponde al operador Roberts y la opcin 3 es el

salida para que su visualizacin sea la adecuada. Consigne el cdigo del programa y explique su algoritmo. Pueden utilizarse funciones de Matlab que hagan la totalidad de lo pedido. (Por tiempo de ejecucin).
Fig No 27. Operador Prewitt de la imagen cameraman.tif

Si se requiere hacer un filtrado para tener solo los contornos de la imagen como se muestra en el ejemplo antes utilizado, se puede usar esta funcin fcilmente, sin pensar en el algoritmo especifico para hacer la mascara para un filtro pasa alto. Los operadores de gradiente se obtienen al tomar el valor absoluto de la respuesta de dos mascaras y luego sumar ambos resultados con el fin de aumentar la nitidez de la imagen, siendo este un efecto contrario al promedio de pxeles que tiende a difuminar la imagen. Podemos ver que cada uno de los operadores gradientes nos arrojan imgenes diferentes, pero las diferenciamos por que unas muestran los contornos ms sobresalientes de forma mas clara y las imgenes parecieran ser superpuestas. 6.9. Operador Laplacian. Realice un programa en Matlab que permita el Laplacian de una imagen (El Laplacian es un escalar que puede ser positivo o negativo). La funcin debe recibir como parmetros de entrada la imagen a procesar y una cadena de caracteres para indicar cual de tres aproximaciones se debe aplicar. El programa debe visualizar en una misma ventana la imagen de entrada y de salida. Tambin debe visualizarse el tipo de operador usado. Efecte un ajuste automtico al rango dinmico de las imgenes de

function [i_out]=fmask1(i_in,mask,k); clc; k=1 a=input('Seleccione el operador Laplacian \n 1.Tipo 1 \n 2.tipo 2\n 3.tipo 3 \n Tipo= ','s'); tipo=str2num(a); if tipo==1 mask =1*[0 1 0;1 -4 1;0 1 0]; disp=('selecciono operador Laplacian tipo 1') end if tipo==2 mask =1/2*[1 0 1;0 -4 0;1 0 1]; disp=(' selecciono operador Laplacian tipo 2') end if tipo==3 mask =1/6*[1 4 1;4 -20 4;1 4 1]; disp=(' selecciono operador Laplacian tipo 3') end cr=input('ingrese la imagen: ') im=imread(cr); A=double(im); [am Lm]= size (mask); [a L]= size (im); disp=(' mascara de tamao impar continuando el proceso') P=zeros(a+am-1, L+Lm-1); limite=fix(am/2); for i=1:a; for j=1:L; P(i+limite,j+limite)=A(i,j); end end for s=1:a; for S=1:L; for z=1:am; for x=1:Lm; I(z,x)=P(s+z-1,S+x-1)*mask(z,x); end end i_out1(s,S)=sum(sum(I)); end end i_out=i_out1.*k; low=min(min(i_out1)); i_out1=i_out1-low;

hi=max(max(i_out1)); m=255/hi; i_out=i_out1.*m; subplot(2,1,1); imshow(im); title('Imagen original'); subplot(2,1,2); imshow(uint8(i_out)); title('Imagen despues de tratamiento');

Con el cdigo anterior implementamos los filtros Laplacianos o deteccin de bordes lo que hace este cdigo es derivar la imagen y detectar todo los pxeles que tienen un cruce por cero, en realidad este tipo de filtro se utiliza para verificar si un pxel esta en la zona clara u oscura de una imagen, ya que en la deteccin de bordes puede producir un segundo borde al original debido a que es muy susceptible al ruido. Al implementar el Laplaciano 1, 2 o 3 lo que estamos variando es la matiz que recorrer la imagen, y dependiendo de esta tendr en cuenta la vecindad 4 u 8, y se debe tener en cuenta que este tipo de filtrado como es una derivada la sumatoria de los valores de la matriz debe ser siempre cero, en general es un mtodo no efectivo en la deteccin de bordes, ya que se ve afectado por el ruido. En la primera parte del cdigo se puede observar que la matriz cambia segn lo desea el usuario, y este puede escoger los 3 tipos de Laplacianos que existen, ya la parte siguiente del cdigo es la implementacin de la mascara y su recorrido por la imagen. 6.10. Aplique cada uno de los operadores laplacian a las imgenes ic.tif y alumgrns.tif, y a sus respectivas imgenes con ruido. Consigne los resultados y efecte un anlisis comparativo de los resultados. Indique en que situaciones se puede desempear mejor cada operador.

Fig No 28. Operador Laplacian tipo 1 de la imagen rice.tif

Aqu podemos observar un filtrado laplaciano 1 el cual solo tiene en cuenta los vecinos 4, se resaltan los bordes pero no es muy clara la imagen ya que aclara muy poco las zonas oscuras.

Fig No 29. Operador Laplacian tipo 2 de la imagen cell.tif

En el tipo 2 se puede observar que los bordes se resaltan mucho mas, a pesar que la imagen tiene una distribucin de pixeles recargado.

Fig No 30. Operador Laplacian tipo 3 de la imagen tire.tif

Al modificar los valores de la matriz aumentando los coeficientes sin alterar la suma igual a cero se puede observar que hay mas realce de bordes, este mtodo es el mas efectivo entre los 3. CONCLUSIN El fraccionamiento de planos de bits es muy til cuando una imagen es muy pesada y se desea comprimir, al hacer el fraccionamiento obtenemos que los bits mas significativos son los que tiene la mayor informacin sobre la imagen, de acuerdo a la fig No. 9 se puede construir la imagen a partir de los cuatro ltimos planos. De la practica podemos concluir que para disear un algoritmo que genere los planos de bits de una imagen, hay que tener en cuenta que lo que se hace es comprimir la imagen y mejorar el contraste, entonces esto fue un proceso muy sencillo ya que se toma cada uno de los valores de los pxeles de la imagen, pasarlos de decimal a binario para poderlos operar y como el numero debe ser de 8 bits entonces estas 8 cifras binarias las guarda en variables separadas para poder fraccionar el plano de bits. Este procesamiento de imgenes mejora el aspecto de las imgenes y hace ms evidente en ellas ciertos detalles que se desean hacer notar. La tcnica de especificacin de histograma nos permite que una imagen pueda tener la apariencia de una imagen deseada, en las figuras No.13 y la figura No.14 el histograma deseado es la campana de Gauss la cual podemos modificar su varianza y as obtener un histograma mejor distribuido.

Las mascaras son de gran utilidad ya que nos proporcionan una herramienta en el proceso de hacer convolucin en imgenes para generar filtros y as hacer un mejoramiento de la imagen o resaltar detalles, pero hay que tener mucho cuidado en la implementacin de estas, ya que no se puede aplicar mascaras de diferentes tamaos sin tener en cuenta la generacin de nuevas filas y columnas de ceros que depende de la mascara. El resultado de aplicar un filtro pasabajos a una imagen es simplemente el promediado de los pxeles contenidos en el entorno de la mscara utilizada. generalmente ste se utiliza para atenuar los detalles irrelevantes en una imagen. Otra de las utilidades del filtro pasabajos, es el suavizado de los falsos contornos producidos por una cuantizacin con un nmero insuficiente de niveles de gris. Los filtros o derivadas Laplacianas, puede ser de gran utilidad para la deteccin de bordes, pero no es la mas efectiva, ya que depende de que tanto ruido tenga la imagen ya que este tipo de filtros son muy susceptibles a esos cambios, pero son efectivos para determinar si un pxel esta en zona clara o no.

You might also like