Upload
dangtram
View
222
Download
0
Embed Size (px)
Citation preview
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');
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];
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 &');