SlideShare una empresa de Scribd logo
Detección de bordes y discontinuidades
Filtrado y detección de bordes Filtros pasobajo: Asemeja el nivel de gris del píxel con el entorno Reduce ruido Aumenta homogeneidad Se pierde detalle (bordes se difuminan) Filtro promedio : Filtro promedio ponderado :
Filtrado y detección de bordes (II) Filtros pasoalto: Enfatizan diferencias en el nivel de gris  Aumenta ruido Estimula los límites o bordes Gausiana Laplaciana de la gausiana
Gradiente Detección de bordes: Enfatizan los bordes que rodean al objeto Filtros pasoalto  Gradiente:  Variaciones del nivel de gris  en píxeles consecutivos x y f ( x , y ) f ( x , y +1) f ( x +1, y )
Gradiente (II) Magnitud del vector gradiente Dirección  del vector gradiente
Gradiente (III) % Determina gx  y  gy function [gx,gy]=gradiente(I) hx=[-1 0;1 0]; hy=hx'; %filtro gx=imfilter(I,hx,'replicate','conv'); gy=imfilter(I,hy,'replicate','conv'); %end % Obtiene la magnitud del gradiente II=abs(gx)+abs(gy); %Obtiene la dirección del gradiente VI=atan(double(gy)/double(gx)); Magnitud del vector gradiente Dirección del vector gradiente
Aplicación del Gradiente
Aplicación del Gradiente (II) V=edge(II,'roberts'); T  = 33% de max{|Gx|, |Gy|} Aplicación de Umbral
Representación del gradiente Referencia del programa MATLAB clear;close all; I=imread('rice.png'); fim=mat2gray(I); %Magnitud del gradiente figure('name','Magnitud del Gradiente'); [gx,gy]=gradiente(fim); imshow(abs(gx)+abs(gy));  %Dibuja gradiente en región [gx,gy]=gradiente(fim); figure('name','Gradiente'); imshow(fim(1:50,1:50),'InitialMagnification','fit'); hold on; quiver(gx(1:50,1:50),gy(1:50,1:50));
Representación del gradiente (II) Magnitud del gradiente Dirección del gradiente
Máscaras de Roberts La suma de los componentes de las máscaras es cero:  Devuelve cero en áreas de intensidad constante
Máscaras de Roberts (II)
Máscaras de Roberts (III) %En espacio de trabajo [BW,umbral,g45,g135] = edge(I,'roberts',...) g45  = imfilter(I ,[1 0; 0 -1]/ 2,'replicate');  g135 = imfilter(I ,[0 1;-1  0]/ 2,'replicate'); ó >umbral
Máscaras de Roberts (IV) Verificar tipo de datos de la imagen
Máscaras de Prewitt Extensión a máscaras de tamaño 3x3 Píxel a alterar en centro de la vecindad [BW,umbral,gv,gh] = edge(I,'prewitt')  >> gh=fspecial('prewitt') >> gv=gh' gh  = 1  1  1 0  0  0 -1  -1  -1 gv = 1  0  -1 1  0  -1 1  0  -1 % Se aplican filtros III=imfilter(II,gh); IV=imfilter(II,gv); % Obtiene el gradiente V=abs(III)+abs(IV); Equivalencia
Máscaras de Prewitt (II) ¿Magnitud predominante? Diagonal izquierda Diagonal derecha Dirección predominante La equivalente a la magnitud predominante
Máscaras de Prewitt (III)
Máscaras de Prewitt (IV) Influencia del umbral
Máscaras de Sobel Reforzar el valor del píxel central Reduce la influencia del ruido en la detección  de discontinuidades Prewitt Sobel
Máscaras de Sobel (II) >> w=fspecial('sobel')
Máscaras de Kirsch 8 máscaras que representan 8 orientaciones
Máscaras de Kirsch (II) % Define máscaras de Kirsch k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5]; k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3]; for i=3:8 k(:,:,i) = rot90(k(:,:,i-2)); end % Aplica los 8 filtros (x: imagen) for i=1:8 resultado(:,:,i) = imfilter(I,k(:,:,i),‘replicate’); end % Selecciona el máximo de cada filtro II= max(abs(resultado),[],3); %Aplica umbral e=II>.5*max(II(:));  %50% Resultado del filtro II e
Máscaras de Kirsch (III)
Máscaras de Kirsch (IV)
Máscaras de Kirsch (V) ¿Magnitud predominante?
Máscaras de Robinson Una negada de la otra, menos costoso computacionalmente
Kirsch vs Robinson Comparación de máscaras a 45 o
Comparación entre máscaras Roberts Prewitt Sobel Kirsch Robinson Kirsch Robinson Roberts Prewitt Sobel Líneas verticales -45 o
Gradiente basado en derivada de segundo orden Función que define la máscara Segunda derivada en los puntos  x +1 e  y +1 Segunda derivada en los puntos  x  e  y Operador  Laplaciano
Gradiente basado en derivada de segundo orden (II) Máscaras equivalentes 0 1 0 1 -4 1 0 1 0 1 1 1 1 -8 1 1 1 1 0 -1 0 -1 4 -1 0 -1 0 -1 -1 -1 -1 8 -1 -1 -1 -1
Gradiente basado en derivada de segundo orden (III) Operaciones de imagen filtrada sobre  original para mejora de nitidez Si centro de  máscara negativo Si centro de  máscara positivo Lo anterior equivale a aplicar la siguiente máscara 1 1 1 1 -8 1 1 1 1
Primera vs segunda derivada a=[0:1/255:1]; for i=1:400 b(i,1:256)=a(1,:); end aa=zeros(400,72); bb=ones(400,72)*255; ent=[aa b bb];
Primera vs segunda derivada (II) Imagen Fila Primera derivada Segunda derivada
Primera vs segunda derivada (III) Detectar bordes  primera derivada Aplicar  umbral   de intensidad  a la imagen filtrada
Primera vs segunda derivada (IV) Detectar bordes  segunda derivada Detección de los  cruces por cero a la imagen filtrada Cruce por cero
Primera vs segunda derivada (V) Influencia del ruido
Primera vs segunda derivada (VI) Primera derivada
Primera vs segunda derivada (VII) Segunda derivada Más susceptible al ruido Menos utilizada para detectar bordes
Primera vs segunda derivada (VIII) % Filtro de Sobel (primera derivada) >> III=edge(II,‘sobel'); % Filtro  de segunda derivada >>  h=[1 1 1; 1 -8 1; 1 1 1]; >>IV=edge(II, 'zerocross', h); III Ruido Doble borde No se detecta dirección IV
Primera vs segunda derivada (IX) Algunas conclusiones sobre derivadas La primera derivada devuelve bordes más gruesos La segunda derivada discrimina más adecuadamente a  líneas finas, puntos aislados y ruido La segunda derivada devuelve doble respuesta a un  cambio de intensidad (valor absoluto: doble borde) El cambio de signo de la segunda derivada indica si el cambio  de intensidad es de negro a blanco o viceversa
Detección de puntos >> I=imread('discont2.jpg'); >> w=[-1, -1, -1; -1, 8, -1; -1, -1, -1] >> ww=-w >> II=imfilter(I,w); >> III=imfilter(I,ww); w = -1  -1  -1 -1  8  -1 -1  -1  -1 Se aplica el Laplaciano (segunda derivada)
Detección de líneas En una dirección específica % Se definen las máscaras w(:,:,1)=[-1, -1, -1; 2, 2, 2; -1, -1, -1];  % 0 o w(:,:,3)=rot90(w(:,:,1));                        % 90 o w(:,:,2)=[-1, -1, 2; -1, 2, -1; 2, -1, -1];  % 45 o w(:,:,4)=rot90(w(:,:,2));                        % -45 o % Se calcula la media for i=1:4 II(:,:,i) = imfilter(I,w(:,:,i),'symmetric','same'); maxima_intensidad(1,i)=mean2(II(:,:,i)) figure;imshow(II(:,:,i)); end La mayor media indica orientación predominante de las líneas
Detección de líneas (II) +
Detección de líneas (III) En cualquier dirección Efecto de doble línea como resultado de aplicar el Laplaciano w=fspecial('laplacian', 0) III=imfilter(II,w));
Detección de líneas (IV) En cualquier dirección Solución I: Mantiene la doble línea w=fspecial('laplacian',0)  III=imfilter(II,w); IV=abs(III)
Detección de líneas (V) En cualquier dirección Solución II: Seleccionar una línea w=fspecial('laplacian', 0) III=imfilter(II,w); V=III>0.23*(max(III(:)));
Detección de bordes Aplicación del gradiente Roberts z 1 z 2 Z 3 z 4 z 5 z 6 z 7 Z 8 z 9
Detección de bordes (II) Aplicación del gradiente (Prewitt) Sobel z 1 z 2 Z 3 z 4 z 5 z 6 z 7 Z 8 z 9
Detección de bordes (III) Combinación de píxeles de diferentes bordes % Filtrado utilizando máscaras de Roberts >> II45 = imfilter(I,[1 0; 0 -1],'symmetric'); >> II45p = imfilter(I,[-1 0; 0 1],'symmetric'); >> II135 = imfilter(I,[0 1;-1 0],'symmetric'); >> II135p = imfilter(I,[0 -1;1 0],'symmetric'); % Combinación de imágenes filtradas >>III=imlincomb(1,II45,1,II45p,1,II135,1,II135p); % Máximo entre gradientes >>grad_hv=abs(II45)+abs(135); >>grad_di=abs(II45p)+abs(II135p); >>IV=max(grad_hv, grad_di); % Máximo entre todos >>V=max(max(abs(II45),abs(135)), max(abs(II135),abs(II135p)));
Detección de bordes (IV) III IV V Vp=V>0.53*max(V(:)); IVp=IV>0.65*max(IV(:));
Detección de bordes (V) Combinación y selección por umbral % Se define el umbral umbral=0.3; % Se definen las máscaras  (Sobel) w(:,:,1)=fspecial('sobel'); w(:,:,3)=rot90(w(:,:,1)); w(:,:,2)=[-2, -1, 0; -1, 0, 1; 0, 1, 2]; w(:,:,4)=rot90(w(:,:,2)); % Se aplica Sobel en las cuatro orientaciones, con umbral for i=1:4 II(:,:,i) = imfilter(double(I),w(:,:,i),'symmetric','same'); II(:,:,i) = II(:,:,i) >= umbral.*max(abs(II(:))); figure;imshow(II(:,:,i)); end % Imagen resultante II=imlincomb(1,II(:,:,1), 1,II(:,:,2), 1,II(:,:,3), 1,II(:,:,4)); figure; imshow(II);
Detección de bordes (VI) Resultado de la detección de bordes para diferentes umbrales
Detección de bordes (VII) Método de Marr-Hildreth Laplaciana de la gausiana
Detección de bordes (VIII) Laplaciana de la gausiana Cruces por cero
Detección de bordes (IX) Laplaciana de la gausiana >> w=fspecial('log',5,.7) w = 0.0034  0.0338  0.0697  0.0338  0.0034 0.0338  0.1800  0.0105  0.1800  0.0338 0.0697  0.0105  -1.3250  0.0105  0.0697 0.0338  0.1800  0.0105  0.1800  0.0338 0.0034  0.0338  0.0697  0.0338  0.0034 >> sum(w(:)) -6.0715e-018 La suma de los componentes de la máscara es cero  Es isotrópica (invariante a la rotación)
Detección de bordes (X) Detección de cruces por cero laplaciana de la gausiana >> -fspecial('log', 5,  .4 ) ans = -0.2475 -0.2475 -0.2479 -0.2475 -0.2475 -0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.2479 -1.2336  10.3145  -1.2336 -0.2479 -0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.2475 -0.2475 -0.2479 -0.2475 -0.2475 >> -fspecial('log', 5,  .6 ) ans = -0.0056 -0.0192 -0.0483 -0.0192 -0.0056 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192 -0.0483 -0.2426  2.4429  -0.2426 -0.0483 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192 -0.0056 -0.0192 -0.0483 -0.0192 -0.0056
Detección de bordes (XI) >> III=edge(II, 'zerocross', 0.3, fspecial('laplacian', 0.1 )); >> IV=edge(II, 'zerocross', 0.3, fspecial('laplacian', 0.9 )); Más ruidosa
Detección de bordes (XII) Método de Marr-Hildreth (otra propuesta) Filtrar la imagen con una máscara equivalente a un filtro gausiano Aplicar la máscara laplaciana Detectar los cruce por cero 1 1 1 1 -8 1 1 1 1
Detección de bordes (XIII) >>  w=[1 1 1; 1 -8 1; 1 1 1]; >>III=edge(II, 'zerocross', 0.5, w);
Detección de bordes (XIV) Diferencia de Gausianas La Laplaciana de la gausiana puede aproximarse  a diferencia de filtros gausianos Debe cumplirse:
Detección de bordes (XV) >> IV=imfilter(II,fspecial('gaussian',[3 3],.8)); >> V=imfilter(II,fspecial('gaussian',[3 3],.2)); >> VI=imsubtract(IV,V); >> VI=VI>0.13*max(VI(:));
Método de Canny 1.- Suavizar la imagen con filtro gausiano 2.- Obtener el módulo y dirección del gradiente basado en  dos máscaras de Sobel, Prewitt o Roberts Punto de borde: Existe máximo local en dirección del gradiente 3.- Supresión no maximal:  Bordes débiles  Bordes fuertes 4.- Se incorporan los píxeles débiles 8 conectados a los píxeles fuertes
Aplicación de Canny Kirsch ( T =0.95 M ) Canny
Máscaras de Frei-Chen Subespacio borde Subespacio línea Subespacio promedio
Obtención de coeficientes de la máscara Prewitt Sobel a = [0.5; 1.5] = 0.5+(1./(1+exp(-pa)));  b = [0.5; 2.5] = 0.5+2*(1./(1+exp(-pb)));  Neurona -a 0 a -b 0 b -a 0 a
Obtención de coeficientes de la máscara (II) f(x-1, y-1) f(x-1, y) f(x-1, y+1) f(x, y-1) f(x, y) f(x, y+1) f(x+1, y-1) f(x+1, y) f(x+1, y+1) -a 0 a -b 0 b -a 0 a x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9
Obtención de coeficientes de la máscara (III) -a 0 a -b 0 b -a 0 a -a -b -a 0 0 0 a b a -b -a 0 -a 0 a 0 a b 0 a b -a 0 a -b -a 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9
Obtención de coeficientes de la máscara (IV) Borde total = Suma de líneas en cada orientación Núcleo estimador
Obtención de coeficientes de la máscara (V) Núcleo estimador Coeficientes de la máscara resultante -2a-b -b b -2a-b 0 2a+b -b b 2a+b
Obtención de coeficientes de la máscara (VI) Núcleo estimador Componentes derivativos
Obtención de coeficientes de la máscara (VII) Matriz de entrada-salida El número de filas será semejante al número de píxeles La imagen original y la que contiene bordes tendrán la misma dimensión x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 f(x-1, y-1) f(x-1, y) f(x-1, y+1) f(x, y-1) f(x, y) f(x, y+1) f(x+1, y-1) f(x+1, y) f(x+1, y+1)
Obtención de coeficientes de la máscara (VIII) Sustituir en algoritmo de  aprendizaje supervisado Núcleo estimador Adaptación de parámetros ( gradiente )
Obtención de coeficientes de la máscara (IX) Solución de sistema de ecuaciones lineales Núcleo estimador -2a-b -b b -2a-b 0 2a+b -b b 2a+b
Obtención de coeficientes de la máscara (X) mm = -1.9216  -0.5584  0.5584 -1.9216  0  1.9216 -0.5584  0.5584  1.9216 >>IV=imfilter(II, mm, 'symmetric');
Transformada de Hough Representación de línea en forma normal Fuente
Transformada de Hough (II) Línea   Puntos con similar Rho y Theta
Transformada de Hough (III) Determina la transformada de Hough >>[Hough,Theta,Rho] = hough(a);  Determina picos en la transformada >> P = houghpeaks(H,1)  >> RT=[Rho(1,P(1,1)),Theta(1,P(1,2))]  Valores de Rho y Theta Línea definida en
Transformada de Hough (IV) >>II=rgb2gray(I); >> III=im2bw(II,.45); >> [H,T,R] = hough(III); >> P = houghpeaks(H, 2 ); Fuente

