0% encontró este documento útil (0 votos)
54 vistas31 páginas

Detección de Bordes en Imágenes Digitales

Cargado por

Luis Gomz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas31 páginas

Detección de Bordes en Imágenes Digitales

Cargado por

Luis Gomz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

BORDES Y CONTORNOS

Características en una imagen tales como bordes y contornos, los cuales son detectados a través de
cambios locales de intensidad o de color, juegan un papel importante en la interpretación de
imágenes. La subjetiva "claridad" de una imagen se encuentra en relación directa con las
discontinuidades y nitidez de las estructuras presentes en la misma. El ojo humano da un peso
importante a los bordes de los objetos, tal que sencillos trazos en imágenes son suficientes para
interpretar las clases de los objetos presentes. Por esta razón son los bordes y los contornos un tema
muy importante para el procesamiento de imágenes digitales y la visión artificial. En este capítulo se
hace un tratamiento de los principales métodos existentes para la localización de bordes.
6.1. ¿Cómo se producen los contornos?
Los bordes tienen un predominante rol en la visión humana y probablemente también en otros
sistemas biológicos de visión. los bordes no solamente son notables, sino también es posible
mediante pocas líneas de bordes reconstruir nuevamente a los objetos. (Figura 6.1)
Pero de todo esto, ¿cómo se originan estos bordes y como técnicamente es posible
localizarlos en las imágenes?
Los bordes a grosso modo pueden ser considerados como puntos en una imagen en los
cuales la intensidad en una determinada dirección cambia drásticamente. Dependiendo del
cambio presentado en la intensidad será el valor del borde en la imagen para ese punto. El
tamaño del cambio es calculado normalmente a partir de la derivada, y es utilizada como uno
de los enfoques más importantes para la determinación de los bordes en una imagen.

Figura 6.1 Imagen Original (a) e imagen con los bordes

6.2. Detección de bordes utilizando técnicas basadas en el gradiente


Por facilidad consideramos una sola dimensión y tomamos como ejemplo una imagen que
tenga una región blanca en el centro rodeada de un fondo oscuro [figura 6.2(a)]
El perfil en escala de grises a lo largo de una línea de la imagen podría verse como se muestra
en la figura 6.2 (b). Definiremos esta señal unidimensional como 𝑓 (𝑢) y calcularemos a partir
de ella su primera derivada.
𝑑𝑓 6.1
𝑓′(𝑢) = (𝑢),
𝑑𝑢
así se produce una elevación positiva donde la intensidad disminuye. Sin embargo, la
derivada no está definida para funciones discretas como f(u) por lo que necesitamos un
método para calcularla.

1
Figura 6.2 Primera derivada en el caso unidimensional obtenido a partir del perfil horizontal de la
imagen. Imagen original (a) y la derivada f'(u) del perfil horizontal

obtenido de la imagen
Es conocido que la derivada de una función continua en un punto x, puede ser interpretada
por la pendiente de la tangente en ese punto en particular. Sin embargo, para la función
discreta la derivada en un punto u (la pendiente de la tangente a ese punto) puede ser
calculada a partir de la diferencia existente entre los puntos vecinos a “u” dividido por el valor
de muestreo entre ambos puntos. Por lo que la derivada puede ser aproximada por
𝑑𝑓 𝑓(𝑢 + 1) − 𝑓(𝑢 − 1)
(𝑢) ≈
𝑑𝑢 2 6.2
= 0.5 ∙ (𝑓(𝑢 + 1) − 𝑓(𝑢 − 1))
El mismo proceso también puede ser llevado a cabo para el sentido vertical a lo largo de la
columna de la imagen.

6.2.1. Derivada parcial y gradiente


La derivada parcial puede ser considerada como la derivada de una función
multidimensional a lo largo de un eje coordenado; por ejemplo

Figura 6.3 Cálculo de la primera derivada para una función discreta. La pendiente de la línea a
través de los puntos vecinos f(u-1) y f(u+1) sirve como cálculo indirecto de la pendiente a la tangente
en f(u). El cálculo es lo suficientemente aproximado en la mayoría de los casos que pudieran
presentarse

Expresa la derivada parcial de la función de la imagen 𝐼(𝑢, 𝑣) con respecto a la variable 𝑢 o


𝑣. El vector

2
𝜕𝐼
(𝑥, 𝑦)
𝜕𝑥 6.3
∇𝐼(𝑥, 𝑦) = 𝜕𝐼
(𝑥, 𝑦)
[𝜕𝑦 ]
Representa el vector del gradiente de la función I en el punto (x, y). El valor del gradiente

𝜕𝐼 2 𝜕𝐼 2
|∇𝐼 | = √( ) + ( ) 6.4
𝜕𝑥 𝜕𝑦

Es la invariante a rotaciones de la imagen y cómo ello también independiente de la orientación


de las escrituras contenidas en la misma. Esta propiedad es importante para localización de
los puntos bordes de la imagen con ello es el valor de |⛛I |, el valor práctico utilizado en la
mayoría de los algoritmos utilizados para la detección de bordes.

6.2.2. El filtro derivada


Los componentes del gradiente de la ecuación 6.4 no son otra cosa que la primera derivada
tanto en el sentido de los renglones como en el de las columnas de la imagen. La forma de
calcular esta derivada en sentido horizontal es posible con el siguiente filtro con la siguiente
matriz:

𝐻𝑥𝐷 = [−0.5 0 0.5] = 0.5 ∙ [−1 0 1 ] 6.5

donde el coeficiente -0.5 afecta al píxel 𝐼(𝑥 − 1, 𝑦) y 0.5 al píxel 𝐼(𝑥 + 1, 𝑦). El valor del píxel
de en medio 𝐼(𝑥, 𝑦) es multiplicado por cero o de igual manera ignorado (aquí se considera
que el elemento bajo el cual se calcula la propiedad en cuestión). De igual manera al
establecer el mismo efecto de filtro, pero en sentido vertical, siendo la siguiente matriz de
coeficientes
−0.5 −1
𝐻𝑦𝐷 = [ 0 ] = 0.5 [ 0 ] 6.6
0.5 1

6.3. Filtros para la detección de bordes con Matlab


La forma de calcular el gradiente local corresponde a cada píxel de la imagen, es lo que
fundamentalmente diferencia a cada uno de los diferentes operadores para la detección de
bordes, ellos se diferencian principalmente en la forma en cómo se calcula el gradiente en los
diferentes componentes direccionales, así como en la forma en como esos resultados
parciales son unidos en uno final. En varios métodos se está interesado no únicamente en el
valor del gradiente en un píxel que pertenece a un borde sino también en la dirección del
borde en cuestión.
Sin embargo, como ambas informaciones (valor del gradiente y dirección) están implícitas en
el cálculo del gradiente es posible obtenerlas fácilmente. A continuación, se representan
algunos de los operadores de bordes más conocidos, ya sea por su aplicación, práctica o
bien por haber sido históricamente interesantes.

3
Figura 6.4 La primera derivada parcial. (a) Imagen sintética, (b) primera derivada

parcial sobre el sentido horizontal Ə𝑙 𝑑𝑢, (c) sobre el sentido vertical Ə𝑙/𝑑𝑣, (d) valor
del gradiente |𝛻𝐼 |. En (b) y (c) son los valores oscuros pertenecientes a valores negativos,
los valores más brillantes pertenecientes a valores positivos mientras que el gris
corresponde al cero

6.3.1. Los operadores Prewitt y Sobel

Los operadores Prewitt y Sobel representan dos de los métodos más usados en la
detección de bordes, los cuales son muy similares entre si diferenciándose solamente por
algunas particularidades.

[Link]. El Filtro
Ambos operadores utilizan filtro de 3x3, esto facilita la configuración del filtro que no
sea vulnerable al ruido propio de la imagen. El operador Prewitt utiliza el filtro
definido por:
6.7
−1 0 1 −1 −1 −1
𝑃 𝑃
𝐻𝑥 = [−1 0 1] y 𝐻𝑦 = [ 0 0 0]
−1 0 1 1 1 1

