convoluciÓn y funciones de transformaciÓnread.pudn.com/downloads164/doc/745939/tarea 2.pdf · 1....

19
INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA COORDINACIÓN DE ELECTRÓNICA PROCESAMIENTO DIGITAL DE IMÁGENES CONVOLUCIÓN Y FUNCIONES DE TRANSFORMACIÓN PRESENTA: RUBÉN FRANCISCO ALFONSO LÓPEZ 3 DE FEBRERO DEL 2009

Upload: dangtram

Post on 04-Jun-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

INSTITUTO NACIONAL DE ASTROFÍSICA, ÓPTICA Y ELECTRÓNICA

COORDINACIÓN DE ELECTRÓNICA

PROCESAMIENTO DIGITAL DE IMÁGENES

CONVOLUCIÓN Y FUNCIONES DE TRANSFORMACIÓN

PRESENTA:

RUBÉN FRANCISCO ALFONSO LÓPEZ

3 DE FEBRERO DEL 2009

1. Obtenga con MATLAB una imagen de 512X512 pixels en niveles de gris.

Para llevar a cabo el primer paso, se uso una imagen de un cuadrado con dimensiones de

1019x767.

Fig. 1. Imagen de 1019x767 pixels.

Lo que se hizo en Matlab fue lo siguiente:

g=imread('cuadrado.bmp'); %Lee la imagen y la almacena en 'g'. whos g %Tamaño de la imagen 'g'. newg=g(1:512,1:512); %Obtiene la nueva imagen y la almacena en 'newg'. whos newg %Tamaño de la nueva imagen 'newg'.

imshow (g); %Muestra ambas imagenes figure, imshow(newg); %para compararlas.

imwrite(newg, 'cuad.png'); %Guarda 'newg' en el directorio de MATLAB.

La imagen que se obtuvo como resultado se muestra a continuación:

Fig. 2. Imagen de 512x512. (La imagen no está a la misma escala de la Fig. 1).

2. Realice al menos cinco transformaciones punto a punto s=T(r), analizando en cada

caso el histograma de la imagen resultante. (Binarización, transformaciones gamma,

aclaración, obscurecimiento, etc.)

Para trabajar con las transformaciones punto a punto se utilizó el comando “imadjust”.

Primero se llevaron a cabo unas transformaciones gamma, de la siguiente manera, los

resultados con sus respectivos histogramas se aprecian en la figura 3 y 4:

g=imread('cuad.png'); %Se lee la imagen g1=imadjust(g,[0 1],[0 1]); %Función gamma igual a 1 g2=imadjust(g,[0 1],[0 1], 0.3); %Función gamma menor a 1 g3=imadjust(g,[0 1],[0 1], 1.7); %Función gamma mayor a 1 subplot(2,2,1), imshow(g); %Grafica de imagen original subplot(2,2,2), imshow(g1); %Resultado de la función gamma igual a 1 subplot(2,2,3), imshow(g2); %Resultado de la función gamma menor a 1 subplot(2,2,4), imshow(g3); %Resultado de la función gamma mayor a 1

Con el mismo código pero cambiando los resultados a desplegar:

subplot(2,2,1), imhist(g), title('Histograma deimagen original'); subplot(2,2,2), imhist(g1), title('Histograma de funcion gamma=1'); subplot(2,2,3), imhist(g2), title('Histograma de funcion gamma<1'); subplot(2,2,4), imhist(g3), title('Histograma de funcion gamma>1');

Fig. 3. Resultados de Funciones de transformación gamma.

Fig. 4. Histogramas de las figuras de arriba.

Otra forma de obscurecer y aclarar las imágenes es como se muestra a continuación, los

resultados se muestran en las figuras 5 y 6:

g=imread('cuad.png'); %Se lee la imagen g1=imadjust(g,[0 1],[0 0.5]); g2=imadjust(g,[0 1],[0.5 1]); subplot(1,3,1), imshow(g); %Imagen original subplot(1,3,2), imshow(g1); %Imagen obscurecida subplot(1,3,3), imshow(g2); %Imagen aclarada

Fig.5. Imagen original, obscurecida y aclarada. Moviendo la función de transformación.

Los Histogramas correspondientes usando el comando “imhist”:

Fig.6. Histogramas de las figuras de arriba.

Para invertir la imagen (obtener su negativo), se hizo lo siguiente:

g=imread('cuad.png'); %Se lee la imagen g1=imadjust(g,[0 1],[1 0]); %Función de transformación subplot(2,2,1), imshow(g), title('Imagen original'); subplot(2,2,2), imhist(g), title('Histograma de imagen obscurecida'); subplot(2,2,3), imshow(g1), title('Negativo de Imagen'); subplot(2,2,4), imhist(g1), title('Histograma de Negativo');

Fig. 7. Negativo de la imagen y su histograma.

Para binarizar la imagen se utilizó el comando “graythresh” para calcular el umbral que se

puede usar para convertir una imagen a blanco y negro. Para la imagen con la que se trabaja

se obtuvo un umbral de 0.2196, con este valor se utilizo el comando “im2bw”, el resultado

fue el siguiente.

I=imread('cuad.png'); Um=graythresh(I) BW=im2bw(I,Um); subplot(1,2,1), imshow(BW), title('Imagen Binarizada'); subplot(1,2,2), imhist(BW), title('Histograma de Imagen Binarizada');

Fig. 8. Imagen binarizada y su respectivo histograma

