PRACTICA 3.

CONVOLUCION CON MASCARAS PARA DETECTAR BORDES

OSCAR LEONARDO MOSQUERA DUSSAN COD.2005100830

PRESENTADO AL INGENIERO: JOSE SALGADO PATRON

UNIVERSIDAD SURCOLOMBIANA FACULTAD DE INGENIERIA INGENIERIA ELECTRONICA AUTOMATIZACION II NEIVA-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)