El cual es evidentemente aplicado sobre los diferentes vecinos del píxel en cuestión.
Si se analiza el filtro en su forma separada
1 −1
𝐻𝑥𝑃 = [1] ∗ [−1 0 −1] o bien 𝐻𝑦𝑃 = [1 1 1] ∗ [ 0 ] 6.8
1 −1

4
seria claro que cada uno de los vectores de la derecha ya sea para el caso de 𝐻𝑥𝑃 o
𝐻𝑦𝑃 produce tres columnas o renglones que constituyen los coeficientes del filtro
definido en la ecuación 6.8, sin embargo, como puede observarse este vector
[−1 0 −1] mantiene la aproximación de la derivada definida en la sección 6.2.2.
También es posible notar como el vector de la izquierda [1 1 1] en ambos casos
implica una operación de suavizado de los datos, mostrando así cómo el filtro aparte
de localizar o realzar los pixeles pertenecientes a los bordes, realiza una operación
de suavizado, que permite hacer más robusto el filtro, al ruido presente en la imagen.
El operador de Sobel tiene un filtro prácticamente idéntico al Prewitt, con la única
diferencia de que en este filtro se le da un mayor peso al renglón o columna central
del filtro. La matriz de coeficientes para este operador es definida como
−1 0 1 −1 −2 −1
𝐻𝑥𝑆 = [−2 0 𝑆
2] y 𝐻𝑦 = [ 0 0 0] 6.9
−1 0 1 1 2 1
Los resultados de los filtros de Prewitt y Sobel producen estimaciones del gradiente
local para todos los pixeles de la imagen en sus dos diferentes direcciones,
manteniendo la siguiente relación
𝑃 𝑆
1 𝐻𝑥 ∙ 𝐼 1 𝐻𝑥 ∙ 𝐼
𝛻𝐼(𝑥, 𝑦) = [ 𝑃 ] y 𝛻𝐼(𝑥, 𝑦) = [ 𝑆 ] 6.10
6 𝐻𝑦 ∙ 𝐼 8 𝐻𝑦 ∙ 𝐼

[Link]. Tamaño y dirección del gradiente

Independientemente sí se trata de cualquiera de los operadores se caracteriza los


resultados de los filtros para cada uno de los sentidos como:

𝐷𝑥 (𝑥, 𝑦) = 𝐻𝑥 ∗ 𝐼 y 𝐷𝑦 (𝑥, 𝑦) = 𝐻𝑦 ∗ 𝐼 6.11

La magnitud del borde 𝐸(𝑢, 𝑣) es en ambos casos definida como la magnitud del
gradiente

2
𝐸(𝑥, 𝑦) = √(𝐷𝑥 (𝑥, 𝑦))2 + (𝐷𝑦 (𝑥, 𝑦)) 6.12

Y la dirección del gradiente en cada píxel (el ángulo) es calculado a partir de


𝐷𝑦 (𝑥, 𝑦) 6.13
𝜙(𝑥, 𝑦) = tan−1 ( )
𝐷𝑥 (𝑥, 𝑦)

La figura 6.5 muestra la representación del tamaño y dirección del gradiente sobre
una imagen. El proceso completo para la detección de bordes es de nueva cuenta
resumido en la figura 6.6. Primero la imagen original es filtrada a través de las dos
matrices de coeficientes 𝐻𝑥 y 𝐻𝑦 y consecuentemente sus resultados son reunidos
en la magnitud del gradiente 𝐸(𝑥, 𝑦) y en la dirección de este mismo 𝜙(𝑥, 𝑦).

5
Figura 6.5 Representación de la magnitud gradiente 𝐸(𝑥, 𝑦) y si dirección 𝜙(𝑥, 𝑦)

Figura 6.6 Operación típica de los filtros utilizados para la detección de bordes. Con
ambas matrices de coeficientes 𝐻𝑥 y 𝐻𝑦 son producidas las imágenes de gradientes
𝐷𝑥 y 𝐷𝑦 y con ellas son calculados la magnitud del gradiente 𝐸(𝑥, 𝑦) y 𝜙(𝑥, 𝑦) su
dirección
El cálculo de la dirección del gradiente utilizando el operador Prewitt y la versión
original del operador Sobel es relativamente imprecisa, por ello se sugiere en lugar de
utilizar el filtro Sobel presentado en la ecuación 6. 10 utilizar la versión que minimiza
el error de ángulo, definida por
−3 0 3 −3 10 −3
1 1
𝐻𝑥𝑆′ = [−10 0 10] y 𝐻𝑦𝑆′ = 32 [ 0 0 0] 6.14
32
−3 0 3 3 10 3

El operador Sobel es a razón de sus buenos resultados y facilidad de implementación


muy utilizado e implementado en la mayoría de los paquetes de Software comerciales
utilizados para el procesamiento de imágenes digitales.

6.3.2. El operador Roberts


Es uno de los filtros más viejos utilizados en la localización de bordes en una imagen,
considerado históricamente interesante. El filtro es extremadamente pequeño utilizando una
matriz de coeficientes de tan solo 2 × 2, para la determinación del gradiente en sus dos
diferentes direcciones a lo largo de sus diagonales. El operador queda definido por:
0 1 1 0
𝐻1𝑅 = [ ] 𝑦 𝐻2𝑅 = [0 1] 6.15
−1 0

Este filtro reacciona particularmente a los bordes de la imagen que tienen una dirección
diagonal (figura 6.7), sin embargo, ello hace que el filtro sea poco selectivo en la dirección del
gradiente, principalmente cuando éste se calcula sobre regiones con una misma orientación.
La magnitud del gradiente se calcula como fue definido en la ecuación 6.5, considerando
ambas componentes 𝐻1𝑅 y 𝐻2𝑅 sin embargo, debido a la operación diagonal del filtro sobre los

6
datos, puede considerarse que la magnitud del gradiente se forma como la resultante de dos
vectores (𝐻1𝑅 y 𝐻2𝑅 ) que se encuentran a 45°. La figura 6.8 esquematiza esta operación.

Figura 6.7 Componentes diagonales del operador Roberts. De las imágenes es fácil reconocer el
carácter direccional en el cálculo de este operador para encontrar la magnitud del gradiente en cada
píxel de la imagen

Figura 6.8 Magnitud del gradiente considerando el operador Roberts La magnitud del
gradiente 𝐸(𝑥, 𝑦) es calculado como la suma de los dos filtros ortogonales 𝐻1𝑅 y 𝐻2𝑅 que se aplican
para cada dirección de la diagonal

6.3.3. OPERADORES DE COMPAS


Un problema en el diseño de filtros para la detección de bordes es que cuando nos volvemos
más sensibles a la detección del borde de una estructura más independiente, nos dirigimos a
la dirección de este, por lo que para diseñar un buen operador es necesario hacer un
compromiso entre la magnitud de la respuesta y la sensibilidad a la dirección del gradiente.
Una solución para ello es no utilizar solamente dos filtros que descompongan el accionar del
filtro en dos direcciones, ya sea horizontal y vertical en el caso de los operadores Prewitt y
Sobel, o en diagonal hacia arriba o abajo como lo es para el operador Roberts, sino utilizar
filtros para un mayor número de direcciones. Un ejemplo clásico es el operador de Kirsch, el

7
cual cuenta con ocho diferentes filtros, cada uno separado del otro por 45°. Las matrices de
coeficientes de este operador son las siguientes:
−1 0 1 −2 −1 0 −1 −2 −1 0 −1 −2
𝐻0𝐾 = [−2 0 2],𝐻1𝐾 = [−1 0 1], 𝐻2𝐾 = [ 0 0 0 ], 𝐻3𝐾 = [1 0 −1]
−1 0 1 −0 1 2 −1 0 1 2 1 0
6.16
1 0 −1 2 1 0 1 2 1 0 1 2
𝐻4𝐾 = [2 0 −2], 𝐻5𝐾 = [1 0 −1], 𝐻6𝐾 = [ 0 0 0 ], 𝐻7𝐾 = [−1 0 1]
1 0 −1 0 −1 0 −1 −2 −1 −2 −1 0
De estos 8 filtros 𝐻0𝐾 , 𝐻1𝐾 , . . . , 𝐻8𝐾 se deben calcular, sin embargo, solo cuatro, debido a que los
últimos cuatro son iguales a los cuatro primeros excepto en el signo. Por ejemplo, se tiene
que 𝐻4𝐾 = 𝐻0𝐾 . Debido a la propiedad de linealidad de la convolución, es evidente que:

