Universidad de Chile Facultad de Ciencias Físicas y Matemáticas Departamento de Ingeniería Eléctrica EL7007 – Introducción al Procesamiento Digital de Imágenes TAREA N°3 OPERADORES DE DETECCIÓN DE BORDES Nombre Alumno : Sebastián Gálvez Profesor : Claudio Pérez Profesor Auxiliar : Luis Castillo Ayudante de Laboratorio: Alonso Astroza Fecha 30/09/2014 : Santiago, Chile. Gradiente por Operador de Prewitt EL7007 – Operadores de Detección de Bordes P1.- Gradiente por Operador de Prewitt En esta parte de la tarea se busca implementar un detector de bordes mediante detección por gradiente, según el operador de Prewitt o Sobel. Se optó por la implementación del operador de Prewitt, que consiste en los siguientes Kernels: Operador de Prewitt para Gradiente Horizontal: [ ] Operador de Prewitt para Gradiente Vertical: [ ] De esta manera, el gradiente de una imagen en la dirección horizontal es , y el gradiente en la dirección vertical es . Es importante destacar que el gradiente horizontal permite detectar bordes orientados verticalmente, mientras que para el gradiente vertical se detectan los bordes orientados horizontalmente. Finalmente, el gradiente total de la imagen se puede obtener mediante distintas formas de combinar y , donde los métodos más utilizados son: Magnitud del gradiente: √| | | | (1) | || | Máximo gradiente: (2) Luego, la imagen del gradiente debe ser binarizada con un umbral adecuado para la detección de los bordes deseados. a) Implementación de filtrado con operador Prewitt. Mediante la función de Matlab conv2, se logró implementar el filtrado de cada componente del operador de Prewitt con la imagen de entrada spiderweb.jpg, la cual se muestra en la Figura 1. Los resultados obtenidos se muestran en las imágenes Im1 e Im2 de la Figura 2. Se observa que existen diferencias entre los bordes resaltados en cada imagen, aunque existen algunas partes en común debido a las componentes diagonales de la imagen. En ambas se identifica la presencia de ruido debido a que este operador resalta los cambios en la intensidad sin importar que sean cambios leves. U. de Chile. FCFM. DIE ~1~ Gradiente por Operador de Prewitt EL7007 – Operadores de Detección de Bordes FIGURA 1: IMAGEN ORIGINAL SPIDERWEB.JPG FIGURA 2: (IZQUIERDA) FILTRADO CON PREWITT HORIZONTAL. (DERECHA) FILTRADO CON PREWITT VERTICAL. U. de Chile. FCFM. DIE ~2~ Gradiente por Operador de Prewitt EL7007 – Operadores de Detección de Bordes b) Binarización de Im1 e Im2. Se implementó la función de Matlab im2bin(img,t), que permite establecer un umbral t entre 0 y 1 de manera que si el umbral es superado en la imagen se tiene un valor 0. En caso contrario, se tiene un valor de 1. Así, luego de varias pruebas, se determinó que un umbral adecuado para percibir los bordes en la imagen es t1=0.21, con lo cual se lograron los resultados mostrados en la Figura 3. Se pueden percibir claramente los bordes de la telaraña, más un poco de ruido binario que puede ser reducido con un filtro mediano si se desea. FIGURA 3: IM1 (IZQ) E IM2 (DER) BINARIZADAS CON UMBRAL T1=0.21, SE PUEDEN PERCIBIR CLARAMENTE LOS BORDES DE LA TELARAÑA. c) y d) Gradiente máximo y efecto del umbral. Se combinaron las imágenes Im1 e Im2 mediante la ecuación (2) para obtener el gradiente completo de la imagen, luego se binarizó la imagen del gradiente máximo, y se buscó un umbral t2, tal que los bordes fueran apenas perceptibles. El valor encontrado para esta condición es de t2=0.42. Así, en la Figura 4, se muestran las imágenes binarias con los bordes detectados para este umbral y para de t2. En la imagen con umbral igual a t2 apenas se pueden percibir algunos bordes. Sin embargo, al disminuirlo a la mitad ya se pueden detectar perfectamente varios bordes de la imagen. Para el caso de la imagen de bordes detectada para ¼ del valor de t2, se observa que los bordes de la telaraña se comienzan a mezclar, debido a que se están considerando las diferencias menores entre las intensidades de los pixeles correspondientes a los sectores entre los bordes de la telaraña, este efecto se acentúa cuando el umbral se elige cada vez menor, donde un valor muy pequeño como 1/32 de t2 no permite percibir ningún borde en la imagen, debido a que se considera que toda variación muy pequeña es un borde. U. de Chile. FCFM. DIE ~3~ Gradiente por Operador de Prewitt EL7007 – Operadores de Detección de Bordes FIGURA 4: IMAGENES DE BORDES DETECTADOS CON GRADIENTE MÁXIMO PARA DISTINTAS FRACCIONES DEL UMBRAL T2=0.42 e) Bordes relacionados con la telaraña Finalmente, se determinó que un umbral con valor entre t2 y ½ t2 podría permitir detectar los bordes de las telarañas únicamente, por lo que finalmente se lograron resultados adecuados con el valor de umbral t3=0.28. Los resultados se muestran en la Figura 5, donde se aprecian claramente los bordes de la telaraña en todas las direcciones. U. de Chile. FCFM. DIE ~4~ Gradiente por Operador de Prewitt EL7007 – Operadores de Detección de Bordes FIGURA 5: BORDES DE LA TELARAÑA DETECTADOS CON UMBRAL T3=0.28 U. de Chile. FCFM. DIE ~5~ Gradiente por Operador de Roberts EL7007 – Operadores de Detección de Bordes P2.- Gradiente por Operador de Roberts Análogo al primer problema de esta tarea, el segundo problema plantea implementar el operador de Roberts, compuesto por los siguientes Kernels: Operador de Roberts para Gradiente Horizontal: [ ] Operador de Roberts para Gradiente Vertical: [ ] a) Implementación de filtrado con operador Roberts. La implementación es análoga a la del operador de Prewitt, ya que sólo basta cambiar los Kernels utilizados. En este caso se utiliza la imagen de entrada ldda.jpg, la cual se muestra en la Figura 6. Los resultados obtenidos al aplicar el operador de Roberts en cada componente se muestran en las imágenes Im3 e Im4 de la Figura 7. FIGURA 6: IMAGEN ORIGINAL EN ESCALA DE GRISES: “LES DEMOISELLES D´AVIGNON” U. de Chile. FCFM. DIE ~6~ Gradiente por Operador de Roberts EL7007 – Operadores de Detección de Bordes FIGURA 7: (IZQUIERDA) FILTRADO CON ROBERTS HORIZONTAL. (DERECHA) FILTRADO CON ROBERTS VERTICAL. En este caso, debido a que los kernels son de tamaño 2x2, no es claro que un operador realice detección de bordes horizontales y otro de bordes verticales, pero sí existe una diferencia en las direcciones de los bordes resaltados en las imágenes mostradas en la Figura 7. b) Binarización de Im3 e Im4. Se utilizó la misma función desarrollada para p1.b), determinando que un umbral adecuado es t4=0.1, logrando las imágenes binarias mostradas en la Figura 8. FIGURA 8: IM3 (IZQ) E IM4 (DER) BINARIZADAS CON UMBRAL T4=0.1, SE PUEDEN PERCIBIR BIEN LOS BORDES EN LAS FIGURAS. U. de Chile. FCFM. DIE ~7~ Gradiente por Operador de Roberts EL7007 – Operadores de Detección de Bordes En ambas imágenes se nota que existe una alta cantidad de ruido binario, debido a que los bordes se perderían si se aumenta el umbral. Se puede observar que existen diferencias en los bordes detectados, aunque mayoritariamente se comparten los bordes en ambas imágenes debido a las múltiples direcciones de las líneas en el cuadro. c) Magnitud del gradiente y versión coloreable del cuadro. Se combinaron las componentes del gradiente aproximado por operador de Roberts calculando la magnitud del gradiente mediante la ecuación (1), y se binarizó la imagen resultante con un umbral t5=0.065, el cual demostró los mejores resultados para el objetivo de crear una imagen “coloreable”, es decir con sólo los bordes de las figuras. El resultado se muestra en la Figura 9 (Izquierda). Además de lo pedido, se probó la efectividad de un filtrado mediano con una ventana de 2x2, logrando mostrar que se elimina parte del ruido binario presente, además de suavizar las líneas diagonales y se obtiene un mejor efecto visual. Por otro lado también se mezclan algunos bordes detectados, generando zonas más oscuras que pierden detalle, como por ejemplo los ojos de las damas. La imagen final resultante se muestra en la Figura 9 (Derecha). FIGURA 9:(IZQUIERDA) MAGNITUD DE GRADIENTE, UMBRAL T5=0.065. (DERECHA) VERSION COLOREABLE CON REDUCCIÓN DE RUIDO POR FILTRADO MEDIANO (2X2). Los resultados logrados son totalmente satisfactorios y se demuestra que el filtrado mediano reduce considerablemente el ruido binario, logrando una imagen más suave y con bordes más definidos que utilizando únicamente el gradiente. U. de Chile. FCFM. DIE ~8~ Operador LoG: Laplacian of Gaussian EL7007 – Operadores de Detección de Bordes P3.- Operador LoG: Laplacian of Gaussian a) Operador LoG En esta actividad se utilizará detección de bordes mediante el operador LoG, a través de la utilización de la función edge(img,’log’,…) de Matlab. La imagen de entrada en este caso es monalisa.jpg, cuya versión en escala de grises se muestra en la Figura 10. Para seguir con la convención de que los bordes detectados sean valor 0 y el resto de la imagen sea 1, se utilizará la imagen 1-edge(…). FIGURA 10: IMAGEN ORIGINAL EN ESCALA DE GRISES: “MONA LISA”. Se define el operador LoG como una composición del operador diferencial de segundo orden Laplaciano y de un Kernel gaussiano G. Este operador es útil para detectar bordes mediante la detección de los cruces por cero de la imagen resultante. Permitiendo ajustar la resolución del detector al variar la desviación estándar que define el Kernel Gaussiano. En la Figura 11 se muestran los bordes detectados al utilizar la función edge dejando que el programa calcule automáticamente los parámetros necesarios. Se observa que existe una alta presencia de ruido, por lo que sería conveniente efectuar U. de Chile. FCFM. DIE ~9~ Operador LoG: Laplacian of Gaussian EL7007 – Operadores de Detección de Bordes una selección de parámetros adecuados para mejorar la visualización de los bordes de la figura de la Mona Lisa. FIGURA 11: BORDES DETECTADOS SIN FIJAR LOS PARÁMETROS MANUALMENTE b) Efecto del en la detección de bordes. A continuación se muestra en la Figura 12 la detección de bordes para los valores de , , y . FIGURA 12: DETECCIÓN DE BORDES CON DISTINTO DEL KERNEL GAUSSIANO. Se puede notar que la ventana gaussiana con desviación estándar baja (0.5 y 1) permite detectar bordes con una resolución muy fina, por lo que detecta las distintas texturas de la tela y la pintura utilizada en el cuadro, mientras que al aumentar el valor de a 2 o 4 se va perdiendo detalle en los bordes detectados, por lo que se permite apreciar rasgos más generales del cuadro. U. de Chile. FCFM. DIE ~10~ Operador LoG: Laplacian of Gaussian EL7007 – Operadores de Detección de Bordes c) Detección de bordes relevantes del rostro Se eligió luego de varias pruebas que un valor de sigma adecuado es , pero para mejorar la detección, se probó con distintos valores de umbral, llegando a que un buen resultado se produce para un umbral t=0.0006. Así, la imagen resultante es la mostrada en la Figura 13, donde se pueden percibir los bordes en los ojos, cejas, nariz y boca, además del borde de la cara. FIGURA 13: BORDES DETECTADOS POR LoG PARA =4, T=0.0006. . d) Ventajas de LoG para esta imagen en particular. Esto se discute en la parte p4.b) del presente informe. U. de Chile. FCFM. DIE ~11~ Método de Canny EL7007 – Operadores de Detección de Bordes P4.- Método de Canny a) Detección de bordes por Canny. El método de Canny utiliza un filtro basado en la primera derivada de un Kernel gaussiano G, donde luego permite discriminar los valores en que el gradiente no es máximo local, por lo que se debe a variaciones ruidosas de la intensidad de pixel, de esta manera se logran mejores resultados que el operador de LoG o sólo utilizar operadores como Sobel, Prewitt o Roberts. En la Figura 14 se muestran los resultados correspondientes a las partes a) y c) pedidas en la Pregunta 3, replicados para el detector de bordes Canny. Se determinó que un produce resultados satisfactorios en este caso. FIGURA 14: (IZQUIERDA) BORDES DETECTADOS POR CANNY SIN FIJAR MANUALMENTE LOS PARÁMETROS. (DERECHA) BORDES DETECTADOS AL FIJAR =4. LOS VALORES DE UMBRALES CALCULADOS AUTOMÁTICAMENTE SON T_LOW=0.05, T_HIGH = 0.125. U. de Chile. FCFM. DIE ~12~ Método de Canny EL7007 – Operadores de Detección de Bordes b) Ventajas de operador LoG y Canny para monalisa.jpg. Para tener un punto de comparación, se muestran en la Figura 15 los resultados de detección de bordes utilizando los detectores de las partes p1 y p2, donde se observa que los operadores Prewitt y Roberts poseen un tamaño fijo en los Kernels, por lo que no se podrá eliminar el ruido sin eliminar los bordes detectados, este efecto es mayor mientras menor sea el tamaño del kernel utilizado. Por otro lado, estos detectores producen valores pixel a pixel, por lo que puede haber muchas zonas inconexas, lo cual hace más difícil identificar un rostro por ejemplo. FIGURA 15: (IZQUIERDA) DETECCIÓN DE BORDES CON PREWITT. (DERECHA) DETECCIÓN DE BORDES CON ROBERTS. . De esta forma, comparando los resultados, se deduce que existe una clara ventaja en la utilización de LoG o Canny para esta imagen, la cual es que la correcta elección del permite trabajar con niveles distintos de resolución, permitiendo identificar los bordes deseados con mayor facilidad. Además, estos operadores tienden a producir curvas cerradas, por lo que zonas como rostros, ojos, nariz y boca quedan bien definidas, al contrario de como sucede con los operadores de Prewitt y Roberts. U. de Chile. FCFM. DIE ~13~ Anexos EL7007 – Operadores de Detección de Bordes Anexos A continuación se anexa el código de las funciones implementadas y de los script utilizados para mostrar los resultados de cada pregunta. Prewitt.m function [im1,im2]=prewitt(img,graph) %Detector de bordes mediante operador Prewitt %Si el parámetro graph es 1, grafica Im1 e Im2. if nargin <2 graph=0; end P_hor=[-1 0 1;-1 0 1;-1 0 1]; P_vert=[-1 -1 -1; 0 0 0; 1 1 1]; im1=conv2(double(img),double(P_hor),'same'); im2=conv2(double(img),double(P_vert),'same'); if(graph==1) figure; colormap(gray) subplot('Position',[0.05,0.25,0.4,0.5]) imagesc(im1) title(sprintf('Im1, Kernel Prewitt Horizontal\n (Detecta Bordes Verticales)')) subplot('Position',[0.55,0.25,0.4,0.5]) imagesc(im2) title(sprintf('Im2, Kernel Prewitt Vertical\n (Detecta Bordes Horizontales)')) end U. de Chile. FCFM. DIE ~14~ Anexos EL7007 – Operadores de Detección de Bordes Roberts.m function [im3,im4]=roberts(img,graph) %Detector de bordes mediante operador Roberts %Si el parámetro graph es 1, grafica Im3 e Im4. if nargin <2 graph=0; end R_hor=[0 1;-1 0]; R_vert=[1 0;0 -1]; im3=conv2(double(img),double(R_hor),'same'); im4=conv2(double(img),double(R_vert),'same'); if(graph==1) figure; colormap(gray) subplot('Position',[0.05,0.25,0.4,0.5]) imagesc(im3) title(sprintf('Im3, Kernel Roberts Horizontal\n (Detecta Bordes Verticales)')) subplot('Position',[0.55,0.25,0.4,0.5]) imagesc(im4) title(sprintf('Im4, Kernel Roberts Vertical\n (Detecta Bordes Horizontales)')) end Im2bin.m function binim=im2bin(image,t) %Returns the binary image using threshold t from 0 to 1 relative to minimum %and maximum values of image. maxvalue=max(image(:)); minvalue=min(image(:)); t=t*(maxvalue-minvalue); [lx,ly]=size(image); binim=image; for i=1:lx for j=1:ly if(image(i,j)>=t) binim(i,j)=0; end if(image(i,j)<t) binim(i,j)=1; end end end U. de Chile. FCFM. DIE ~15~ Anexos EL7007 – Operadores de Detección de Bordes Tarea3.m %% Tarea 3 %% p1 clear all close all spider_gray=rgb2gray(imread('spiderweb.jpg')); figure; imshow(spider_gray);title('Imagen Original en escala de grises: Spiderweb') [im1,im2]=prewitt(spider_gray,1); t1=0.21; im1_bin=im2bin(abs(im1),t1); im2_bin=im2bin(abs(im2),t1); figure; subplot(121); subimage(im1_bin) title(sprintf('Im1 Binarizada con umbral t1=%.2f',t1)) subplot(122) subimage(im2_bin) title(sprintf('Im2 Binarizada con umbral t1=%.2f',t1)) t2=0.42; max_im=max(abs(im1),(im2)); figure; for i=0:5 t=(1/2^i)*t2; max_bin=im2bin(max_im,t); subplot(3,2,i+1) subimage(max_bin) title(sprintf('Umbral=1/%d *t2',2^i)) if i==0 title(sprintf('Umbral t2=%.2f',t2)) end end t3=0.28; max_bin=im2bin(max_im,t3); figure;imshow(max_bin);title(sprintf('Bordes de telaraña detectados, Umbral=%.2f',t3),'FontSize',14,'FontWeight','bold') %% p2 close all clear all ldda_gray=rgb2gray(imread('ldda.jpg')); figure;imshow(ldda_gray);title('Imagen Original en escala de grises: Les Demoiselles d´Avignon') [im3,im4]=roberts(ldda_gray,1); t4=0.1; im3_bin=im2bin(abs(im3),t4); im4_bin=im2bin(abs(im4),t4); figure; subplot(121); subimage(im3_bin) U. de Chile. FCFM. DIE ~16~ Anexos EL7007 – Operadores de Detección de Bordes title(sprintf('Im3 Binarizada con umbral t4=%.2f',t4)) subplot(122) subimage(im4_bin) title(sprintf('Im4 Binarizada con umbral t4=%.2f',t4)) t5=0.065; total_im=sqrt(abs(im3).^2+abs(im4).^2); total_bin=im2bin(total_im,t5); figure;subplot(121); imshow(total_bin);title(sprintf('Magnitud de gradiente Roberts con umbral t5=%.3f',t5)) % for t=0.05:0.01:0.15 % total_bin=im2bin(total_im,t); % figure; % imshow(total_bin) % title(sprintf('Umbral=%.2f',t)) % end subplot(122); imshow(medfilt2(total_bin,[2 2]));title('Filtrado Mediano con ventana 2x2, Versión Coloreable') %% p3 close all clear all mona_gray=rgb2gray(imread('monalisa.jpg')); figure;imshow(mona_gray);title('Imagen Original en escala de grises: Mona Lisa') figure;imshow(1-edge(mona_gray,'log'));title('Bordes detectados con parámetros calculados automáticamente') figure; [mona_edges05]=edge(mona_gray,'log',[],0.5); subplot(141);imshow(1-mona_edges05);title('\sigma =0.5') [mona_edges1]=edge(mona_gray,'log',[],1); subplot(142);imshow(1-mona_edges1);title('\sigma =1') [mona_edges2]=edge(mona_gray,'log',[],2); subplot(143);imshow(1-mona_edges2);title('\sigma =2') [mona_edges4]=edge(mona_gray,'log',[],4); subplot(144);imshow(1-mona_edges4);title('\sigma =4') best_sigma=4; [best_mona_edges,threshold]=edge(mona_gray,'log',[],best_sigma); figure;imshow(1-best_mona_edges);title(sprintf('t=%.4f \\sigma =%.1f',threshold,best_sigma)) %% p4 close all clear all mona_gray=rgb2gray(imread('monalisa.jpg')); figure;imshow(1-edge(mona_gray,'canny'));title('Bordes detectados con parámetros calculados automáticamente') best_sigma2=4; [best_mona_edges, thresholds]=edge(mona_gray,'canny',[],best_sigma2); figure;imshow(1-best_mona_edges);title(sprintf('t_{LOW}=%.4f , t_{HIGH}=%.4f \\sigma =%.1f',thresholds(1),thresholds(2),best_sigma2)) U. de Chile. FCFM. DIE ~17~ Anexos EL7007 – Operadores de Detección de Bordes %% p4b close all clear all mona_gray=rgb2gray(imread('monalisa.jpg')); [im1,im2]=prewitt(mona_gray,0); t6=0.16; max_im12=max(abs(im1),(im2)); max_bin12=im2bin(max_im12,t6); figure;subplot(121);imshow(max_bin12);title(sprintf('Bordes detectados con Prewitt, Umbral=%.2f',t6),'FontSize',10,'FontWeight','bold') [im3,im4]=roberts(mona_gray,0); t7=0.16; total_im34=sqrt(abs(im3).^2+abs(im4).^2); total_bin34=im2bin(total_im34,t7); subplot(122);imshow(total_bin34);title(sprintf('Bordes detectados con Roberts, Umbral=%.2f',t7),'FontSize',10,'FontWeight','bold') U. de Chile. FCFM. DIE ~18~ Bibliografía EL7007 – Operadores de Detección de Bordes Bibliografía “Resumen_4” – EL7007 Introducción al Procesamiento Digital de Imágenes – Caludio A. Perez, Departamento de Ingeniería Eléctrica, Universidad de Chile, 2014. Algoritmo de Canny - http://es.wikipedia.org/wiki/Algoritmo_de_Canny U. de Chile. FCFM. DIE ~19~