LABORATORIO DE VISIÓN ARTIFICIAL Práctica 2 Todas las imágenes que vamos a utilizar en esta práctica deberán ser descargadas previamente de la página Web de la asignatura, en nuestro directorio c:\vision\lab. A continuación ejecutamos el programa Matlab, para leer y procesar dichas imágenes. 1.- Ejecutar los siguientes comandos para leer la imagen especificada en formato BMP, con mapa de colores indexado, y mostrarla. Obsérvese lo poco contrastada que es esta imagen. » [x,map]=bmpread('c:\vision\lab\bazo.bmp'); » imshow(x,map) 2.- Convertir la imagen anterior en otra con formato de escala de 256 niveles de gris, mostrándola posteriormente. Como la imagen original no estaba coloreada no debemos apreciar diferencia visual alguna. » i=ind2gray(x,map); » imshow(i,256) 3.- Mostrar el histograma de la imagen anterior y estudiar su aspecto para determinar que, efectivamente, se trata de una imagen poco contrastada. » imhist(i,256); 4.- Ecualizar el histograma de la imagen i, almacenando la imagen resultante en el array e. Comparar los resultados obtenidos mostrando la nueva imagen y su histograma. » e=histeq(i,256); » imshow(e,256) » imhist(e,256); 5.- Ahora vamos a trabajar con otra imagen de la que previamente averiguaremos su formato: RGB si se almacenan 24 bits por pixel, o mapa indexado de colores si se almacenan 8 bits por pixel. » bpp=bmpread('c:\vision\lab\envase.bmp') bpp = 24 Como el valor devuelto por la función es 24, lógicamente se trata de un formato RGB. 6.- Según lo anterior, leemos la nueva imagen en formato RGB, pero antes borramos todas las variables actualmente existentes en nuestro espacio de trabajo con el fin de que no ocupen memoria innecesaria. » clear » [r,g,b]=bmpread('c:\vision\lab\envase.bmp'); J. M. Miguel Jiménez Departamento de Electrónica. Universidad de Alcalá Pág.1 7.- Ahora convertimos la imagen a escala de grises, la visualizamos y también representamos su histograma con idea de deducir un umbral adecuado para su posterior binarización. » i=rgb2gray(r,g,b); » imshow(i,256) » imhist(i,256) 8.- Con el siguiente comando umbralizamos la imagen convirtiéndola en una imagen cuyos pixels son totalmente negros (0) y blancos (1). El segundo parámetro representa el umbral que deseamos fijar. Como el histograma de la imagen i es bimodal y el nivel de gris central es de aproximadamente 0.25, usamos este umbral. » b=im2bw(i,0.25); » imshow(b,2) » imshow(b,256) como la imagen resultante sólo tiene 2 niveles de gris (0 y 1), los dos últimos comandos producen el mismo efecto. 9.- Con idea de probar algunas posibilidades de la convolución en dos dimensiones para imágenes, vamos a ir experimentando con varias máscaras: - Máscara 1: hace una derivación en sentido horizontal en el entorno de cada pìxel, por lo que detecta bordes verticales(concretamente, transiciones de blanco a negro). - Máscara 2: hace una derivación vertical, por lo que detecta bordes horizontales. - Máscara 3: hace una derivación de un pixel respecto a la media de los de su entorno, por lo que detecta puntos. -1 -1 -1 0 0 0 1 1 1 Máscara 1 -1 0 1 -1 0 1 -1 0 1 Máscara 2 -1 -1 -1 -1 8 -1 -1 -1 -1 Máscara 3 » mascara=[-1 0 1 -1 0 1 -1 0 1] » lv=conv2(b,mascara); » imshow(lv,256) » mascara=[-1 -1 -1 0 0 0 1 1 1] » lh=conv2(b,mascara); » imshow(lh,256) » mascara=[-1 -1 -1 -1 8 -1 -1 -1 -1] » p=conv2(b,mascara); » imshow(p,2) 10.- Utilizando máscaras de Sobel sobre la imagen umbralizada del apartado 8, obtener dos imágenes resultantes de las derivadas Gx y Gy (horizontal y vertical) y luego: - Visualizar cada una de las imágenes obtenidas. J. M. Miguel Jiménez Departamento de Electrónica. Universidad de Alcalá Pág.2 - Calcular los valores absolutos de dichas imágenes y visualizarlas. Ver diferencias respecto a las imágenes anteriores sin valor absoluto. - Obtener una imagen gradiente a partir de G=|Gx| + |Gy|. 11.- Hacer a la imagen umbralizada del apartado 8 una derivación de segundo orden, utilizando una máscara Laplaciana. 12.- Crear desde Paint una imagen en escala de grises con varias figuras cuadradas y rectangulares blancas sobre fondo negro. Leer esta imagen desde Matlab y utilizar una máscara de convolución que nos permita detectar una determinada esquina de cada figura. 13.- Ejercicio de segmentación por umbralizado a dos niveles: 1 Fondo Obj. 4 Histograma 3 Obj. 3 2 Obj. 2 - Dibujar con Paint una imagen similar a la mostrada(objetos con diferentes niveles de gris) y guardarla. Segmentar la imagen con Matlab, de modo que nos quedemos con uno o dos objetos de luminancia intermedia, tal y como se muestra en el siguiente proceso gráfico de ejemplo: Obj. 1 - 4 Imagen original 0 01 02 03 04 05 06 07 08 09 1 Imagen segmentada 14.- Crea varias figuras con Paint parecidas a las de los siguientes ejemplos y luego realiza sobre ellas, desde Matlab, las operaciones morfológicas que aquí se ilustran. Consulta previamente la ayuda de los diversos comandos. bw = imread('text.tif'); imshow(bw), title('Original') bw2 = bwareaopen(bw,40); figure, imshow(bw2), title('Area open (40 pixels)') J. M. Miguel Jiménez Departamento de Electrónica. Universidad de Alcalá Pág.3 bw1 = imread('circles.tif'); imshow(bw1) bw2 = bwmorph(bw1,'skel',Inf); figure, imshow(bw2) rgb=imread('prueba.bmp'); bn=rgb2gray(rgb); imshow(bn), title(‘Original’) J. M. Miguel Jiménez Departamento de Electrónica. Universidad de Alcalá Pág.4 c=bwmorph(bn,'open'); figure, imshow(c), title(‘Apertura’) c=bwmorph(bn,'close'); figure, imshow(c), title(‘Cierre’) J. M. Miguel Jiménez Departamento de Electrónica. Universidad de Alcalá Pág.5
© Copyright 2024 ExpyDoc