Otro de los comandos que se usaron fue “grayslice”, de la forma siguiente:

f=imread('cuad.png'); g=grayslice(f,45); g1=grayslice(f,100); subplot(2,2,1), imshow(g), title('Imagen con grayslice=45'); subplot(2,2,3), imshow(g1), title('Imagen con grayslice=100'); subplot(2,2,2), imhist(g), title('Histograma con grayslice=45'); subplot(2,2,4), imhist(g1), title('Histograma con grayslice=100');

Fig. 9. Imágenes e histograma para el comando grayslice.

1 1 1

1 1 1

1 1 1

0 0 0 0 0

0 0 0 0 0

1 1 1 1 1

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

1 0 0 0 0

0 0 0 0 1

3. Convolución. (Comando de matlab “conv2”) Obtenga la convolución de una imagen en

niveles de gris con al menos cinco mascarillas de convolución, tratando en cada caso de

anticipar el resultado. Por ejemplo las siguientes mascarillas (pueden ser otras).

A: f=[ 1 1 1 1 1 1 1 1 1 1; 1 0 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 0 0 1; 1 0 0 1 1 1 1 0 0 1; 1 0 0 1 0 0 1 0 0 1; 1 0 0 1 0 0 1 0 0 1; 1 0 0 1 1 1 1 0 0 1; 1 0 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 0 0 1; 1 1 1 1 1 1 1 1 1 1];

g=[ 1 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 1];

h=conv2(f,g); subplot(1,2,1), imshow(f), title('Imagen original'); subplot(1,2,2), imshow(h), title('Resultado de convolución');

B: Con la mascarilla:

g=[ 1 1 1; 1 -8 1; 1 1 1];

C: Con la mascarilla:

g=[ 1 1 1; 1 1 1; 1 1 1];

D: Con la mascarilla:

g=[ 0 0 0; 0 0 0; 0 0 1];

E: Con la mascarilla:

g=[ 0 0 0 0 0; 0 0 0 0 0; 1 1 1 1 1; 0 0 0 0 0; 0 0 0 0 0];

4. Genere una imagen binaria geométrica sencilla de 512X512, por ejemplo una cruz, o un

círculo, y obtenga su convolución bidimensional con al menos cinco mascarillas distintas

(pueden ser las mismas del punto anterior, tratando en cada caso de anticipar el resultado.

A:

clear all e=imread('circle.jpg'); f=im2bw(e);

g=[ 1 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 0; 0 0 0 0 1];

h=conv2(double(f),g); subplot(1,2,1), imshow(f), title('Imagen original'); subplot(1,2,2), imshow(h), title('Resultado de convolución');

B: Con la mascarilla:

g=[ 0 0 0 0 0; 0 0 0 0 0; 1 1 1 1 1; 0 0 0 0 0; 0 0 0 0 0];

C: Con la mascarilla:

g=[ 1 1 1; 1 -8 1; 1 1 1];

D: Con la mascarilla:

g=[ 0 0 1; 0 0 0; 0 0 0];

E: Con la mascarilla:

g=[ 0 0 0; 0 0 0; 0 0 0];

5. Obtenga la imagen de bordes (edge detection) de alguna imagen en niveles de gris, a

través de la convolución con el operador Laplaciano o algun operador Sobel, y posterior

binarización, ajustando adecuadamente el umbral de binarización.

Operador Laplaciano:

g=[ 0 1 0; 1 -4 1;

0 1 0];

clear all e=imread('circulo.bmp'); f=rgb2gray(e);

g=[ 0 1 0; 1 -4 1; 0 1 0];

h=conv2(double(f),g); subplot(1,2,1), imshow(f), title('Imagen original'); subplot(1,2,2), imshow(h), title('Resultado de convolución');

Binarizando la imagen usando un umbral adecuado:

clear all e=imread('circulo.bmp'); f=rgb2gray(e); um=graythresh(f) %umbral de 0.5020 r=im2bw(f,um);

g=[ 0 1 0; 1 -4 1; 0 1 0];

h=conv2(double(r),g); subplot(1,2,1), imshow(r), title('Imagen original'); subplot(1,2,2), imshow(h), title('Resultado de convolución');

6. Realice mejora de contraste en una imagen usando la ecuación

clear all f=imread('llanta.bmp'); um=graythresh(f); f2=im2bw(f,um); f3=f2(1:512,1:512); g=[ 0 1 0; 1 -4 1; 0 1 0]; h=conv2(double(f3),g); h2=h(1:512, 1:512); h3=h2+double(f3); subplot(2,2,1), imshow(f3), title('Imagen original'); subplot(2,2,2), imshow(h), title('Resultado de la convolución'); subplot(2,2,3), imshow(h2), title('Imagen ajustada'); subplot(2,2,4), imshow(h3), title('Resultado de la suma');

),(),(),( 2 yxfyxfyxg

USO DE OPERADOR AND (&):

f=imread('llanta.bmp'); um=graythresh(f); f2=im2bw(f,um); f3=f2(1:512,1:512); g=[ 0 1 0; 1 -4 1; 0 1 0]; h=conv2(double(f3),g); h2=h(1:512, 1:512); r=double(f3) & h2; subplot(2,2,1:2), imshow(f3), title('Imagen original'); subplot(2,2,3), imshow(h), title('Resultado de la convolución'); subplot(2,2,4), imshow(r), title('Resultado de operador &');

r=~xor(double(f3), h2);