TAREA N°3 OPERADORES DE DETECCIÓN DE BORDES - U

Anuncio
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~
Descargar