Detectar Bordes de una Imagen
-
Upload
oscar-leonardo-mosquera-dussan -
Category
Documents
-
view
5.277 -
download
2
description
Transcript of Detectar Bordes de una Imagen
PRACTICA 3. CONVOLUCION CON MASCARAS PARA DETECTAR BORDES
OSCAR LEONARDO MOSQUERA DUSSANCOD.2005100830
PRESENTADO AL INGENIERO:
JOSE SALGADO PATRON
UNIVERSIDAD SURCOLOMBIANAFACULTAD DE INGENIERIAINGENIERIA ELECTRONICA
AUTOMATIZACION IINEIVA-HUILA
2010
OBJETIVOS
● Aplicar los conceptos aprendidos en clase de mascara y convolución de imágenes.
● Aplicar las mascaras de Prewit , Sobel, Laplaciano, Roberts para la detección de bordes de una imagen en escala de grises.
● Practicar en la Herramienta Matlab los conocimientos adquiridos en clase.
PROCEDIMIENTO
En el software Matlab se implemento el respectivo código para aplicar a la imagen original la convolución con cada una de las mascaras seleccionadas. En el código se hace uso de las funciones convm(imagen,mascara) para mascaras de [3x3] y convm2(imagen,mascara) para mascaras de [2x2].
%adquirimos imagenes: imD1 = imread('Dibujo01','JPEG');imD1 = rgb2gray(imD1); imD2 = imread('Dibujo02','JPEG');imD2 = rgb2gray(imD2); imN6 = imread('noise_6','GIF'); imN7 = imread('noise_7','GIF'); imSP = imread('Noise_salt_and_pepper','PNG');
%Definimos mascaras a utilizar :%mascara media: mm=(1/9)*[1 1 1; 1 1 1; 1 1 1;]; %operador de prewitt mP1=[-1 -1 -1; 0 0 0; 1 1 1];
mP2=[-1 0 1; -1 0 1; -1 0 1]; %operador de sobel mS1=[-1 -2 -1; 0 0 0; 1 2 1];
mS2=[-1 0 1; -2 0 2; -1 0 1]; %Operador laplaciano mL1=[0 1 0; 1 -4 1; 0 1 0];
mL2=[1 1 1; 1 -8 1; 1 1 1]; %operador roberts
mR1=[-1 0; 0 1]; mR2=[0 -1; 1 0];
% llevamos a cabo las operaciones de convolución para la imagen deseada :
%convolución con mascara media im=imSP; im=double(im);cm=convm(im,mm); cm=uint8(cm);im=uint8(im); figure; subplot(1,2,1),imshow(im),title('IMAGEN ORIGINAL'); subplot(1,2,2),imshow(cm),title('CONVOLUCION MEDIA');
% Convolución con mascaras prewitt im=imD1; % aplicamos la convolución para cada una de las mascaras, y con el comando max teniendo %como parámetros las convoluciones anteriores (cp1,cp2) obtenemos la imagen final.im=double(im);cp1=convm(im,mP1);cp2=convm(im,mP2);cp3=max(cp1,cp2); cp3=uint8(cp3);im=uint8(im); figure; subplot(1,2,1),imshow(im),title('ORIGINAL'); subplot(1,2,2),imshow(cp3),title('PREWITT FINAL');
%Convolución con mascaras sobel im=imD1; im=double(im);cs1=convm(im,mS1);cs2=convm(im,mS2);cs3=max(cs1,cs2); cs1=uint8(cs1);cs2=uint8(cs2);cs3=uint8(cs3);im=uint8(im); figure; subplot(1,2,1),imshow(im),title('ORIGINAL'); subplot(1,2,2),imshow(cs3),title('SOBEL FINAL');
%Convolucion con mascaras laplaciano im=imD1; im=double(im);cl1=convm(im,mL1);cl2=convm(im,mL2);cl3=max(cl1,cl2); cl3=uint8(cl3);im=uint8(im); figure; subplot(1,2,1),imshow(im),title('ORIGINAL'); subplot(1,2,2),imshow(cl3),title('LAPLACIANO FINAL');
%Convolucion con mascara de Roberts im=imD1; im=double(im); cr1=convm2(im,mR1);cr2=convm2(im,mR2);cr3=max(cr1,cr2); im=uint8(im);cr3=uint8(cr3); figure; subplot(1,2,1),imshow(im),title('ORIGINAL'); subplot(1,2,2),imshow(cr3),title('ROBERTS FINAL');
RESULTADOS
Las imágenes finales obtenidas una vez llevada a cabo la convolución con la respectiva mascara fueron las siguientes :
CONCLUCIONES
● Para los operadores que usan dos mascaras para la detección de bordes, tales como el de Prewitt, Sobel, Laplaciano, Roberts. Se deben tener en cuanta las convoluciones con ambas mascaras para formar la imagen final con el comando max(convolución m1,convolución m2).
● Para detectar bordes de una imagen con ruido, es importante primero disminuir el ruido con mascara de media o gaussiana, según sea el caso.
● En orden de lograr óptimos resultados de convolución entre imagen y mascara , es necesario realizar las operaciones en formato double o de punto flotante. Ya que de lo contrario se pierde información en las operaciones de la convolución.
● Para poder visualizar las imágenes con el comando imshow(imagen), es necesario que el formato de la variable imagen sea de entero sin signo de 8 bits (uint8)