Más contenido relacionado

PDF
Utp pd_iy_va_sap6y7 diltacion y erosión binaria - apertura y clausura
PPTX
Diferenciación por 3 y 5 puntos
PPTX
Insertar elementos en una cola
PPT
Recorrido en árboles binarios
PDF
Espacios y Subespacios Vectoriales
PDF
Generacion codigomaquina
PPT
Imagen Filtrado Espacial
PDF
Error en el polinomio de interpolación
Utp pd_iy_va_sap6y7 diltacion y erosión binaria - apertura y clausura
Diferenciación por 3 y 5 puntos
Insertar elementos en una cola
Recorrido en árboles binarios
Espacios y Subespacios Vectoriales
Generacion codigomaquina
Imagen Filtrado Espacial
Error en el polinomio de interpolación

La actualidad más candente (20)

PPTX
Grafo bipartito
PDF
Coeficientes indeterminados enfoque de superposición
DOC
Grafos resueltos
PDF
Interpolación Polinómica
PPS
serie de taylor
PPT
Integracion numerica
PDF
Mapas de Karnaugh (introdução, até 4 variáveis)
PPT
Inecuaciones Logaritmicas - Alumnos Seccion 21 Sem-2010-3
PPTX
Grafos eulerianos
PPTX
Funcionamiento de un pila
PDF
Ejercicios Filtros
PDF
PPTX
Punto Fijo
PDF
Resolucion ejercicios scilab
PDF
Tabla de derivadas e integrales
PDF
algebra-booleana matematicas discretas
PDF
Estructuras de datos osvaldo cairo
PDF
Estructura Discreta 2 Grafos Eulerianos y Hamiltonianos
PDF
rectas paralelas y ortogonales (2)
Grafo bipartito
Coeficientes indeterminados enfoque de superposición
Grafos resueltos
Interpolación Polinómica
serie de taylor
Integracion numerica
Mapas de Karnaugh (introdução, até 4 variáveis)
Inecuaciones Logaritmicas - Alumnos Seccion 21 Sem-2010-3
Grafos eulerianos
Funcionamiento de un pila
Ejercicios Filtros
Punto Fijo
Resolucion ejercicios scilab
Tabla de derivadas e integrales
algebra-booleana matematicas discretas
Estructuras de datos osvaldo cairo
Estructura Discreta 2 Grafos Eulerianos y Hamiltonianos
rectas paralelas y ortogonales (2)
Publicidad