𝐼 ∗ 𝐻4𝐾 = 𝐼 ∗ −𝐻0𝐾 = −(𝐼 ∗ 𝐻0𝐾 ) 6.17

Las imágenes producidas por la operación de los filtros de Kirsch 𝐷0 , 𝐷1 , . . . , 𝐷7 son producidas
de la siguiente manera:

𝐷0 = 𝐼 ∗ 𝐻0𝐾 𝐷1 = 𝐼 ∗ 𝐻1𝐾 𝐷2 = 𝐼 ∗ 𝐻2𝐾 𝐷3 = 𝐼 ∗ 𝐻3𝐾 6.18

𝐷4 = −𝐷4 𝐷5 = −𝐷1 𝐷6 = −𝐷2 𝐷7 = −𝐷3


La magnitud del gradiente, la cual puede concebirse como una composición de todas las
imágenes producto de los filtros de Kirsch, se calcula en el píxel (𝑥, 𝑦) como el máximo de los
valores de las imágenes obtenidas por la operación de cada uno de los 8 filtros. Por lo que el
valor de la magnitud del gradiente para el píxel (𝑥, 𝑦) queda definido como:

𝐸𝐾 (𝑥, 𝑦) = 𝑚𝑎𝑥(𝐷0 (𝑥, 𝑦), 𝐷1 (𝑥, 𝑦), . . . , 𝐷7 (𝑥, 𝑦))


6.20
= 𝑚𝑎𝑥(|𝐷0 (𝑥, 𝑦)|, |𝐷1 (𝑥, 𝑦)|, . . . , |𝐷3 (𝑥, 𝑦)|)

La dirección del gradiente queda determinada por el filtro que aporta el máximo en el cálculo
de la magnitud del gradiente. Por lo que la dirección del gradiente queda especificada por:
𝜋
𝜙 𝐾 (𝑥, 𝑦) = 𝑙 donde 𝑙 = 𝑎𝑟𝑔𝑚𝑎𝑥 (𝐷𝑖 (𝑥, 𝑦)) 6.21
4 0≤𝑖≤7

En términos prácticos, las ventajas de los resultados ofrecidos por los operadores complejos
(como el operador Kirsch) apenas son perceptibles en comparación con operadores más
simples como el Sobel. Quizá una ventaja interesante de este operador sea el hecho de no
necesitar el cálculo de la raíz cuadrada para la determinación de la magnitud del gradiente (al
emplear en su lugar el máximo), lo cual puede representar una ventaja cuando se dispone de
recursos de cómputo limitados.

6.4. DETECCIÓN DE BORDES CON MATLAB


Teniendo como fundamento teórico las secciones anteriores, presentaremos en esta sección
la manera en la cual podemos utilizar las herramientas de MatLAB para el cálculo de los
bordes de una imagen. Estas herramientas pueden ir desde la simple utilización de MatLAB
como lenguaje de programación (archivo de extensión .m) hasta la utilización de los módulos
de Simulink de procesamiento de imagen y visión artificial.

6.4.1. Utilización de MATLAB como lenguaje de programación para encontrar


bordes
MATLAB es conocido como un poderoso lenguaje de programación de alto nivel que permite
manipular de forma matricial expresiones matriciales, lo cual lo hace altamente atractivo para
la programación de aplicaciones de procesamiento digital de imágenes. Para generar
programas que permitan encontrar bordes de una imagen utilizando alguno de los operadores
Sobel, Prewitt, Roberts o Kirsch, es necesario dividir el programa en 3 partes.
8
Figura 6.9 Proceso de codificación para la determinación de la magnitud del gradiente utilizando el
operador Sobel
En la primera parte es necesario generar una imagen por filtro, normalmente estos son dos
(por lo cual habrá dos imágenes), en cada uno, corresponden a las diferentes direcciones
sobre las cuales está definido el operador (véase la ecuación 6.4). En esta parte, el filtro en
cada una de las direcciones se convoluciona de forma separada con la imagen original, dando
como resultado la magnitud del gradiente en la dirección definida para ese filtro en particular.
La figura 6.9 muestra este proceso considerando como operador el Sobel.
En la segunda parte se obtiene la magnitud del gradiente a partir de las imágenes resultantes
del proceso de convolución entre el filtro (ya sea horizontal o vertical) y la imagen (véase
ecuación 6.5).
En la tercera parte se fija un umbral 𝑈 que caracteriza el valor a partir del cual se considera
que el píxel en cuestión forma parte de un borde, lo que de manera natural define las
propiedades estructurales de los objetos.
El programa 6.1 muestra la codificación en MATLAB para la determinación de los bordes en
una imagen considerando como operador el de Sobel.

% Determinación de los Bordes de una imagen utilizando el operador Sobel


% Autor: Erick Cuevas, Daniel Medina y Marco Pérez
% Versión: 2010

% Se obtienen los valores de la imagen


[filas, columnas] = size(Imagen);

% Se convierte la imagen a tipo de datos double para evitar problemas


Imagen = double(Imagen);

9
% Se crean las matrices con ceros para almacenar los gradientes
Gx = zeros(size(Imagen));
Gy = zeros(size(Imagen));

% Primera parte: Se aplican los filtros Sobel


for i = 2:filas-1
for j = 2:columnas-1
Gx(i,j) = Imagen(i-1,j-1) - Imagen(i-1,j+1) + 2*Imagen(i,j-1) -
2*Imagen(i,j+1) + Imagen(i+1,j-1) - Imagen(i+1,j+1);
Gy(i,j) = Imagen(i-1,j-1) + 2*Imagen(i-1,j) + Imagen(i-1,j+1) - Imagen(i+1,j-
1) - 2*Imagen(i+1,j) - Imagen(i+1,j+1);
end
end

% SEGUNDA PARTE
% Se calcula la magnitud del gradiente
% (véase ecuación 6.11)
Gt = sqrt(Gx.^2 + Gy.^2);

% Se obtiene el valor máximo de la magnitud del gradiente


VmaxGt = max(max(Gt));

% Se normaliza el gradiente
GtN = (Gt / VmaxGt) * 255;

% Se convierte la imagen a tipo de datos uint8


GtN = uint8(GtN);

% TERCERA PARTE
% Se binariza la imagen, utilizando un umbral de 100
B = GtN > 100;

% Se obtienen los valores mínimos de Gx y Gy


VminGx = min(min(Gx));
VminGy = min(min(Gy));

% Se normaliza Gx y Gy
GradOffX = Gx - VminGx;
GradOffY = Gy - VminGy;

% Se obtienen los valores máximos de GradOffX y GradOffY


VmaxGx = max(max(GradOffX));
VmaxGy = max(max(GradOffY));

% Se normalizan GradOffX y GradOffY


GxN = (GradOffX / VmaxGx) * 255;
GyN = (GradOffY / VmaxGy) * 255;

% Se convierten a tipo de datos uint8


GxN = uint8(GxN);
GyN = uint8(GyN);
10
6.4.2. Funciones de MATLAB para la detección de bordes

El toolbox de procesamiento de imágenes de MATLAB implementa diversas técnicas


operacionales relacionadas con la detección de bordes, como los operadores Sobel,
Prewitt y Roberts. Cada uno de estos operadores tiene su propia especificidad en
términos de sensibilidad y tipo de borde detectado. La elección del operador depende
del tipo de filtro que se desea calcular, lo cual implica indicar la sensibilidad bajo la
dirección en la que se realiza el cálculo del gradiente, ya sea horizontal, vertical o
ambos.

La sintaxis de la función de manera generalizada sería:

[g t]= edge(f, ‘método’, parámetros )

Donde f es la imagen a la cual se le pretenden extraer los bordes, 'método' es uno de


