Búscalo aquí:

Detector de Bordes de Kirsh en Matlab [código]



Dentro de los detectores de bordes, en la categoria de operadores direccionales, podemos ubicar el detector de bordes de Kirsh, el cual tiene por objetivo no solo mantener la magnitud de los bordes, sino también su dirección. El operador de Kirsh se caracteriza por trabajar en las direcciones de 0º, 45º, 90º y 135º teniendo una máscara de convolución para cada uno de dichos ángulos. En este post mostramos el código fuente para la detección de bordes usando el operador direccional de Kirsh aplicado a imágenes en escala de grises.



El código fuente en Matlab del detector de bordes de Kirsh es:

  1. function K = Kirsh(imagen)
  2. im=imread(imagen);
  3. imD = double(im);
  4. radio=1;
    %Kirsh usa mascarilla de 3x3=>radio=1
  5. matriz = RefMatriz(imD,radio);
  6. [f,c] = size(matriz);
  7. M1=[-3 -3 5;-3 0 5;-3 -3 5]; % mascara de 0º
  8. M2=[-3 5 5;-3 0 5;-3 -3 -3]; % mascara de 45º
  9. M3=[5 5 5;-3 0 -3;-3 -3 -3]; % mascara de 90º
  10. M4=[5 5 -3;5 0 -3;-3 -3 -3]; % mascara de 135º
  11. %para evitar valores superiores a 255 dividiremos a matriz
    %por la mitad de la suma de los valores absolutos de la mascara
  12. %en este caso 15
  13. matriz=matriz/15;
  14. for i=1+radio:(f-radio)
  15. for j=1+radio:(c-radio)
  16. fil=1;
  17. for a=(i-radio):(i+radio)
  18. col=1;
  19. for b=(j-radio):(j+radio)
  20. aux(fil,col)=matriz(a,b);
  21. col=col+1;
  22. end
  23. fil=fil+1;
  24. end
  25. suma1=0;
  26. suma2=0;
  27. suma3=0;
  28. suma4=0;
  29. for a=1:3
  30. for b=1:3
  31. suma1=suma1+aux(a,b)*M1(a,b);
  32. suma2=suma2+aux(a,b)*M2(a,b);
  33. suma3=suma3+aux(a,b)*M3(a,b);
  34. suma4=suma4+aux(a,b)*M4(a,b);
  35. end
  36. end
  37. mayor=obtenerMayor(suma1,suma2,suma3,suma4);
  38. if(mayor>=0)
  39. G(i-radio,j-radio)=fix(mayor);
  40. else
  41. G(i-radio,j-radio)=0;
  42. end
  43. end
  44. end
  45. K=Negativo(G);
  46. subplot(1,2,1);
  47. imshow(imagen);
  48. title('Imagen Original');
  49. subplot(1,2,2);
  50. imshow(uint8(K));
  51. title('Deteccion de Bordes de Kirsh');

El código de la función RefMatriz() lo pueden encontrar en el post de reflejar píxeles de una matriz. El código de la función Negativo() es:

  1. function y=Negativo(imD)
  2. [f,c]=size(imD);
  3. for i=1:f
  4. for j=1:c
  5. nuevaI(i,j)=255-imD(i,j);
  6. end
  7. end
  8. y=nuevaI;
Los resultados de aplicar el detector de Kirsh se puede observar en la siguiente figura:



Espero les sea de utilidad.


Quieres leer más post como éste???...suscribete aquí!!!

4 comentarios:

  1. Que buen post Jorge. Saludos desde Colombia.

    ResponderEliminar
  2. Hola Jorge, cual sería la función obtenerMayor, gracias desde España...

    ResponderEliminar
    Respuestas
    1. Hola, básicamente esa función simplemente hace una comparación entre los valores de los parámetros que recibe y devuelve aquel que tenga el mayor valor de entre todos,

      saludos

      Eliminar
  3. por favor necesito de tu ayuda!!!... no corre tu programa en matlab, al copiarlo me marca errores y no entiendo xq???.. hay terminos que no entiendo a q se refieren.. t lo agraderia x fizzz!!!

    ResponderEliminar

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...