Similar a Segmentación de imagenes (20)

PDF
Utp pd_iy_va_sap10 detecciòn de bordes
PDF
Utp pd_iy_va_sap10 detecciòn de bordes
PDF
Filtrado espacial - procesamiento de imagenes
PDF
S13 - Procesamiento digital de imágenes y visión artificial.pptx-1.pdf
PDF
Detección de bordes de una imagen en Matlab
PPTX
Sesión04Calidad de Software Clases dia jueves
PDF
Morfologia_Segmentacion_en_Procesamiento.pdf
PDF
tema 3-2 Algoritmos de realce.pdf
PDF
PDF
PDF
Segementacion de imagenes
PPT
Imagen e histograma
PDF
Segmentacion mathlab
PDF
Pontificia universidad católica del ecuador virtualizacion
PDF
Segmentacion de Imagenes
PDF
Segmentacion de imagenes
PDF
Segmentacion de imagenes
PDF
Segmentación de las imágenes
PDF
Parte final segmentación de imágenes
Utp pd_iy_va_sap10 detecciòn de bordes
Utp pd_iy_va_sap10 detecciòn de bordes
Filtrado espacial - procesamiento de imagenes
S13 - Procesamiento digital de imágenes y visión artificial.pptx-1.pdf
Detección de bordes de una imagen en Matlab
Sesión04Calidad de Software Clases dia jueves
Morfologia_Segmentacion_en_Procesamiento.pdf
tema 3-2 Algoritmos de realce.pdf
Segementacion de imagenes
Imagen e histograma
Segmentacion mathlab
Pontificia universidad católica del ecuador virtualizacion
Segmentacion de Imagenes
Segmentacion de imagenes
Segmentacion de imagenes
Segmentación de las imágenes
Parte final segmentación de imágenes
Publicidad

