Header Ads

ad728
  • Posts recientes

    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í!!!

    5 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
    4. Me regala el codigo de la funcion obtener mayor

      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...

    Post Top Ad

    Post Bottom Ad

    ad728