los operadores listados en la Tabla 6.1, y parámetros son las especificaciones que
deben configurarse dependiendo del tipo de método utilizado y que serán explicados
individualmente para cada operador. La salida g es una imagen binaria donde los
píxeles pertenecientes a los bordes detectados de f tienen el valor de 1, mientras que
los que no tendrán un valor de cero. El parámetro t es opcional y representa el umbral
utilizado para determinar cuál valor del gradiente puede ser considerado como borde.

Operador Método Filtro


−1 0 1 −1 −1 −1
𝐻𝑥𝑃 = [−1 𝑃
0 1] 𝐻𝑦 = [ 0 0 0]
Prewitt prewitt −1 0 1 1 1 1

−1 0 1 −1 −2 −1
𝐻𝑥𝑆 = [−2 0 2] 𝐻𝑦𝑆 = [ 0 0 0]
Sobel sobel −1 0 1 1 2 1

0 1 1 0
Roberts roberts 𝐻1𝑅 = [ ] 𝐻2𝑅 = [0 1]
−1 0

[Link]. El operador Sobel


El operador Sobel utiliza los filtros descritos en la Tabla 6.1 para aproximar las
derivadas parciales 𝜕𝐼/𝜕𝑢 y 𝜕𝐼/𝜕𝑣. De la combinación de esas derivadas parciales
según la ecuación 6.5, obtenemos para cada píxel (𝑢, 𝑣) un valor del gradiente.
Entonces, se dice que un píxel (𝑢, 𝑣) corresponde a un borde de la imagen si el valor
de su gradiente es mayor a un umbral U preestablecido como criterio. La llamada
general a la función de detección de bordes que implementa el toolbox de
procesamiento de imágenes bajo el método Sobel es:

[g t]= edge(f, ‘sobel’, U, dir )

Donde f es la imagen a la cual se le pretenden extraer los bordes. T es un


umbral que se especifica como criterio de magnitud del gradiente para clasificar
a los bordes. 'dir' selecciona el filtro a utilizar, el cual puede ser 'horizontal' si
11
se utiliza 𝐻𝑥𝑆 o 'vertical' si se utiliza 𝐻𝑦𝑆 , la opción por defecto es utilizar como
criterio de gradiente el cálculo que se genera a partir del cálculo de ambos
filtros, lo cual en todo caso quedará especificado como 'both'. Como respuesta
a la llamada de la función obtenemos la imagen g, que como se dijo
anteriormente, contiene los bordes detectados. Al ser la imagen binaria, esto
se refleja por aquellos píxeles que tienen el valor de 1 (bordes), mientras que
los que son ceros representan aquellos que no son bordes. Si el umbral u es
especificado, entonces t=U. Si u no se especifica, el algoritmo determina uno
automáticamente y lo utiliza para la detección de bordes, y a su vez, devuelve
su valor en t.

[Link]. OPERADOR PREWITT

El operador Prewitt utiliza para la detección de bordes las matrices de


coeficientes especificadas en la tabla 6.1. La sintaxis general de la función edge
utilizando este método es:

[g t]= edge(f, ‘prewitt’, U, dir )

Los parámetros de esta función son idénticos a los indicados en el caso Sobel.
El operador Prewitt es un poco más simple (computacionalmente hablando) de
ser implementado con relación al caso Sobel. Sin embargo, los resultados
obtenidos son un poco más ruidosos, ya que, en el caso de Sobel, de acuerdo
con los coeficientes implementados en sus filtros, realiza un suavizado sobre
los datos, lo cual puede ser observado en los coeficientes con valor 2 en el
renglón o columna del píxel sobre el cual se desea calcular el gradiente.

[Link]. OPERADOR ROBERTS

El operador Roberts utiliza los filtros definidos en la tabla 6.1 para aproximar el
cálculo del gradiente en el píxel (𝑢, 𝑣). La llamada general a la función edge
con este método es:

[g t]= edge(f, ‘roberts’, U, dir )

Los parámetros de esta función son idénticos a los descritos en el caso del
operador Sobel. El operador Roberts representa uno de los métodos más
antiguos para el cálculo del gradiente en imágenes. Aunque este método es
más sencillo de implementar, tiene una limitación funcional, ya que al ser no
simétrico no puede detectar bordes que se encuentren direccionalmente en
múltiples posiciones de 45º. A modo de comparación, la figura 6.10 muestra el
resultado de aplicar las diferentes funciones para detectar bordes en una
imagen, utilizando el mismo umbral para todos los casos.

6.4.3. Utilización de los Bloques de Procesamiento de Imagen y Vídeo de


Simulink.

Los bloques de procesamiento de imagen y vídeo de Simulink implementan la función


de detección de bordes en una imagen o bien en una señal de vídeo proveniente de
un archivo o una cámara conectada a la computadora

12
Figura 6.10 Comparación de los diferentes operadores utilizados para la detección de bordes,
utilizando la función edge de MatLAB. (a) Imagen original, (b) hordes detectados por el operador
Sobel, (c) Prewitt y (d) Roberts. En todos los casos se utilizó un umbral=0.02
Los bloques implementados de procesamiento de imágenes y vídeo para trabajar en un
ambiente de Simulink permiten realizar operaciones directamente sobre imágenes o vídeos,
interconectando bloques como es la filosofía en Simulink, para llevar a cabo el procesamiento
indicado sobre las imágenes. En el caso de detección de bordes, la librería de Simulink
implementa el bloque 'Edge Detection', el cual permite encontrar los bordes de una imagen o
de frames de vídeo, utilizando para ello los operadores Sobel, Prewitt y Roberts mencionados
anteriormente en este capítulo. La Figura 6.11 muestra el bloque 'Edge Detection' de Simulink.

Figura 6.11 Bloque para la detección de bordes en imágenes o frames de video, como parte de la
librería de procesamiento de imagen y video de Simulink. El operador por defecto de este bloque es el
Sobel

La máscara principal de este bloque, la cual aparece en la figura 6.12, permite


configurar cuatro aspectos importantes:

1. El método, el cual se refiere al operador utilizado para aproximar el valor del


gradiente de la imagen. Dicho operador puede ser el Sobel, Prewitt o Roberts,
cuyas generalidades ya fueron discutidas anteriormente en este capítulo.

13
2. La imagen de salida, donde se especifican 3 diferentes opciones: a) Binary
image: Especificando esta opción, estamos estableciendo que, como salida de
este bloque, tendremos la imagen binaria donde el píxel en uno corresponde al
borde, mientras que los píxeles en cero corresponden a puntos no-bordes. b)
Gradient components: Con esta opción, aparecerán realmente dos salidas (Gh
y Gv) en el bloque, las cuales corresponden a las salidas provocadas por cada
uno de los filtros de los que se componen cada uno de los operadores, que son
las imágenes de los gradientes en cada una de las dos direcciones. c) Binary
image and Gradient components: Con esta opción, aparecerán tres diferentes
salidas en el bloque, las cuales corresponderán a la imagen que contiene los
bordes (la imagen binaria), las imágenes correspondientes a cada una de las
direcciones del gradiente (Gh, Gv).
3. El valor del umbral, el cual especifica el valor a partir del cual el gradiente de
un píxel es considerado como un borde en la imagen. Para poder definir este
valor, habrá que señalar la opción "User-defined threshold".
4. Ancho del borde, Con esta opción, el usuario puede definir los bordes que son
muy anchos para reducirlos a un solo píxel. Esta opción es particularmente
atractiva para aumentar la legibilidad de la imagen obtenida."

Figura 6.12 Mascarilla principal del bloque “Edge Detection”, desglosada por los campos de
configuracion

[Link]. Utilización de los Bloques de Procesamiento de Imagen y Vídeo de


Simulink para la Determinación de Bordes de una Imagen
Para encontrar los bordes de una imagen utilizando la librería de bloques para
el procesamiento de imagen y vídeo de Simulink, lo único que hay que hacer
es colocar en el modelo los bloques necesarios para la lectura de la imagen,
para la conversión de RGB (en caso de que la imagen tenga ese formato de
color) a escala de grises, para la detección de bordes y para el despliegue de
imagen resultado. La figura 6.13 muestra un ejemplo de modelo Simulink para
la determinación de bordes en una imagen, utilizando el operador Prewitt.