Más de Omar Sanchez (20)

PDF
Assembler4
PDF
Assembly programming II
PDF
Assembly programming
PDF
Assembler Programming
PDF
Functions for Nano 5 Card
PDF
Ejemplos de modelos basados en adaptacion parametrica
PDF
Sistemas numericos
PDF
Ensamblador
PDF
Nano5 features
PDF
Referencias MATLAB
PPT
Control Modelo de Referencia y Linealizacion po Realimentacion
PPTX
Fundposori
PPTX
Funciones de Lyapunov basado en Krasovskii
PPT
Sensores de robots
PPT
Vehiculos no tripulados
PPTX
Algunos aspectos de estabilidad
PPT
Control basado en modelo
PPT
Grupos próximos
PPT
Redes Neuronales
PPT
Algunas consideraciones
Assembler4
Assembly programming II
Assembly programming
Assembler Programming
Functions for Nano 5 Card
Ejemplos de modelos basados en adaptacion parametrica
Sistemas numericos
Ensamblador
Nano5 features
Referencias MATLAB
Control Modelo de Referencia y Linealizacion po Realimentacion
Fundposori
Funciones de Lyapunov basado en Krasovskii
Sensores de robots
Vehiculos no tripulados
Algunos aspectos de estabilidad
Control basado en modelo
Grupos próximos
Redes Neuronales
Algunas consideraciones

