Procesamiento de imágenes

15
Centro de Investigaciones en ´ Optica Procesamiento de im´ agenes de los fotorreceptores retinianos Reporte de Pr´ acticas en Ingenier´ ıa F´ ısica Alumno Olaf Dur´an Nava [email protected] Asesores Dr. Daniel Malacara Hern´ andez [email protected] M. en C. Carlos Alejandro Vargas [email protected] 1

description

Procesamiento de imágenes de fotorreceptores de la retina

Transcript of Procesamiento de imágenes

  • Centro de Investigaciones en Optica

    Procesamiento de imagenes de los fotorreceptoresretinianos

    Reporte de Practicas en Ingeniera Fsica

    Alumno

    Olaf Duran [email protected]

    Asesores

    Dr. Daniel Malacara [email protected]

    M. en C. Carlos Alejandro [email protected]

    1

  • Resumen

    Recientemente metodos en optica adaptativa(OA) han perimitido obtner imagenes deelementos como los fotorreceptores para ser estudiados in vivo. Las imagenes de alta re-solucion obtenidas a traves de metodos de OA contienen gran cantidad de informacion,misma que es difcil de procesar usando metodos manuales. De esta manera, en este tra-bajo se explora la aplicacion de algoritmos a las imagenes con el objetivo de disenar unmetodo automatico de segmentacion, esto ultimo con el fin de procesar la informacion de lasimagenes. Los algoritmos fueron implementados en MATLAB R 1, y se probaron distintoskernels para la deteccion de bordes a traves de la convolucion. Se concluyo que la represen-tacion del Laplaciano discreto de dimensiones 7 7 es el mas adecuado, y se complementosu utilizacion con operaciones morfologicas.

    1MATLAB es una marca registrada de The Mathworks Inc.

    2

  • Indice

    Indice 3

    1. Introduccion 4

    2. Procesamiento de imagen 42.1. Filtrado espacial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2. Convolucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3. Morfologa matematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2.3.1. Traslacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.3.2. Reflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.3.3. Dilatacion y erosion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3. Metodologa y Resultados 73.1. El operador Laplaciano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.2. Operaciones morfologicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    3.2.1. Apertura y Cerradura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    4. Conclusion 11

    Referencias 12

    A. Codigo de los algoritmos implementados en MATLAB 13

    3

  • 1. Introduccion

    Los avances en los metodos de imaginologa por optica adaptativa han permitido obtener image-nes de alta resolucion, con lo que se han logrado mejoras mediante la aplicacion de estos metodospara el diagnostico de patologas retinianas. En este sentido, el desafo consiste en el analisisefectivo de las imagenes tomando en cuenta las caractersticas fisiologicas y las limitaciones delos sistemas ingenieriles.

    En este trabajo se presentan los resultados de la implementacion de distintos algoritmos para ladeteccion de objetos, en las imagenes, los cuales son de gran interes para el diagnostico medico.Cabe resaltar que la combinacion adecuada de los metodos, que a continuacion se describiran,corresponde a la deteccion de patrones en las imagenes estudiadas. Es importante destacar quelas imagenes procesadas aqu fueron obtenidas mediante metodos de optica adaptativa en laUniversidad de Rochester.

    A continuacion se presentara una breve introduccion teorica de los metodos utilizados en estetrabajo.

    2. Procesamiento de imagen

    El procesamiento de imagen consiste en cambiar la naturaleza de la imagen tanto para aumentarsu informacion pictorica para la interpretacion humana, como para el aumento en la percepcionde maquinas autonomas.

    Una imagen puede ser definida como una funcion de dos variables f(x, y), donde x y y corres-ponden a las coordenadas espaciales, y donde la amplitud de la funcion f en cada uno de lospares de coordenadas (x, y) es conocida como intensidad o escala de grises de la imagen en esepunto [1]. Cuando x, y y la amplitud de los valores de f son finitos, y cantidades discretas,se puede decir que se trata de una imagen digital. Es de notarse que una imagen digital estacompuesta por una cantidad finita de elementos, cada uno de los cuales tiene una posicion yvalor particulares. A dichos elementos se los conoce como pixel [1]. Pixel es el termino mas usadopara donotar los elementos de una imagen digital.

    2.1. Filtrado espacial

    El filtrado espacial consiste en la aplicacion de una funcion a cada uno de los vecinos de cadapixel [1, 3]. La idea basica consiste en mover una mascara o kernel (rectangulo de dimensionesespecficas) a traves de la imagen proporcionada. Al realizar este proceso se crea una nuevaimagen cuyos pixeles obtienen nuevos valores en la escala de grises, calculados a traves de losvalores de la mascara[1, 2]. A la combinacion de la imagen y la mascara se le conoce como filtro.Si la funcion con la cual se calculan los nuevos valores en la escala de grises es una funcionlineal para cada uno de los valores de la mascara, entonces se puede decir que se trata de unfiltro lineal [1].

    Un filtro lineal puede ser implementarse por la multiplicacion de cada uno de los elementos enla mascara por los correspondientes elementos vecinos, y tomando la suma de cada uno de losproductos.

    4

  • En general, el filtrado lineal de una imagen f de tamano M N con una mascara de tamanom n esta dado por la expresion [1, 3]

    g(x, y) =

    as=a

    bt=b

    w(s, t)f(x + s, y + t) (1)

    donde a = (m 1)/2 y b = (n 1)/2. De esta manera se puede decir que el filtrado espacialrequiere de 3 pasos:

    Posicionar la imagen en el pixel correspondiente,

    Realizar cada uno de los productos de los elementos del filtro con los correspondienteselementos vecinos,

    Sumar todos los productos.

    Esto debe realizarse para cada uno de los pixeles de la imagen.

    2.2. Convolucion

    Una operacion fuertemente relacionada con el filtrado espacial es la convolucion. El metodo pararealizar la convolucion consiste en el mismo principio que el de filtrado espacial, con la excepcionde que se hace rotar la mascara 180 antes de multiplicarla y hacer la suma. Haciendo uso dela notacion antes descrita w(s, t) y f(x, y) [1, 3], una expresion para la convolucion entre unaimagen f de tamano M N con una mascara w de tamano m n es la siguiente [1, 5]:

    g(x, y) =

    as=a

    bt=b

    w(s,t)f(x + s, y + t) (2)

    donde a = (m 1)/2 y b = (n 1)/2 como antes. Notese los signos negativos en los ndices dew. El mismo resultado puede obtenerse con la expresion [1]

    g(x, y) =

    as=a

    bt=b

    w(s, t)f(x s, y t) (3)

    A esta propiedad se le conoce como propiedad de conmutatividad. Aqu se hizo rotar los pixelesde la imagen 180 en primera intancia. Esto, por su puesto, no afecta el resultado.

    2.3. Morfologa matematica

    La morfologa matematica o simplemente morfologa, es una rama de del procesamiento de ima-gen la cual es particularmente util para analizar formas en imagenes. Dicha herramienta seutiliza con mayor frecuencia en imagenes binarias, pero su uso puede extenderse a imagenes conescala de grises.

    2.3.1. Traslacion

    Supongamos que A es un conjunto de pixeles en una image binaria, y que w = (x, y) son lascoordenadas de un punto en particular. De esta manera Aw corresponde al conjunto A trasladadoen la direccion (x, y) [1]. Esto es

    Ax = {(a, b) + (x, y) : (a, b) A} (4)

    5

  • 2.3.2. Reflexion

    Consideremos nuevamente el conjunto de pixeles A. La reflexion denotada como A se obtienereflejando A con respecto a su origen [1]

    A = {(x,y) : (x, y) A} (5)

    2.3.3. Dilatacion y erosion

    Estas son las operaciones mas basicas en morfologa matematica, en el sentido de que todas lasdemas operaciones estan construidas a partir de la combinacion de estas dos.

    Dilatacion

    Suponemos que A y B son dos conjuntos de pixeles. Entonces la dilatacion de A y B, denotadacomo AB se define como [1]

    AB =xB

    Ax (6)

    Lo que esta expresion significa es que cada punto x B, se traslada el numero de coordenadasproporcionado por el elemento A. Luego se toman las uniones de todas esas traslaciones. Unadefinicion equivalente es [1]

    AB = {(x, y) + (u, v) : (x, y) A, (u, v) B} (7)

    De esta ultima definicion se puede ver que la dilatacion es conmutativa

    AB = B A (8)Erosion

    Dados los conjuntos A y B, la erosion de A por B, denotada por AB se define como [1]

    AB = {w : Bw A} (9)Es decir, la erosion de A por B consiste en todos los puntos w = (x, y) para los cuales Bwesta en A. Para llevar a cabo una erosion, se puede mover B alrededor de A, y buscar todoslos puntos donde concuerda con los pixeles vecinos, y para cada uno de esos lugares marcar elcorrespondiente (0, 0) punto de B. El conjunto de dichos puntos es la erosion.

    La erosion esta relacionada con la resta de Minkowski [1, 3] La resta Minkowski de B y A estadefinida como

    AB =bB

    Ab (10)

    6

  • 3. Metodologa y Resultados

    En esta seccion se presenta la implementacion de los algoritmos antes descritos en imagenesde la retina obtenidas en la Universidad de Rochester. Dicha implementacion se hizo medianteguiones en MATLAB, los cuales se pueden revisar en el apendice A.

    3.1. El operador Laplaciano

    Un metodo para la deteccion de bordes en imagenes se obtiene considerando la segunda derivada.La suma de las segundas derivadas en ambas direcciones se conoce como Laplaciano [1, 2], elcual, para una funcion(imagen) f(x, y) de dos variables, se define como

    2f = 2f

    x2+2f

    y2(11)

    En general las derivadas de cualquier orden son operaciones de tipo lineal. Por lo tanto se diceque el Laplaciano es un operador lineal.Para que esta ecuacion pueda ser util, en el procesamiento digital de imagenes, es necesariorepresentarla de manera discreta como se puede apreciar en la Fig.1.

    0 0 1 0 00 1 2 1 01 2 16 2 1

    0 1 2 1 00 0 1 0 0

    (a)

    0 0 1 1 1 0 00 1 3 3 3 1 01 3 0 7 0 3 11 3 7 24 7 3 11 3 0 7 0 3 1

    0 1 3 3 3 1 00 0 1 1 1 0 0

    (b)

    Figura 1: Representacion de laplacianos discretos.(a) Sombrero mexicano de 5 x 5. (b) Sombreromexicano de 7 x 7

    A estas ultimas matrices se les conoce como el Laplaciano discreto [2]. Debido a la aparienciade estos kernels cuando se grafican en vista isometrica se les conoce tambien como Sombrerosmexicanos. Esta funcion corresponde a la segunda derivada de una funcion Gaussiana. En laFig. 3 [2] se puede ver la representacion en tiempo continuo del operador Laplaciano a distintasamplitudes e intervalos. Cabe senalar que para la representacion en tiempo discreto, esto selogra con matrices de distintos tamanos como las que se muestran en las Fig. 1 y 2. [2]

    Ahora bien, a continuacion analizaremos el efecto del operador Laplaciano antes descrito a travesde la operacion de convolucion de las matrices con las imagenes originales de la retina. La ecua-cion (11) se implementa usando las mascaras que se muestran en las Fig. 1 y 2. La mecanica dela implementacion se observa a traves de la ecuacion (3).

    Dado que el Laplaciano es un operador de derivacion, su uso destaca discontinuidades de nivelesde gris en una imagen y atenua regiones con variacion lenta en la escala de grises. Esto tiende aproducir imagenes con lneas de borde grisaceo y otras discontinuidades, todas superpuestas enfondos oscuros sin rasgos distintivos. Los rasgos oscuros pueden ser recuperados, y al mismo

    7

  • 0 0 0 0 0 1 1 1 0 0 0 0 00 0 0 1 1 2 2 2 1 1 0 0 00 0 2 2 3 3 4 3 3 2 2 0 00 1 2 3 3 3 2 3 3 3 2 1 00 1 3 3 1 4 6 4 1 3 3 1 01 2 3 3 4 14 19 14 4 3 3 2 11 2 4 2 6 19 24 19 6 2 4 2 11 2 3 3 4 14 19 14 4 3 3 2 1

    0 1 3 3 1 4 6 4 1 3 3 1 00 1 2 3 3 3 2 3 3 3 2 1 00 0 2 2 3 3 4 3 3 2 2 0 00 0 0 1 1 2 2 2 1 1 0 0 00 0 0 0 0 1 1 1 0 0 0 0 0

    Figura 2: Sombrero mexicano de 13 13

    3 2 1 0 1 2 30.4

    0.2

    0

    0.2

    0.4

    0.6

    0.8

    1

    Mag

    nitu

    d

    Figura 3: Representacion de los sombreros mexicanos en tiempo continuo

    tiempo conservar el efecto de afilado del operador Laplaciano, con tan solo sumar la imagenoriginal y la imagen modificada por el Laplaciano.

    Cabe resaltar que la eleccion del Laplaciano correcto es de suma importancia. En efecto, sila matriz utilizada posee coeficientes negativos al centro, entonces se debe restar, en lugar desumar la imagen modificada por el Laplaciano para obtener el efecto de afilado. Por lo tanto,la forma mas basica en la cual se utiliza el Laplaciano para el realce de imagenes es [1]

    g(x, y) =

    {f(x, y)2f(x, y) si el centro de la mascara posee coeficientes negativosf(x, y) +2f(x, y) si el centro de la mascara posee coeficientes positivos

    (12)En la Fig. 4(a) se muestra la imagen original de los fotorreceptores retinianos obtenida mediantemetodos de optica adaptativa en la Universidad de Rochester. En la Fig. 4(b) se puede apreciarel resultado de filtrar esta imagen con la mascara de la Fig. 1(a). La imagen de la figura 4(c)

    8

  • (a) (b) (c)

    (d) (e)

    Figura 4: Imagenes de los fotorreceptores de la retina. (a) imagen original, (b) kernel de 5 5actuando sobre la imagen original, (c) kernel de 7 7 actuando sobre la imagen original, (d)kernel de 13 13 actuando sobre la imagen, (e) kernel de 17 17 actuando sobre la imagen.

    representa la convolucion del filtro de la Fig. 1(b) con la imagen original. Lo mismo ocurre enla Fig .4(d), donde se utilizo la mascara de la Fig. (2). Finalmente, el la Fig. 4(e) se utilizo unamatriz de 17 17, la cual no se incluye en el reporte.

    Como puede observarse en la Fig. 4, a medida que se aumenta el tamano de las mascaras, esdecir, el tamano de las matrices, se hace mas evidente la deteccion de los bordes. Sin embargo,tambien se puede apreciar que se va perdiendo la estructura de las celulas de la imagen original.Cabe decir que el tamano del kernel selecciona en base al tamano de las zonas flourescentes, lascuales definen el margen de cada una de las celulas, con el objetivo de reducir el nivel de ruido,sin eliminar la estructura de la celula [4, 6]. En efecto, si el tamano del kernel es muy pequeno,el nivel de ruido no se reduce de manera significativa, y por el contrario, si el tamano del kerneles muy grande, la estructura de la celula se elimina [4, 6]. De esta manera, se puede concluirque la utilizacion del kernel de 7 7, el cual se muestra en la Fig. 2(b), es el mas adecuado eneste caso, ya que, como se menciono antes, este filtro logra detectar los bordes de la imagen sineliminar la estructura de las celulas. Dicho resultado se puede apreciar en la Fig. 4(c).

    3.2. Operaciones morfologicas

    La mayora de las aplicaciones basadas en conceptos morfologicos, los cuales se discutieron enla seccion 2.3 implican imagenes binarias. A pesar de ser operaciones muy basicas, dichas ope-raciones logicas proporcionan un complemento significativo a la implementacion de algoritmospara el procesamiento de imagen [1]. En primer lugar se definira en que consiste hacer un mapabinario (binarizar) una imagen. La binarizacion es una operacion de umbral [1]. Despues de

    9

  • (a) (b) (c)

    (d) (e)

    Figura 5: Imagenes de los fotorreceptores de la retina despues de aplicar las operaciones de: (a)binarizacion, (b) erosion, (c) dilatacion, (d) apertura, (e) cerradura

    haber usado los sombreros mexicanos, la imagen contiene valores de pixeles por debajo del cero,donde el cruce por cero representa el borde de la celula. La operacion de binarizar fija todos losvalores de la imagen por debajo de uno a cero y todos los valores mayores o iguales a uno losfija a uno, tal como se muestra en la Ec. (13) [4]. La operacion de binarizacion se muestra en laFig.5(a). En la Fig. 5(b) se muestra la operacion de erosion sobre la imagen binaria. En la Fig.5(c) se muestra la operacion de dilatacion sobre la imagen binaria original.

    g(x, y) =

    1 f(x, y) 10 f(x, y) < 1

    (13)

    3.2.1. Apertura y Cerradura

    Como hemos podido observar, la operacion de dilatacion expande la imagen, mientras que laoperacion de erosion la encoge. A continuacion definiremos dos operaciones morfologicas igual-mente importantes: la apertura y la cerradura. Generalmente la operacion de apertura alisa elcontorno de una imagen, rompe las uniones entre dos objetos conjuntos estrechos, y eliminaprotuberancias finas [1]. La operacion de cerradura, por su parte, tiende tambien a alisar lassecciones de contorno, pero opuesto a la operacion de apertura, generalmente fusiona unionesestrechas rotas y bordes estrechos, elimina pequenos orificios, y llena huecos en los contornos [1].

    La apertura del conjunto A por un elemento de estructuracion B, denotado como AB, se definecomo [1]

    10

  • A B = (AB)B (14)Por lo tanto, la apertura de A por B es la erosion de A por B, seguida de la dilatacion delresultado por B.De la misma manera, la cerradura de A por el elemento de estructuracion B, denotado por AB,se define como [1]

    A B = (AB)B (15)La ecuacion (15) nos dice que la cerradura de A por B es simplemente la dilatacion de A por B,seguida por la erosion del resultado por B.

    Las operaciones morfologicas pueden ser utilizadas para construir filtros, similares en concepto,como los descritos en la seccion 2.1.

    0 0 1 0 00 0 1 0 01 1 1 1 10 0 1 0 00 0 1 0 0

    Figura 6: Elemento estructurador B

    En la Fig. 5 (a) se muestra la binarizacion de la imagen original que se muestra en la Fig. 4 (a).Para nuestro analisis se utilizo el elemento de estructuracion que se muestra en la Fig. 6 [2]. Enla Fig. 5 (d) se muestra el resultado de la operacion de apertura de la imagen binaria por elelemento estructurador de la Fig. 6. En la Fig. 5 (e) se muestra el resultado de la cerradura dela imagen binaria por el mismo elemento estructurador.

    4. Conclusion

    En este trabajo se utilizaron algoritmos representativos de las tecnicas utilizadas para el realcede imagenes en el dominio espacial. En la primera parte del trabajo se emplearon mascaras conel fin de detectar bordes en imagenes de la retina. Dichos bordes corresponden a la estructurade las celulas de los fotorreceptores retinianos. La implementacion se hizo a traves de la convo-lucion de dichas imagenes con kernels que llamamos sombreros mexicanos. Se pudo notar que laeleccion de las mascaras se con base en el tamano de las estructuras a detectar, y por lo tantoen nuestro caso, podemos concluir que el kernel de 7 7 fue el mas efectivo.

    Por otra parte se analizo el efecto de aplicar operaciones morfologicas a las mismas imagenes.Fue posible notar que tanto la dilatacion como la erosion son operaciones que permiten la de-teccion de estructuras dentro de la imagen, o bien, se pueden emplear con el objetivo de alisaro unir dichas estructuras.

    Finalmente se puede afirmar que la utilizacion correcta de las tecnicas antes descritas, son elfundamento en el diseno de algoritmos, para la segmentacion de distintas estructuras en imagenesobtenidas a partir de instrumentacion biomedica basada en optica adaptativa.

    11

  • Referencias

    [1] R. C. Gonzalez and R. E. Woods, Digital Image Processing. Prentice Hall, 2nd edition,(2002).

    [2] J. C. Russ, The Image Processing Handbook. CRC Press, Sixth edition, (2011).

    [3] G. P. Jesus De La Cruz, Vision Por Computador. Imagenes Digitales y Aplicaciones. Alfao-mega, Segunda edicion, (2008).

    [4] P. Rangel-Fonseca, A. Gomez-Vieyra, D. Malacara-Hernandez, M. C. Wilson, D. R. Williams,and E. A. Rossi, Automated segmentation of retinal pigment epithelium cells in fluorescenceadaptive optics images, J. Opt. Soc. Am. A 30, 2595-2604 (2013)

    [5] http://www.mathworks.com/help/vision/ref/2dconvolution.html

    [6] U. Michael, Sum and Difference Histograms for Texture Classification, Pattern Analysisand Machine Intelligence, IEEE Transactions on , vol.PAMI-8, no.1, pp.118,125, Jan. 1986

    12

  • Apendices

    A. Codigo de los algoritmos implementados en MATLAB

    .

    %% Implementacion distintas mascaras sobre imagenes usando la convolucion

    %% Cargar imagen y mascara

    clc; close all;

    img = (imread(ImaRPE23.tif));

    imagen = double(img);

    mask = [];

    % 5 x 5 Laplacian Kernel

    Laplacian_kernel = [0 0 -1 0 0; 0 -1 -2 -1 0; -1 -2 16 -2 -1; 0 -1 -2 -1 0; 0 0 -1 0 0];

    % 7 x 7 Mexican hat Kernel

    Mexican_hat_kernel7 = [0 0 -1 -1 -1 0 0;

    0 -1 -3 -3 -3 -1 0;

    -1 -3 0 7 0 -3 -1;

    -1 -3 7 24 7 -3 -1;

    -1 -3 0 7 0 -3 -1;

    0 -1 -3 -3 -3 -1 0;

    0 0 -1 -1 -1 0 0];

    % 13 x 13 Mexican hat Kernel

    Mexican_hat_kernel13 = [0 0 0 0 0 -1 -1 -1 0 0 0 0 0;

    0 0 0 -1 -1 -2 -2 -2 -1 -1 0 0 0;

    0 0 -2 -2 -3 -3 -4 -3 -3 -2 -2 0 0;

    0 -1 -2 -3 -3 -3 -2 -3 -3 -3 -2 -1 0;

    0 -1 -3 -3 -1 -4 6 4 -1 -3 -3 -1 0;

    -1 -2 -3 -3 4 14 19 14 4 -3 -3 -2 -1;

    -1 -2 -4 -2 6 19 24 19 6 -2 -4 -2 -1;

    -1 -2 -3 -3 4 14 19 14 4 -3 -3 -2 -1;

    0 -1 -3 -3 -1 4 6 4 -1 -3 -3 -1 0;

    0 -1 -2 -3 -3 -3 -2 -3 -3 -3 -2 -1 0;

    0 0 -2 -2 -3 -3 -4 -3 -3 -2 -2 0 0;

    0 0 0 -1 -1 -2 -2 -2 -1 -1 0 0 0;

    0 0 0 0 0 -1 -1 -1 0 0 0 0 0];

    % 17 x 17 Mexican hat Kernel

    Mexican_hat_kernel17 = [0 0 0 0 0 0 -1 -1 -1 -1 -1 0 0 0 0 0 0;

    0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0;

    0 0 -1 -1 -1 -2 -3 -3 -3 -3 -3 -2 -1 -1 -1 0 0;

    0 0 -1 -1 -2 -3 -3 -3 -3 -3 -3 -3 -2 -1 -1 0 0;

    0 -1 -1 -2 -3 -3 -3 -2 -3 -2 -3 -3 -3 -2 -1 -1 0;

    0 -1 -2 -3 -3 -3 0 2 4 2 0 -3 -3 -3 -2 -1 0;

    -1 -1 -3 -3 -3 0 4 10 12 10 4 0 -3 -3 -3 -1 -1;

    -1 -1 -3 -3 -2 2 10 18 21 18 10 2 -2 -3 -3 -1 -1;

    -1 -1 -3 -3 -3 4 12 21 24 21 12 4 -3 -3 -3 -1 -1;

    -1 -1 -3 -3 -2 2 10 18 21 18 10 2 -2 -3 -3 -1 -1;

    13

  • -1 -1 -3 -3 -3 0 4 10 12 10 4 0 -3 -3 -3 -1 -1;

    0 -1 -2 -3 -3 -3 0 2 4 2 0 -3 -3 -3 -2 -1 0;

    0 -1 -1 -2 -3 -3 -3 -2 -3 -2 -3 -3 -3 -2 -1 -1 0;

    0 0 -1 -1 -2 -3 -3 -3 -3 -3 -3 -3 -2 -1 -1 0 0;

    0 0 -1 -1 -1 -2 -3 -3 -3 -3 -3 -2 -1 -1 -1 0 0;

    0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0;

    0 0 0 0 0 0 -1 -1 -1 -1 -1 0 0 0 0 0 0];

    % seleccion del kernel

    mask = double(Mexican_hat_kernel17);

    % Mostrar imagen

    figure; imshow(img)

    %% Algoritmo de la convolucion

    clc; close all;

    [M_imagen,N_imagen] = size(imagen); % Tama~no de la imagen

    [M_mask, N_mask] = size(mask); % Tama~no de la mascara

    M_w = (M_mask - 1)/2; N_w = (N_mask - 1)/2; %recorrido de la mascara

    M_center = round(M_mask/2); N_center = round(N_mask/2); % Centro de la mascara

    %M_center = (M_mask + 1)/2; N_center = round(N_mask/2); % Centro de la mascara

    C = zeros(M_imagen, N_imagen); % Matriz de ceros para rellenar con la convolucion

    for i = M_center: M_imagen - M_center + 1

    for j = N_center: N_imagen - N_center + 1

    C(i,j) = sum(sum(imagen(i - M_w:i + M_w, j - N_w: j + N_w).*fliplr(flipud(mask))));

    end

    end

    %imshow(round(conv2(double(imagen),double(mask),same))== round(C))

    %round(conv2(double(imagen),double(mask),same))== round(C)

    %figure; imshow(img);

    conv2(double(imagen),double(mask),same) == C

    figure; imshow(C)

    %figure; imshow(conv2(imagen,Mexican_hat_kernel17,same))

    %% Morphological Operations

    clc;close all;

    % Binarizacion de la imagen

    Binary_image = zeros(M_imagen, N_imagen);

    for i = M_center: M_imagen - M_center + 1

    for j = N_center: N_imagen - N_center + 1

    if img(i,j) > 128

    Binary_image(i,j) = 1;

    end

    end

    end

    14

  • %binary_image = (img > 128);

    Binary_image == (img > 128);

    figure; imshow(Binary_image);

    %% Erosion de la imagen

    clc;close all;

    erosion_mask = [1 1 1; 1 1 1; 1 1 1];

    Eroded_image = zeros(M_imagen, N_imagen);

    [M_erosion_mask, N_erosion_mask] = size(erosion_mask);

    M_esn_w = (M_erosion_mask - 1)/2; N_esn_w = (N_erosion_mask - 1)/2;

    M_erosion_center = round(M_erosion_mask/2); N_erosion_center = round(N_erosion_mask/2);

    for i = M_center: M_imagen - M_center + 1

    for j = N_center: N_imagen - N_center + 1

    if Binary_image(i - M_esn_w:i + M_esn_w, j - N_esn_w: j + N_esn_w)

    == erosion_mask

    Eroded_image(i,j) = 1;

    else

    Eroded_image(i,j) = 0;

    end

    end

    end

    %figure;imshow(Binary_image)

    Eroded_image == bwmorph(Binary_image,erode)

    figure;imshow(Eroded_image)

    %% Dilatacion de la imagen

    close all;

    dilation_mask = [1 1 1; 1 1 1; 1 1 1];

    Dilated_image = zeros(M_imagen, N_imagen);

    [M_dilation_mask, N_dilation_mask] = size(dilation_mask);

    M_dlt_w = (M_dilation_mask - 1)/2; N_dilation_walk = (N_dilation_mask - 1)/2;

    M_dilation_center = round(M_dilation_mask/2); N_dilation_center = round(N_dilation_mask/2);

    for i = M_center: M_imagen - M_center + 1

    for j = N_center: N_imagen - N_center + 1

    if Binary_image(i,j)== 1

    Dilated_image(i - M_dlt_w:i + M_dlt_w, j - N_dlt_w: j + N_dlt_w) = dilation_mask;

    end

    end

    end

    figure; imshow(Dilated_image)

    15