Figura 6.13 Proceso para encontrar los bordes de una imagen, utilizando las
librerías de bloques para el procesamiento de imagen y video de Simulink. En el
ejemplo se utiliza como operador que aproxima el valor del gradiente el Prewitt

14
Como muestra la Figura 6.13, el sistema consta de diferentes bloques.
El primero, "Image From File", permite tomar una imagen de un
archivo. Dado que esta imagen está en formato RGB, es necesario
convertirla a una imagen de intensidad (escala de grises). La
operación de conversión de una imagen RGB a escala de grises u
otros modelos de color es realizada por el bloque "Color Space
Conversion". Una vez disponible la imagen en escala de grises, se
utiliza el bloque "Edge Detection", el cual se configura tal y como se
trató en el apartado anterior. Específicamente en la Figura 6.12 se
utilizó como operador el Prewitt. Por último, el resultado de la imagen
binaria obtenida del bloque "Edge Detection" se despliega en la
consola con el bloque "Video Viewer".

Un aspecto importante, además de la configuración individual de cada


uno de los bloques, es la configuración del ambiente Simulink para que
el sistema sea capaz de realizar el algoritmo de procesamiento de la
imagen. Como es conocido, Simulink es un ambiente que
originalmente fue concebido para la simulación de sistemas
dinámicos, por lo que para que pueda funcionar adecuadamente para
el procesamiento de imágenes es necesario realizar lo siguiente en la
opción Simulation>Configuration Parameters:

1. El tiempo inicial (Start time) y final (Stop time) deben ser


configurados a cero. Esto es porque se trata de realizar el
procesamiento completo de una imagen una sola vez, por lo que
el tiempo no tiene significación.
2. En las opciones del método numérico, se configura el tipo (Type)
a "Fixed-step", mientras que en la configuración del método
numérico (Solver) se elige "Discrete no continuous status". La
Figura 6.14 muestra la forma final de la configuración de los
parámetros de simulación

Figura 6.14 Muestra la forma final de la configuración de los parámetros de simulación

15
Una vez establecido el sistema de procesamiento como se muestra en
la Figura 6.13 y configurado el ambiente, se procede a establecer el
procesamiento de la imagen. Para ello, sólo es necesario pulsar el
botón de inicio, a partir del cual iniciará la operación del algoritmo
programado. La Figura 6.15 muestra el resultado de la utilización del
bloque "Edge Detection" sobre una imagen utilizando el operador
Prewitt y un umbral de 0.2.

Figura 6.15 resultado de utilizar el bloque de detección de bordes sobre una imagen
utilizando Prewitt y un umbral de 0.2Principio del formulario

Otra opción para detectar los bordes de una imagen es programar directamente
los filtros correspondientes al operador en cuestión en Simulink, tal como se
describen en la tabla 6.1. Sin embargo, esto implicaría un trabajo adicional, ya
que la idea sería programar lo que ya está implementado internamente en el
bloque "Edge Detection". Aunque esto pueda parecer redundante, el hecho de
programar directamente las estructuras podría ser un ejercicio interesante de
programación en Simulink y permitiría ganar flexibilidad en la utilización de
operadores, pudiendo así programar otros filtros utilizados para la detección de
bordes que no estén implementados en el bloque "Edge Detection", como por
ejemplo el filtro Kirsch (véase la subsección 6.3.3). Esta sección es importante
ya que representa el desarrollo de una estructura de programa de Simulink
estándar utilizada en este libro, no solo para la detección de bordes, sino
también para otras aplicaciones donde se utiliza el filtrado espacial.

Para llevar a cabo el programa en Simulink que determine los bordes de una
imagen mediante la programación directa del operador, es necesario describir
la utilización de algunos bloques funcionales que forman parte de la librería de
bloques para el procesamiento de imágenes y vídeo.

[Link]. IMAGE FROM WORKSPACE


Este bloque permite agregar al algoritmo de procesamiento una matriz o
imagen constante definida previamente desde la consola de comandos de
MATLAB. La figura 6.16 muestra el bloque tal como se representa en Simulink.
La configuración de este bloque permite definir el nombre de la variable tal
como fue declarada en la línea de comandos.

16
Figura 6.16 Bloque de Simulink para añadir una matriz o imagen al algoritmo de
procesamiento de imagen. El bloque por defecto inicializa con una imagen predefinida, tal y
como se muestra

[Link]. 2-D CONVOLUCIÓN

El bloque "2-D convolution" realiza la convolución de dos matrices. Suponiendo


que la matriz A tiene dimensiones (𝑀𝑎 , 𝑁𝑎 ) y la matriz B tiene dimensiones
(𝑀𝑏 , 𝑁𝑏 ), cuando el bloque calcula la convolución, lo hace utilizando la siguiente
ecuación:

(𝑀𝑎 −1) (𝑁𝑎 −1)

𝐶(𝑖, 𝑗) = ∑ ∑ 𝐴(𝑚, 𝑛) ∗ 𝐵(𝑖 − 𝑚, 𝑗 − 𝑛) 6.22


𝑚=0 𝑛=0

donde 0 ≤ 𝑖 < 𝑀𝑎 + 𝑀𝑏 − 1 y 0 ≤ 𝑗 < 𝑁𝑎 + 𝑁𝑏 − 1. La figura 6.17 muestra el


esquema del bloque en Simulink. Asimismo, en la tabla 6.2 se describe la funcionalidad
entrada/salida de sus conexiones. Tal como se vio en la sección 5.5.1, la convolución
puede considerarse como una operación de filtro normal (correlación) con la excepción
de que la matriz 𝐻(𝑖, 𝑗) de coeficientes debe ser invertida en sus ejes coordenados
𝐻(−𝑖, −𝑗), lo cual puede llevarse a cabo mediante una rotación de 𝐻(𝑖, 𝑗) en 180°.

Figura 6.17 Bloque de la librería para el procesamiento de imagen y video de Simulink para
realizar la convolución espacial entre dos matrices, normalmente una imagen y una ventana
donde se encuentra contenido la funcionalidad del filtro

Conexión Descripción
11 Matriz o una imagen a escala de grises, o bien un
plano de la imagen RGB.
12 Matriz, o venta de convolución, normalmente no
simétrica
Salida Una imagen o matriz resultado de la convolución
de 11 y 12.
Tabla 6.2 Funcionalidad de las entradas/salidas del bloque “2D – Convolution “

El bloque tiene la funcionalidad de determinar la coherencia de los puntos entre un


tubo y un bloque en la funcionalidad del bloque que se encarga de determinar la
dirección de la corriente, generando así una salida con la polaridad de acuerdo con el
tipo de entrada.

17
Las dimensiones de la matriz o imagen de salida se determinan mediante el
parámetro de configuración "Output Size". Suponiendo que las dimensiones de
la conexión 11 son (Ma, Na) y que las dimensiones de la conexión 12 son (Mb,
Nb). Si se elige el parámetro de configuración "Output Size" como Full, la salida
es la imagen producida por la convolución de 11 y 12, con dimensiones
(Ma+Mb-1, Na+Nb-1). En cambio, si se elige el parámetro de configuración
"Output Size" como same as input port 11, la salida es la parte central de la
convolución entre 11 y 12, omitiendo las partes laterales o bordes de la imagen
o matriz resultado de la convolución completa, por lo tanto, las dimensiones de
la matriz o imagen resultado son las mismas que las de 11. Por último, el
parámetro de configuración "Output Size" también puede tener el valor de valid,
con lo que la imagen o matriz de salida será el resultado de la convolución entre
11 y 12 sin considerar añadir ceros en los bordes de la matriz 11, de manera
que se pueda realizar la multiplicación de los coeficientes de 12.

En la convolución, el valor de un elemento de la salida se calcula como la suma


de las multiplicaciones de los elementos vecinos. Por ejemplo, supongamos
que la primera matriz del bloque I1 está definida como:
2 3 1 3
𝐼1 = [6 7 2 1]
5 6 1 0 6.23
5 4 8 1

La segunda matriz de entrada al bloque 12, que normalmente