Segmentación de imagenes

  • 1. Detección de bordes y discontinuidades
  • 2. Filtrado y detección de bordes Filtros pasobajo: Asemeja el nivel de gris del píxel con el entorno Reduce ruido Aumenta homogeneidad Se pierde detalle (bordes se difuminan) Filtro promedio : Filtro promedio ponderado :
  • 3. Filtrado y detección de bordes (II) Filtros pasoalto: Enfatizan diferencias en el nivel de gris Aumenta ruido Estimula los límites o bordes Gausiana Laplaciana de la gausiana
  • 4. Gradiente Detección de bordes: Enfatizan los bordes que rodean al objeto Filtros pasoalto Gradiente: Variaciones del nivel de gris en píxeles consecutivos x y f ( x , y ) f ( x , y +1) f ( x +1, y )
  • 5. Gradiente (II) Magnitud del vector gradiente Dirección del vector gradiente
  • 6. Gradiente (III) % Determina gx y gy function [gx,gy]=gradiente(I) hx=[-1 0;1 0]; hy=hx'; %filtro gx=imfilter(I,hx,'replicate','conv'); gy=imfilter(I,hy,'replicate','conv'); %end % Obtiene la magnitud del gradiente II=abs(gx)+abs(gy); %Obtiene la dirección del gradiente VI=atan(double(gy)/double(gx)); Magnitud del vector gradiente Dirección del vector gradiente
  • 8. Aplicación del Gradiente (II) V=edge(II,'roberts'); T = 33% de max{|Gx|, |Gy|} Aplicación de Umbral
  • 9. Representación del gradiente Referencia del programa MATLAB clear;close all; I=imread('rice.png'); fim=mat2gray(I); %Magnitud del gradiente figure('name','Magnitud del Gradiente'); [gx,gy]=gradiente(fim); imshow(abs(gx)+abs(gy)); %Dibuja gradiente en región [gx,gy]=gradiente(fim); figure('name','Gradiente'); imshow(fim(1:50,1:50),'InitialMagnification','fit'); hold on; quiver(gx(1:50,1:50),gy(1:50,1:50));
  • 10. Representación del gradiente (II) Magnitud del gradiente Dirección del gradiente
  • 11. Máscaras de Roberts La suma de los componentes de las máscaras es cero: Devuelve cero en áreas de intensidad constante
  • 13. Máscaras de Roberts (III) %En espacio de trabajo [BW,umbral,g45,g135] = edge(I,'roberts',...) g45 = imfilter(I ,[1 0; 0 -1]/ 2,'replicate'); g135 = imfilter(I ,[0 1;-1 0]/ 2,'replicate'); ó >umbral
  • 14. Máscaras de Roberts (IV) Verificar tipo de datos de la imagen
  • 15. Máscaras de Prewitt Extensión a máscaras de tamaño 3x3 Píxel a alterar en centro de la vecindad [BW,umbral,gv,gh] = edge(I,'prewitt') >> gh=fspecial('prewitt') >> gv=gh' gh = 1 1 1 0 0 0 -1 -1 -1 gv = 1 0 -1 1 0 -1 1 0 -1 % Se aplican filtros III=imfilter(II,gh); IV=imfilter(II,gv); % Obtiene el gradiente V=abs(III)+abs(IV); Equivalencia
  • 16. Máscaras de Prewitt (II) ¿Magnitud predominante? Diagonal izquierda Diagonal derecha Dirección predominante La equivalente a la magnitud predominante
  • 18. Máscaras de Prewitt (IV) Influencia del umbral
  • 19. Máscaras de Sobel Reforzar el valor del píxel central Reduce la influencia del ruido en la detección de discontinuidades Prewitt Sobel
  • 20. Máscaras de Sobel (II) >> w=fspecial('sobel')
  • 21. Máscaras de Kirsch 8 máscaras que representan 8 orientaciones
  • 22. Máscaras de Kirsch (II) % Define máscaras de Kirsch k(:,:,1) = [-3 -3 5; -3 0 5; -3 -3 5]; k(:,:,2) = [-3 5 5; -3 0 5; -3 -3 -3]; for i=3:8 k(:,:,i) = rot90(k(:,:,i-2)); end % Aplica los 8 filtros (x: imagen) for i=1:8 resultado(:,:,i) = imfilter(I,k(:,:,i),‘replicate’); end % Selecciona el máximo de cada filtro II= max(abs(resultado),[],3); %Aplica umbral e=II>.5*max(II(:)); %50% Resultado del filtro II e
  • 25. Máscaras de Kirsch (V) ¿Magnitud predominante?
  • 26. Máscaras de Robinson Una negada de la otra, menos costoso computacionalmente
  • 27. Kirsch vs Robinson Comparación de máscaras a 45 o
  • 28. Comparación entre máscaras Roberts Prewitt Sobel Kirsch Robinson Kirsch Robinson Roberts Prewitt Sobel Líneas verticales -45 o
  • 29. Gradiente basado en derivada de segundo orden Función que define la máscara Segunda derivada en los puntos x +1 e y +1 Segunda derivada en los puntos x e y Operador Laplaciano
  • 30. Gradiente basado en derivada de segundo orden (II) Máscaras equivalentes 0 1 0 1 -4 1 0 1 0 1 1 1 1 -8 1 1 1 1 0 -1 0 -1 4 -1 0 -1 0 -1 -1 -1 -1 8 -1 -1 -1 -1
  • 31. Gradiente basado en derivada de segundo orden (III) Operaciones de imagen filtrada sobre original para mejora de nitidez Si centro de máscara negativo Si centro de máscara positivo Lo anterior equivale a aplicar la siguiente máscara 1 1 1 1 -8 1 1 1 1
  • 32. Primera vs segunda derivada a=[0:1/255:1]; for i=1:400 b(i,1:256)=a(1,:); end aa=zeros(400,72); bb=ones(400,72)*255; ent=[aa b bb];
  • 33. Primera vs segunda derivada (II) Imagen Fila Primera derivada Segunda derivada
  • 34. Primera vs segunda derivada (III) Detectar bordes primera derivada Aplicar umbral de intensidad a la imagen filtrada
  • 35. Primera vs segunda derivada (IV) Detectar bordes segunda derivada Detección de los cruces por cero a la imagen filtrada Cruce por cero
  • 36. Primera vs segunda derivada (V) Influencia del ruido
  • 37. Primera vs segunda derivada (VI) Primera derivada
  • 38. Primera vs segunda derivada (VII) Segunda derivada Más susceptible al ruido Menos utilizada para detectar bordes
  • 39. Primera vs segunda derivada (VIII) % Filtro de Sobel (primera derivada) >> III=edge(II,‘sobel'); % Filtro de segunda derivada >> h=[1 1 1; 1 -8 1; 1 1 1]; >>IV=edge(II, 'zerocross', h); III Ruido Doble borde No se detecta dirección IV
  • 40. Primera vs segunda derivada (IX) Algunas conclusiones sobre derivadas La primera derivada devuelve bordes más gruesos La segunda derivada discrimina más adecuadamente a líneas finas, puntos aislados y ruido La segunda derivada devuelve doble respuesta a un cambio de intensidad (valor absoluto: doble borde) El cambio de signo de la segunda derivada indica si el cambio de intensidad es de negro a blanco o viceversa
  • 41. Detección de puntos >> I=imread('discont2.jpg'); >> w=[-1, -1, -1; -1, 8, -1; -1, -1, -1] >> ww=-w >> II=imfilter(I,w); >> III=imfilter(I,ww); w = -1 -1 -1 -1 8 -1 -1 -1 -1 Se aplica el Laplaciano (segunda derivada)
  • 42. Detección de líneas En una dirección específica % Se definen las máscaras w(:,:,1)=[-1, -1, -1; 2, 2, 2; -1, -1, -1];  % 0 o w(:,:,3)=rot90(w(:,:,1));                        % 90 o w(:,:,2)=[-1, -1, 2; -1, 2, -1; 2, -1, -1];  % 45 o w(:,:,4)=rot90(w(:,:,2));                        % -45 o % Se calcula la media for i=1:4 II(:,:,i) = imfilter(I,w(:,:,i),'symmetric','same'); maxima_intensidad(1,i)=mean2(II(:,:,i)) figure;imshow(II(:,:,i)); end La mayor media indica orientación predominante de las líneas
  • 44. Detección de líneas (III) En cualquier dirección Efecto de doble línea como resultado de aplicar el Laplaciano w=fspecial('laplacian', 0) III=imfilter(II,w));
  • 45. Detección de líneas (IV) En cualquier dirección Solución I: Mantiene la doble línea w=fspecial('laplacian',0) III=imfilter(II,w); IV=abs(III)
  • 46. Detección de líneas (V) En cualquier dirección Solución II: Seleccionar una línea w=fspecial('laplacian', 0) III=imfilter(II,w); V=III>0.23*(max(III(:)));
  • 47. Detección de bordes Aplicación del gradiente Roberts z 1 z 2 Z 3 z 4 z 5 z 6 z 7 Z 8 z 9
  • 48. Detección de bordes (II) Aplicación del gradiente (Prewitt) Sobel z 1 z 2 Z 3 z 4 z 5 z 6 z 7 Z 8 z 9
  • 49. Detección de bordes (III) Combinación de píxeles de diferentes bordes % Filtrado utilizando máscaras de Roberts >> II45 = imfilter(I,[1 0; 0 -1],'symmetric'); >> II45p = imfilter(I,[-1 0; 0 1],'symmetric'); >> II135 = imfilter(I,[0 1;-1 0],'symmetric'); >> II135p = imfilter(I,[0 -1;1 0],'symmetric'); % Combinación de imágenes filtradas >>III=imlincomb(1,II45,1,II45p,1,II135,1,II135p); % Máximo entre gradientes >>grad_hv=abs(II45)+abs(135); >>grad_di=abs(II45p)+abs(II135p); >>IV=max(grad_hv, grad_di); % Máximo entre todos >>V=max(max(abs(II45),abs(135)), max(abs(II135),abs(II135p)));
  • 50. Detección de bordes (IV) III IV V Vp=V>0.53*max(V(:)); IVp=IV>0.65*max(IV(:));
  • 51. Detección de bordes (V) Combinación y selección por umbral % Se define el umbral umbral=0.3; % Se definen las máscaras (Sobel) w(:,:,1)=fspecial('sobel'); w(:,:,3)=rot90(w(:,:,1)); w(:,:,2)=[-2, -1, 0; -1, 0, 1; 0, 1, 2]; w(:,:,4)=rot90(w(:,:,2)); % Se aplica Sobel en las cuatro orientaciones, con umbral for i=1:4 II(:,:,i) = imfilter(double(I),w(:,:,i),'symmetric','same'); II(:,:,i) = II(:,:,i) >= umbral.*max(abs(II(:))); figure;imshow(II(:,:,i)); end % Imagen resultante II=imlincomb(1,II(:,:,1), 1,II(:,:,2), 1,II(:,:,3), 1,II(:,:,4)); figure; imshow(II);
  • 52. Detección de bordes (VI) Resultado de la detección de bordes para diferentes umbrales
  • 53. Detección de bordes (VII) Método de Marr-Hildreth Laplaciana de la gausiana
  • 54. Detección de bordes (VIII) Laplaciana de la gausiana Cruces por cero
  • 55. Detección de bordes (IX) Laplaciana de la gausiana >> w=fspecial('log',5,.7) w = 0.0034 0.0338 0.0697 0.0338 0.0034 0.0338 0.1800 0.0105 0.1800 0.0338 0.0697 0.0105 -1.3250 0.0105 0.0697 0.0338 0.1800 0.0105 0.1800 0.0338 0.0034 0.0338 0.0697 0.0338 0.0034 >> sum(w(:)) -6.0715e-018 La suma de los componentes de la máscara es cero Es isotrópica (invariante a la rotación)
  • 56. Detección de bordes (X) Detección de cruces por cero laplaciana de la gausiana >> -fspecial('log', 5, .4 ) ans = -0.2475 -0.2475 -0.2479 -0.2475 -0.2475 -0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.2479 -1.2336 10.3145 -1.2336 -0.2479 -0.2475 -0.3545 -1.2336 -0.3545 -0.2475 -0.2475 -0.2475 -0.2479 -0.2475 -0.2475 >> -fspecial('log', 5, .6 ) ans = -0.0056 -0.0192 -0.0483 -0.0192 -0.0056 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192 -0.0483 -0.2426 2.4429 -0.2426 -0.0483 -0.0192 -0.2758 -0.2426 -0.2758 -0.0192 -0.0056 -0.0192 -0.0483 -0.0192 -0.0056
  • 57. Detección de bordes (XI) >> III=edge(II, 'zerocross', 0.3, fspecial('laplacian', 0.1 )); >> IV=edge(II, 'zerocross', 0.3, fspecial('laplacian', 0.9 )); Más ruidosa
  • 58. Detección de bordes (XII) Método de Marr-Hildreth (otra propuesta) Filtrar la imagen con una máscara equivalente a un filtro gausiano Aplicar la máscara laplaciana Detectar los cruce por cero 1 1 1 1 -8 1 1 1 1
  • 59. Detección de bordes (XIII) >> w=[1 1 1; 1 -8 1; 1 1 1]; >>III=edge(II, 'zerocross', 0.5, w);
  • 60. Detección de bordes (XIV) Diferencia de Gausianas La Laplaciana de la gausiana puede aproximarse a diferencia de filtros gausianos Debe cumplirse:
  • 61. Detección de bordes (XV) >> IV=imfilter(II,fspecial('gaussian',[3 3],.8)); >> V=imfilter(II,fspecial('gaussian',[3 3],.2)); >> VI=imsubtract(IV,V); >> VI=VI>0.13*max(VI(:));
  • 62. Método de Canny 1.- Suavizar la imagen con filtro gausiano 2.- Obtener el módulo y dirección del gradiente basado en dos máscaras de Sobel, Prewitt o Roberts Punto de borde: Existe máximo local en dirección del gradiente 3.- Supresión no maximal: Bordes débiles Bordes fuertes 4.- Se incorporan los píxeles débiles 8 conectados a los píxeles fuertes
  • 63. Aplicación de Canny Kirsch ( T =0.95 M ) Canny
  • 64. Máscaras de Frei-Chen Subespacio borde Subespacio línea Subespacio promedio
  • 65. Obtención de coeficientes de la máscara Prewitt Sobel a = [0.5; 1.5] = 0.5+(1./(1+exp(-pa))); b = [0.5; 2.5] = 0.5+2*(1./(1+exp(-pb))); Neurona -a 0 a -b 0 b -a 0 a
  • 66. Obtención de coeficientes de la máscara (II) f(x-1, y-1) f(x-1, y) f(x-1, y+1) f(x, y-1) f(x, y) f(x, y+1) f(x+1, y-1) f(x+1, y) f(x+1, y+1) -a 0 a -b 0 b -a 0 a x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9
  • 67. Obtención de coeficientes de la máscara (III) -a 0 a -b 0 b -a 0 a -a -b -a 0 0 0 a b a -b -a 0 -a 0 a 0 a b 0 a b -a 0 a -b -a 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9
  • 68. Obtención de coeficientes de la máscara (IV) Borde total = Suma de líneas en cada orientación Núcleo estimador
  • 69. Obtención de coeficientes de la máscara (V) Núcleo estimador Coeficientes de la máscara resultante -2a-b -b b -2a-b 0 2a+b -b b 2a+b
  • 70. Obtención de coeficientes de la máscara (VI) Núcleo estimador Componentes derivativos
  • 71. Obtención de coeficientes de la máscara (VII) Matriz de entrada-salida El número de filas será semejante al número de píxeles La imagen original y la que contiene bordes tendrán la misma dimensión x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 f(x-1, y-1) f(x-1, y) f(x-1, y+1) f(x, y-1) f(x, y) f(x, y+1) f(x+1, y-1) f(x+1, y) f(x+1, y+1)
  • 72. Obtención de coeficientes de la máscara (VIII) Sustituir en algoritmo de aprendizaje supervisado Núcleo estimador Adaptación de parámetros ( gradiente )
  • 73. Obtención de coeficientes de la máscara (IX) Solución de sistema de ecuaciones lineales Núcleo estimador -2a-b -b b -2a-b 0 2a+b -b b 2a+b
  • 74. Obtención de coeficientes de la máscara (X) mm = -1.9216 -0.5584 0.5584 -1.9216 0 1.9216 -0.5584 0.5584 1.9216 >>IV=imfilter(II, mm, 'symmetric');
  • 75. Transformada de Hough Representación de línea en forma normal Fuente
  • 76. Transformada de Hough (II) Línea Puntos con similar Rho y Theta
  • 77. Transformada de Hough (III) Determina la transformada de Hough >>[Hough,Theta,Rho] = hough(a); Determina picos en la transformada >> P = houghpeaks(H,1) >> RT=[Rho(1,P(1,1)),Theta(1,P(1,2))] Valores de Rho y Theta Línea definida en
  • 78. Transformada de Hough (IV) >>II=rgb2gray(I); >> III=im2bw(II,.45); >> [H,T,R] = hough(III); >> P = houghpeaks(H, 2 ); Fuente