representa la ventana que define la matriz de coeficientes y las
vecindades tomadas en cuenta para el cálculo de los elementos de
salida de la convolución, se define como:
6.23
2 1 2
𝐼2 = [3 2 4] 6.24
4 1 2

Considerando estas dos matrices, el proceso para calcular el elemento


(2,2) de la salida resultado de la convolución entre I1 y I2 es el
siguiente:

1. Tal como se observa en la ecuación 6.21, se rota la matriz I2 180° con


respecto a su punto central.

2. Se desplaza el elemento central de la matriz I2 rotada de tal forma que su


elemento central coincida con el elemento (2,2) de la matriz I1.
3. Se multiplica cada elemento de la matriz 12 rotada por los elementos con los
que coinciden de la matriz I2, que se encuentra debajo de ella.

18
4. Se suman los productos individuales del paso 3 para calcular el valor total de
(2,2). La figura 6.18 muestra un esquema de cómo se desarrolla el
procesamiento de la convolución para el elemento (2,2), considerando como
I1 y I2 las matrices anteriormente descritas.
[Link]. PROGRAMACIÓN DIRECTA DEL ALGORITMO PARA LA
LOCALIZACIÓN DE BORDES EN SIMULINK
Para realizar la programación directa del algoritmo de detección de bordes
utilizando el bloque "Edge Detection", es necesario solamente considerar la
aplicación directa de un operador de la tabla 6.1 sobre la imagen generada por
la operación de cada filtro (dependiendo de la dirección sobre la cual se
encuentre el gradiente), una matriz que represente al gradiente en esa
dirección (𝐺𝑥 , 𝐺𝑦 ).

Figura 6.18 Representación de la convolución realizada entre las matrices I1 e I2,


considerando que se calcula el elemento (2,2), según el proceso anteriormente
tratado. Del proceso puede notarse como la ventana de convolución, la cual
normalmente es utilizada para realizar un procesamiento espacial en la imagen, debe
ser rotada 180° antes de realizar la multiplicación
Teniendo ambas matrices, obtenemos el gradiente total, el cual puede ser
calculado a partir de la ecuación 6.5. Sin embargo, otra opción que incluso tiene
un costo computacional menor sería:
𝐺𝑇𝑜𝑡𝑎𝑙 = |𝐺𝑥 | + |𝐺𝑦 | 6.25

La figura 6.19 muestra el programa en Simulink realizado para la detección de


bordes en una imagen.

Figura 6.19 Programa en Simulink para detectar los bordes en una imagen sin
utilizar el bloque "Edge Detection". Las matrices A y B, representan los filtros que se
aplican dependiendo del operador utilizado para encontrar el gradiente
19
Tal y como se muestra en la figura 6.19, las matrices A y B representan los
filtros del operador utilizado como una forma de aproximar el gradiente. En el
caso del ejemplo presentado aquí, se escogió el operador Sobel. Considerando
esto, las dimensiones y los coeficientes de las matrices que conforman sus
filtros están indicadas en la tabla 6.1. Es importante destacar que las matrices
A y B deben ser definidas desde la consola de MATLAB, para que desde allí
puedan ser tomadas por Simulink. Sin embargo, como se explicó
anteriormente, para el cálculo de los elementos de la convolución entre dos
matrices, utilizando el bloque "2-D Convolution", la matriz B, que normalmente
corresponde a la rejilla que determina el procesamiento espacial de la imagen,
es rotada 180º (como se ve en la ecuación 6.22) antes de realizar su
procesamiento. Por lo tanto, debemos tener en cuenta este efecto al momento
de definirla desde la línea de comandos en MATLAB, para que cuando sea
rotada, esta operación no afecte la definición de la matriz. Para el ejemplo aquí
mostrado, al utilizar el operador Sobel, se tiene:

>>A = [-1 0 1; -2 0 2; -1 0 -1]; % Este filtro corresponde a 𝐻𝑥𝑆

>>B = [-1 -2 -1; 0 0 0; 1 2 1]; % Este filtro corresponde a 𝐻𝑦𝑆

>>A = -A; % Se cambia A para que cuando sea rotada corresponda a


𝐻𝑥𝑆

>>B = -B; % Se cambia B para que cuando sea rotada corresponda a


𝐻𝑦𝑆
Por último, se obtiene el valor del gradiente total según la ecuación 6.11 y se
le aplica un umbral de 0.4. Con esto, se seleccionan como bordes los píxeles
de la imagen cuyo gradiente sea igual o mayor a ese valor. La figura 6.20
muestra el resultado de haber ejecutado el programa de la figura 6.19.

Figura 6.20 Imagen Original y resultado, como consecuencia de haber ejecutado el programa
definido de la figura 6.18

Es importante también indicar que ambos bloques que desempeñan la


convolución con los filtros Sobel son configurados a same as input port I1 en
su parámetro "Output Size". Con ello hacemos que el resultado de la
convolución coincida con las dimensiones de la imagen original definida en I1.

20
[Link]. [Link] UTILIZACIÓN DE LOS BLOQUES DE PROCESAMIENTO DE
IMAGEN Y VÍDEO DE SIMULINK® PARA LA DETERMINACIÓN DE
BORDES EN FRAMES DE VÍDEO
Para utilizar la librería de bloques de procesamiento de imágenes y vídeo de
Simulink para procesar vídeo, se aplican todas las observaciones realizadas
para el caso del procesamiento de imagen, es decir la funcionalidad de los
bloques no cambia. Sin embargo, lo que si es necesario considerar es que el
procesamiento de vídeo es un proceso iterativo, en el cual un procesamiento o
algoritmo se ejecuta sobre el frame (una imagen de varias) de vídeo entrante,
continuando este proceso indefinidamente. A consecuencia de ello es
necesario configurar el ambiente de simulación, de tal forma que el algoritmo
se ejecute continuamente conforme existan frames de vídeo disponibles.

Dicha configuración es llevada a cabo con solo colocar el tiempo final o "Stop
time" de la opción Simulation>Configuration Parameters a inf, la figura 6.21
muestra la pantalla de los parámetros de configuración de la simulación y el
valor ya configurado.

Figura 6.21 Pantalla de configuración de parámetros de la simulación con los parámetros


ajustados para el procesamiento de video utilizando la librería de bloques para el
procesamiento de imágenes y video de Simulink

Para poder procesar frames de video lo primero que hay que tener como
entrada es una fuente de video que permita obtener imágenes y a partir de ellas
procesarlas. Una opción interesante seria poder captar imágenes a partir de
una fuente de video de bajo costo como lo sería una Webcam.
Para poder captar imágenes a partir de una Webcam MatLAB provee un bloque
parte de las librerías contenidas en el Toolbox de Adquisición de Imágenes. El
bloque es accesible desde Simulink y permite capturar frames de una Webcam,
con el solo hecho de estar instalado su driver.
El bloque se encuentra representado en la figura 6.22, en ella pude apreciarse
como se trata de un bloque cuya funcionalidad es completamente destinada a
fungir como una fuente de imágenes provenientes en este caso de la Webcam.

21
Figura 6.22 Bloque "From Video Device" parte de la librería del Toolbox de Adquisición de
Imágenes. Permite capturar imágenes de un dispositivo de video compatible con Windows, tal
como una Webcam

Para poder utilizar este bloque es necesario configurarlo de tal forma que pueda
ser capaz de conectarse con el dispositivo de video (tal como la Webcam). Para
ello en su mascarilla de configuración es necesario seleccionar el concepto
"Device" la opción winvideo, la cual hará posible que el bloque pueda ser capaz
de comunicarse con el driver del dispositivo de video, en este caso con la
Webcam. La figura 6.23 muestra la ventana de configuración del bloque "From
Video Device" y el valor seleccionado para poder utilizar a la Webcam como
fuente de vídeo.

Figura 6.23 Muestra la ventana de configuración del bloque "From Video Device" y el valor
seleccionado para poder utilizar a la Webcam como fuente de video. Como puede verse en la
figura entre paréntesis se señala el nombre de la Webcam que en ese momento se encuentra
conectada y disponible para ser utilizada

Para ejemplificar la utilización de los bloques de la librería de procesamiento


de imagen y video de Simulink, tomaremos de nueva cuenta el programa
presentado en la Figura 6.19, con sus respectivas modificaciones, esto es
22
habiendo modificado el "Stop time" a inf y colocado como fuente de vídeo el
bloque "From Video Device" de la librería del Toolbox de Adquisición de
Imágenes configurado para adquirir imágenes de la Webcam.
La figura 6.24 muestra el diagrama del algoritmo para la detección de bordes
en Simulink procesando frames de video. Cabe mencionar que el valor de las
matrices A y B son los mismos (operador Sobel) que los utilizados para el caso
del procesamiento de una imagen individual. La única diferencia es que en este
caso el valor del umbral escogido para la selección del borde es de 0.2.

Figura 6.24 Muestra el diagrama del algoritmo para la detección de bordes en Simulink
procesando frames de video. El diagrama es igual al utilizado para encontrar los bordes de la
imagen, con la diferencia de que en este se incorpora el bloque "From Video Device" para
adquirir imágenes de la Webcam y el umbral utilizado para la detección del borde es de 0.2

En la figura 6.25 se muestra el resultado de haber ejecutado el programa en


Simulink de la figura 6.24.

Figura 6.25 Resultado de haber ejecutado el programa en Simulink mostrado en la Figura

6.5. Operadores basados en la segunda derivada


Tal y como fueron descritos en la sección 6.2 el grupo de operadores basados en la
primera derivada, como forma de aproximar el gradiente de la imagen, existen otros
tipos de operadores los cuales se fundamentan en la segunda derivada de la función

23
de la imagen. En una imagen, los cambios de intensidad pueden ser calculados
mediante el valor de la derivada en una determinada dirección (gradiente máximo) o
mediante el paso por cero de la segunda derivada (Laplaciano) en cualquier dirección.
Como puede verse el problema de utilizar la primera derivada como enfoque para la
detección de bordes resulta en la difícil localización de este al representar un método
altamente direccional o bien cuando el borde no esté bien definido.
Aunque el valor del gradiente permite detectar un borde, en ocasiones es importante
tener la información sobre si el píxel está en la transición positiva o negativa del
gradiente, que equivaldría a conocer si el píxel está del lado oscuro o de luz del borde.
6.5.1. Detección de bordes mediante la técnica de la segunda derivada
La técnica se basa en encontrar lo que se denomina pasos por cero (zero- crossing).
Un paso por cero no es más que la transición de positivo a negativo o viceversa y es
estimado a partir de la segunda derivada.
Si la definición de derivada para una función unidimensional puede ser considerada
como:
𝜕𝑓
= 𝑓(𝑥 + 1) − 𝑓(𝑥) 6.26
𝜕𝑥
Asimismo, partir de la ecuación 6.26 puede decirse que la segunda derivada se define
como:
𝜕𝑓 2
= 𝑓(𝑥 + 1) − 2𝑓(𝑥) + 𝑓(𝑥 − 1) 6.27
𝜕𝑥 2
Como fue mencionado la detección de bordes mediante la segunda derivada se basa
en el paso por cero del valor del gradiente en cualquier dirección, dicha característica
de hacer a este método insensible a la rotación es llamada isotrópica.
El operador Laplaciano es un filtro isotrópico definido por la siguiente expresión:
𝜕 2 𝐼(𝑥, 𝑦) 𝜕 2 𝐼(𝑥, 𝑦)
𝛻 2 𝐼(𝑥, 𝑦) = + 6.28
𝜕𝑥 2 𝜕𝑦 2
Este filtro al utilizar derivadas es lineal. Considerando la ecuación 6.27 en la expresión
6.28 del Laplaciano se tiene:
𝜕 2 𝐼(𝑥, 𝑦)
= 𝐼(𝑥 + 1, 𝑦) − 2𝐼(𝑥, 𝑦) + 𝐼(𝑥 − 1, 𝑦) 6.29
𝜕𝑥 2
Y
𝜕 2 𝐼(𝑥, 𝑦)
= 𝐼(𝑥, 𝑦 + 1) − 2𝐼(𝑥, 𝑦) + 𝐼(𝑥, 𝑦 − 1) 6.30
𝜕𝑦 2
Por lo que, si se juntan las expresiones 6.29 y 6.30 para formar 6.28, se tiene:
𝛻 2 𝐼(𝑥, 𝑦) = 𝐼(𝑥 + 1, 𝑦) + 𝐼(𝑥 − 1, 𝑦) + 𝐼(𝑥, 𝑦 + 1) + 𝐼(𝑥, 𝑦 − 1) − 4𝐼(𝑥, 𝑦) 6.31

Si se expresara la ecuación anterior en términos de un filtro que se pudiera utilizar


para el procesamiento espacial de una imagen éste quedaría definido por el mostrado
en la figura 6.26.

24
Figura 6.26 Filtro que representa el cálculo del Laplaciano de forma espacial
sobre una imagen, obtenido a partir de la ecuación 6.27

Figura 6.27 Filtro del Laplaciano con la extensión de los vecinos diagonales al
píxel central
Un ejemplo de la aplicación del filtro Laplaciano sobre una imagen en escala de grises
es mostrado en la figura 6.28. En ella se muestran los diferentes efectos de aplicar la
doble derivada en cada una de las direcciones y por último el resultado de la suma de
las dos tal y como es definido el Laplaciano. La ecuación definida en 6.28 y expresada
en forma de filtro en la figura 6.26 no contempla las variaciones en los vecinos
diagonales al píxel en cuestión, los cuales pueden incorporarse al filtro, con la
consideración de que al hacer esto aumentaremos en 4 el número de unos contenidos
en el filtro por ello habrá que aumentar el coeficiente central a 8. Considerando lo
anterior el filtro Laplaciano quedaría definido tal como se describe en la figura 6.27.

Como puede observarse del cálculo de los filtros Laplacianos, tienen una respuesta
de cero en regiones en escala de grises uniformes y diferentes para regiones con
escalas de grises variantes. Esto es debido a que este tipo de filtros se comportan
como filtros pasa altas, la suma de los coeficientes es cero.

25
Figura 6.28 Utilización del filtro Laplaciano. (a) Figura original, (b) derivada
parcial de segundo orden horizontal 𝜕 2 𝐼(𝑥, 𝑦)/𝜕𝑥², (c) derivada parcial del
segundo orden vertical 𝜕 2 𝐼(𝑥, 𝑦)/𝑑𝑦² y (d) el operador Laplaciano 𝛻 2 𝐼(𝑥, 𝑦)
6.6. MEJORA DE NITIDEZ EN LAS IMÁGENES
Si se aplica el operador Laplaciano a una imagen obtendremos sus bordes. Sin
embargo, si lo que se desea es mejorar la nitidez de una imagen entonces lo que será
necesario hacer es conservar la información de baja frecuencia de la imagen original
y enfatizar los detalles presentes en la imagen a través del filtro Laplaciano. Para
realizar este efecto, es necesario restar a la imagen original una versión escalada del
valor del filtro Laplaciano. Por lo que la imagen con una nitidez mejorada quedaría
definida como se describe en la siguiente ecuación:
𝐼(𝑥, 𝑦)𝑀𝑒𝑗𝑜𝑟𝑎𝑑𝑎 = 𝐼(𝑥, 𝑦) − 𝑤 ∙ 𝛻 2 𝐼(𝑥, 𝑦) 6.32

La figura 6.29 muestra la idea por medio de la cual la imagen mejora en nitidez al
hacer más evidente la presencia de sus bordes. Para facilitar la explicación se
considera exclusivamente el caso unidimensional.

26
Figura 6.29 Aumento de la nitidez mediante la aplicación de la segunda derivada.
Al restar un factor de la segunda derivada a la función permite maximizar la
presencia de los contornos en la imagen
El efecto de mejorar la nitidez de una imagen se puede realizar en una sola pasada,
puesto que si se considera w=1, se tiene que
𝐼(𝑥, 𝑦)𝑀𝑒𝑗𝑜𝑟𝑎𝑑𝑎 = 𝐼(𝑥, 𝑦) − (1) ∙ 𝛻 2 𝐼(𝑥, 𝑦) 6.33

Y considerando que
𝛻 2 𝐼(𝑥, 𝑦) = 𝐼(𝑥 + 1, 𝑦) + 𝐼(𝑥 − 1, 𝑦) + 𝐼(𝑥, 𝑦 + 1) + 𝐼(𝑥, 𝑦 − 1) − 4𝐼(𝑥, 𝑦) 6.34

La figura 6.30 muestra la mejora de la nitidez de una imagen, utilizando a w=1.

Figura 6.30 Aplicación del filtro Laplaciano para la mejora de nitidez de una
imagen. (a) Imagen original y (b) la imagen resultado de aplicar
𝐼(𝑥, 𝑦)𝑀𝑒𝑗𝑜𝑟𝑎𝑑𝑎 = 𝐼(𝑥, 𝑦) − 𝑤 ∙ 𝛻 2 𝐼(𝑥, 𝑦), considerando w=1

Se tendría que
𝐼(𝑥, 𝑦)𝑀𝑒𝑗𝑜𝑟𝑎𝑑𝑎 = 5𝐼(𝑥, 𝑦) − [𝐼(𝑥 + 1, 𝑦) + 𝐼(𝑥 − 1, 𝑦) + 𝐼(𝑥, 𝑦 + 1) + 𝐼(𝑥, 𝑦 − 1)] 6.35

o bien expresado en un filtro, tendríamos que su matriz de coeficientes estaría definida


por
0 −1 0
𝐼(𝑥, 𝑦)𝑀𝑒𝑗𝑜𝑟𝑎𝑑𝑎 = [−1 5 −1] 6.36
0 −1 −1
6.6.1. Utilización de las herramientas de MatLAB para la implementación del
filtro Laplaciano y mejora de la nitidez de imagen
En esta sección se describe la utilización de las herramientas de MatLAB para mejorar
la nitidez de imágenes por considerarlo un ejercicio integrador, ya que para mejorar
una imagen es necesario calcular el Laplaciano y a partir del generar la mejora de la
imagen. En esta sección se revisará la forma de llevar a cabo esta tarea desde dos
perspectivas. La primera de utilizar a MatLAB como lenguaje de alto nivel,
programando así manualmente el cálculo del Laplaciano para después utilizarlo en la
mejora de la nitidez de la imagen. La segunda es utilizar las librerías de bloques para
el procesamiento de imágenes y vídeo de Simulink, de tal forma que las imágenes
cuya nitidez será mejorada sean tomadas de una Webcam
procesando los frames en tiempo real.

El código MatLAB para mejorar la nitidez de una imagen puede ser dividido en dos
sencillos pasos, en el primero se calcula el filtro Laplaciano a partir del filtro descrito
en la figura 6.27, en el segundo se mejora la nitidez de la imagen considerando la
información de baja frecuencia contenida en la imagen original menos el valor del
Laplaciano (véase ecuación 6.32) el cual incorpora la información que permite realzar
los detalles de la imagen.

27
El programa 6.2 muestra la codificación en MatLAB para la mejora de la nitidez de
una imagen mediante el uso del Laplaciano.

Programa 6.2 Mejora de la nitidez de una Imagen a través de la aplicación del


operador Laplaciano con MatLAB
Para poder generar a través de la utilización de la librería de bloques de
procesamiento de imagen y vídeo de Simulink un programa que permita mediante la
utilización del operador Laplaciano la mejora de la nitidez de frames de video
capturados de una Webcam, es necesario utilizar bloques cuya funcionalidad ya ha
sido tratada en este capítulo. La figura 6.31 muestra el programa realizado para este
fin en Simulink.

28
Figura 6.31 Programa que mejora la nitidez aplicando el operador Laplaciano de
las imágenes capturadas a través de la Webcam
Como puede notarse en este programa vuelve a hacerse uso del bloque "2- D
Convolution" el cual realiza el cálculo del Laplaciano de la imagen que es capturada
instantáneamente de la Webcam.

La imagen capturada por la cámara es transformada primero a escala de grises y


convertida al tipo de dato double a través del bloque "Image Data Type Conversión".
Una vez teniendo la imagen este formato es utilizado como entrada al bloque "2-D
Convolution" el cual convoluciona espacialmente esta imagen con el filtro Laplaciano
definido en a desde la consola de MatLAB. El filtro definido en a es el descrito en la
figura 6.27, el cual al ser isotrópico (no sensible a la rotación) no es necesario tener
ninguna consideración, ya que como fue explicado la matriz definida en 12 en este
bloque es rotada 180° antes de ser utilizada en la multiplicación por los coeficientes
de la imagen definida en 11. El valor de la puede de esta manera ser definido por la
línea de comandos por:

>> 𝐴 = [1 1 1; 1 − 8 1; 1 1 1];

El valor calculado del Laplaciano es multiplicado por un factor (0.5) que define la forma
en cómo este operador modificará a la imagen a la cual se desea mejorar su nitidez.
Después este valor es restado a la imagen original produciendo así a la imagen
mejorada. Un problema importante es que este operador como fue mencionado en la
sección 6.5 funciona como un filtro pasa altas, por lo que el ruido presente en la
imagen original es maximizado también, es por eso por lo que si se ejecuta este
programa se verá claramente como la nitidez de la imagen resultado mejora, sin
embargo, de la misma manera aparecerán algunos artefactos producto del ruido
propio del frames que se procesan. La figura 6.32 muestra el resultado de ejecutar el
programa en Simulink definido en la figura 6.31

29
Figura 6.32 Resultado de haber ejecutado el programa en Simulink mostrado en la
figura 6.31
6.7. EL FILTRO CANNY
Un conocido método para la detección de bordes en imágenes es el filtro de Canny.
Este método se basa en la aplicación de una serie de filtros en direcciones y
resoluciones diferentes, los cuales al final son combinados en un resultado único. El
método intenta alcanzar 3 diferentes objetivos, (a) minimizar el número de bordes
falsos, (b) una mejor localización de los bordes en la imagen y (c) entregar una imagen
cuyo ancho de borde es un píxel. El filtro de Canny es en esencia un filtro basado en
métodos de gradiente, pero, sin embargo, usa también para la localización de bordes
como criterio la segunda derivada o Laplaciano. La mayoría de las veces este
algoritmo es utilizado en su forma sencilla, es decir configurando solamente el
parámetro de suavizado 𝜎. La figura 6.33 muestra ejemplos de la aplicación de este
algoritmo utilizando para ello diferentes valores del parámetro 𝜎.

30
Figura 6.33 Algoritmo de Canny aplicado a una imagen (a) Imagen original, (b)
bordes de la imagen con 𝜎 = 0,1, (c) bordes de la imagen con 𝜎 = 1 y (d) bordes de
la imagen 𝜎 = 2
6.7.1. Herramientas de MatLAB que implementan el filtro de Canny.
Debido a la amplia utilización de este filtro como etapa previa en la segmentación y
clasificación de objetos y a su robustez en la determinación de bordes, el filtro es
normalmente implementado en la mayoría de las librerías comerciales y herramientas
de procesamiento digital de imágenes. En MatLAB el algoritmo de Canny puede ser
calculado mediante la función Edge, su formato general es

BW=edge(I, 'canny', U, sigma);

donde Bw es la imagen con los bordes extraídos a partir del algoritmo de Canny, I es
la imagen en escala de grises a la cual se le extraerán los bordes. U es el valor del
umbral a partir del cual los pixeles que tengan un gradiente mayor a éste serán
considerados candidatos para ser bordes y sigma, el cual es el parámetro (6) de
suavizado que tiene el efecto de minimizar el número de bordes falsos. También es
posible utilizar el algoritmo de Canny en las librerías de procesamiento de imagen y
video de Simulink, para ello sólo bastaría con configurar el bloque "Edge Detection",
indicándole (1) que se utilizara el método de Canny, (2) si se usara un umbral definido
por el usuario o no. (3) el porcentaje de los bordes que considerados falsos serán
eliminados y (4) el parámetro σ. La figura 6-34 muestra el bloque "Edge Detection" y
su mascarilla de configuración.

Figura 6.34 Bloque "Edge Detection" y su mascarilla de configuración

31

También podría gustarte