Chapter 5 Mejora y restauración de Imágenes

Anuncio
Chapter 5
Mejora y restauración de Imágenes
5.1
Introducción
DR
AF
T
En muchas ocasiones se necesita la mejora de la calidad de una imagen, porque su
adquisición no se reaizó con los parámetros adecuados, porque proviene de una transformación entre distintos tipos de imagen (escaneo de una fotografia o fotografı́a de una
pantalla de televisión, ...), porque es conveniente resaltar visualmente cierto tipo de informacón o porque conviene reparar los daños introducidos por un sistema de adquisición
imperfecto. A veces, también es necesario un proceso de optimización de la imagen antes
de realizar un procesado de la misma, llamado pre-procesado. La mejora de la imagen
posee aspectos tanto subjetivos como objetivos y puede considerarse como un conjunto
de técnicas para la mejora de la calidad subjetiva de una imagen o para aumentar el
rendimiento de aplicaciones de procesado realizadas con posterioridad como la detección
de objetos.
Estos mecanismos de mejora de la imagen no deben confundirse con los utilizados
en su restauración, puesto que ambos procesos, mejora y restauración, son diferentes.
Hablaremos de restauración cuando la imagen sea una versión degrada del objeto original (o de la imagen sin degradar). Como causas de esta degradación podemos suponer
el desenfoque, el movimiento del objeto/camara, efectos de condiciones meteorológicas
adversas como la falta de nitidez que produce la niebla, etc. En este caso las técnicas d
emejora de imagen no son efectivas y debe de usarse un modelo teórico sobre el mecanismo
de degradación para luego intentar aplicar su inverso y deshacer el efecto degradante.
5.2
5.2.1
Conceptos previos
Histograma
El histograma de una imagen en blanco y negro representa la frecuencia relativa con
la que los diversos valores de gris aparecen en ella. En una imagen digital con w × h
pixels y n niveles de gris [0, 1, · · · , n − 1] y con notación matemática podrı́amos decir que
el histograma es una representación gráfica de la frecuencia de aparición de los niveles de
gris en la imagen:
Nng
h(ng) =
w×h
T
siendo Nng el número de pı́xeles con el nivel de gris ng en la imagen. El histograma
presenta visualmente una decripción global de la imagen, siendo útil para evaluar la
exposición de la misma. La forma del histograma revela información importante sobre el
contraste y la composición de la imagen que puede utilizarse para el procesamiento de la
misma.
Para una imagen en color, existen tres histogramas, uno para cada canal. Se habla
de canal porque, en su mayorı́a, los espacios de color están descritos por tres coordenadas
como RGB, HSV o Y CB CR .
DR
AF
Figure 5.1: Histogramas de una imagen de PETS 2000. Se muestran los tres canales de color
RGB en la primera fila y Y CB CR en la segunda.
En algunos casos es conveniente muestrear las frecuencias no de los valores sino de
conjuntos de valores, entornos, denominados bins. Es decir, normalmente hay tantos
bins como valores posibles, 256 en la mayorı́a de los casos, pero puede ocurrir que sea
conveniente reducir dicho úmero. Imaginemos que agrupamos los valores de 15 en 15. El
rango total de valores lo podemos poner como la unión de 15 rangos distintos (15 bins):
[0, 255] = [0, 15] ∪ [16, 31] ∪ · · · ∪ [240, 255]
Ası́, un histograma con 15 bins se creará contando el número de pixels con valor incluido
en cada uno de esos rangos.
Figure 5.2: Histograma de una imagen en blanco y negro con 15 bins.
OpenCV dispone de funciones para el cálculo de histogramas de la imagen, calcHist,
pero puede resultar demasiado enrevesada y, a menos que los histogramas se tengan que
calcular como parte del procesado en cada una de las imágenes de una secuencia, el
tiempo que puede ahorrar su probable eficiente implementación no es significativo.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
46
Código
uchar
int
QVector
∗ ptrI
, cr1 ;
n c o l , nrow ;
ihC1 , ihC2 , ihC3 ;
Código
DR
AF
T
iSz = src . size () ;
ihC1 . f i l l ( 0 , 2 5 6 ) ;
ihC2 . f i l l ( 0 , 2 5 6 ) ;
ihC3 . f i l l ( 0 , 2 5 6 ) ;
for ( nrow =0; nrow<i S z . h e i g h t ; nrow++)
{
p t r I = s r c . p t r ( nrow ) ;
fo r ( n c o l =0; n c o l <i S z . width ; n c o l++)
{
c r 1 = ∗ ( p t r I ++);
ihC1 [ c r 1 ]++;
c r 1 = ∗ ( p t r I ++);
ihC2 [ c r 1 ]++;
c r 1 = ∗ ( p t r I ++);
ihC3 [ c r 1 ]++;
}
}
Mat
hsv ;
MatND h i s t ;
int chans [ ] = { 0 , 1 } ;
int h S i z e [ ] = { 3 0 , 3 2 } ;
float hranges [ ] = {0 ,180};
float sranges [ ] = {0 ,256};
const f l o a t ∗ r a n g e s [ ] = { hranges , s r a n g e s } ;
c v t C o l o r ( s r c , hsv , CV BGR2HSV ) ;
c a l c H i s t (&hsv , 1 , chans , Mat ( ) , h i s t , 2 , h S i z e , r a n g e s , true , f a l s e ) ;
Figure 5.3: Codigo para crear los histogramas de una imagen src. En primer lugar se generan el
histograma ihCj de cada canal j. En el segundo ejemplo se hace uso de la función de OpenCV
calcHist para generar los histogramas de los canales Hue y Saturation (canales 0 y 1) de una
imagen en color transformada al sistema HSV. Se determinan 30 posibles valores de h y 32 de
s aunque el rango de valores ambas sea h ∈ [0, 179] y s ∈ [0, 255]. No se usa máscara y el
histograma es uniforme y no acumulativo.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
47
5.2.2
Vecindad y Conectividad entre pixels
Exceptuando los bordes de la imagen (x = 0,x = w − 1,y = 0 y y = h − 1), cada pixel
p(x, y) tiene dos vecinos horizontales y dos verticales, dados por p(x − 1, y), p(x + 1, y),
p(x, y − 1) y p(x, y + 1), situados a una distancia euclı́dea unidad y que constituyen
el conjunto de vencindad a 4 del pixel p: N4 (p). Ademas tiene otros cuatro vecinos
diagonales p(x − 1, y − 1), p(x − 1, y + 1), (x + 1, y − 1) y (x + 1, y + 1) que se encuentran
a una distancia d = 1.414 y constituyen la vecindad diagonal ND (p). Todos los pixels
anteriores constituyen la vecindad a 8 N8 (p), que es la unión de las dos anteriores.
La conectividad entre pı́xeles es un concepto muy importante en el procesamiento
digital de imágenes que se basa en la definición de vecindad. Dos pı́xeles están conectados
si son vecinos y cumplen un requisito adicional basado en la semejanza de sus niveles de
gris (normalmente deben coincidir). Ası́, si definimos el subconjunto de niveles de gris V
que utilizaremos para definir conectividad, decimos que dos pı́xeles p y q con niveles de
gris incluı́dos en V están:
• 4-connected o conectados a 4 =⇒ q ∈ N4 (p)
T
• 8-connected o conectados a 8 =⇒ q ∈ N8 (p)
DR
AF
• m-connected o conectados mixtos ⇔ q ∈ N4 (p) or q ∈ ND (p) y N4 (p)∩N4 (q) = ∅
Estas definiciones cobrarán más importancia en procesado avanzado de imágenes
(como algoritmos de detección o seguimiento de contornos a través de caminos )
Figure 5.4: Vecindad entre pixels: N4 , ND y N8 = N4 ∪ ND .
5.2.3
Convolución
De forma general la convolución es un operador matemático que, aplicado a dos funciones f y g da como resultado una tercera función h que puede interpretarse como la la
magnitud de la superposición de f con una traslación de g:
Z +∞
h(t) = (f ∗ g)(t) =
f (t − τ ) · g(τ ) · dτ
−∞
En procesamiento digital de señales (la imagen puede considerarse como tal, imaginando
una sola fila de datos), se define la convolución de funciones discretas:
h(n) = (f ∗ g)(n) =
∞
X
f (i) · g(n − i)
i=−∞
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
48
DR
AF
T
Esta expresión es la forma general de la utilizada en el procesamiento de imágenes. En este
contexto, la convolución es una transformación local de la imagen que modifica el valor
de intensidad de un pixel en función de las intensidades de los pı́xeles que le rodean, sus
vecinos. Asi, se utiliza en la aplicación de los llamados filtros para conseguir determinados
efectos como emborronamiento, suavizado, detección de bordes, etc. Cada uno de estos
filtros, o cualquier otra operación de convoución, queda definido por el Kernel.
La figura 5.5 representa el proceso de convolución con un kernel con la dimensión
más utilizada (3 × 3), aunque pueden tener cualquier dimensión (m × n). Los números
que aparecen en el kernel representan el factor por el que hay que multiplicar el valor
del pixel sobre el que se superpone, resultando en tantas multiplicaciones como elemenos
tenga el kernel, para asignar la suma de todas ellas al pixel situado en la posición central
del kernel en la nueva imagen. Puesto que es muy posible que este valor supere el rango
válido, se suele normalizar con la suma de los pesos del kernel. Durante la convolución,
el pixel central del kernel recorre todos los pı́xeles de la imagen.
Figure 5.5: Ejemplo de convolución con un kernel: h(n) = (4 × 0) + (0 × 0) + (0 × 0) + (0 × 0) +
(0 × 1) + (0 × 1) + (0 × 0) + (0 × 1) + (−4 × 2) = −8
OpenCV dispone de varias formas de realizar convoluciones. La más general se citará
más adelante 5.4, mencionando ahora la convolución con un filtro especificado en forma
de matriz. Sea una imágen origen src y el espacio para almacebar el resultado dst con
una profundidad ddepth (-1 para usar la misma que la imagen de entrada, 8 bits) y una
matriz representando el kernel ker, que supondremos cuadrada, por lo que el punto de
anclaje será su centro (valor por defecto Point(-1,-1)):
cv : : f i l t e r 2 D ( s r c , dst , −1 , ker , Po in t ( −1 , −1) ,0 ,BORDER DEFAULT)
5.2.4
Ruido
Con mucha frecuencia la imagen se degrada con la adición de ruido, durenate el proceso
de formación de la imagen (especialmente en casos de baja luminosidad y gran tiempo
de exposición), su transmisión o almacenamiento e incluso durante su reproducción. La
eliminación o reducción de este ruido es una de las partes más importantes del preprocesado de imágenes o su mejora.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
49
Para elegir el mejor método de eliminación del ruido es necesario conocer su forma.
matemáticamente se define el ruido como modificaciones al mapeo ideal del objeto O(x, y)
en la imagen I(x, y):
I(x, y) = g [O(x, y)] + η(x, y)
ZZ
g [O(x, y)] =
τ (x, y; x0 , y 0 ) O(x0 , y 0 ) dx0 dy 0
η(x, y) = f (g [O(x, y)]) · η1 (x, y) + η2 (x, y)
siendo τ (x, y; x0 , y 0 ) la función respuesta del sistema formador de imagen. El ruido total
η(x, y) depende del proceso de formación de la imagen, con un factor multiplicativo
η1 (x, y) y uno aditivo η2 (x, y). De su conocimiento se deriva la clasificación del ruido.
Veamos cuatro tipos sencillos y frecuentes:
T
• Ruido Aditivo: en algunos casos el ruido generado por el dispositivo es ruido
térmico que suele comportarse como ruido blanco gausiano independiente de la
señal, I(x, y) = O(x, y) + n(x, y).
DR
AF
• Ruido Multiplicativo: cuyo ejemplo más notorio se encuentra en el granulado
de las placas fotográficas, aunque también se considera multiplicativo el speckle en
imágenes con luz coherente, I(x, y) = O(x, y) · n(x, y)
• Ruido Impulso o impulsional, tambien conocido como sal y pimienta, generado
por sistemas de transferencias y detectores defectuosos, sustituyrndo el valor del
pixel por otro generalmente muy alto ao muy bajo (de ahi lo de sal y pimienta).
Puede modelarse como I(x, y) = (1 − b) · O(x, y) + b · n(x, y), con b un valor binario
que puede tomar los valores cero o uno.
• Ruido de Cuantización, dependiente de la señal, este ruido queda caracterizado
por e intervalo de cuantización de a señal. Puede producir contornos falsos, eliminar
detalles con poco cotraste e introducir artefactos en la imagen.
5.2.5
Imágenes en color
Las técnicas que se han mencionado con anterioridad y las que van a continuación
se desarrollaron para imágenes en blanco y negro, por lo que su aplicación a imágenes
en color no es inmediata salvo que se apliquen únicamente al canal de luminancia de
cualquier sistema de color con separación entre crominancia y luminancia. En general,
una imagen en color se puede considerar como una aplicación Z2 → Z3 que asigna a
cada punto P (x, y) del plano imagen un vector de tres componentes, una para cada coordenada de color Ip (x, y, z), es decir, una imagen puede considerarse un campo vectorial
bidimensional. De acuerdo con la anterior distinción, el procesdo de imágenes en color
puede hacerse de dos formas, marginal o por componentes y vectorial. El método elegido
para el procesamiento de la imagen dependerá en gran medida del resultado a obtener,
teniendo en cuenta que en muchos casos el sistema visual funciona de forma diferente a
la manipulación efectuada en la imagen y los resultados no pueden predecirse.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
50
Marginal
Por componentes, tratando o procesando cada canal por separado. Este procedimiento
presenta problemas por no considerar la interdependencia de los canales, pudiendo producir artefactos de color bastante visibles. Sean tres pı́xeles de coordenadas (r, g, b) dadas:
p1 (30, 70, 20), p2 (70, 100, 150) y p3 (90, 60, 70). Si aplicamos el filtro de mediana a cada
componente por separado el resultado es p(70, 70, 70). Este pixel no existe entre los considerados y representa, además, un nivel de gris. Este problema afecta especialmente al
modelo RGB, mientras que disminuye en importancia cuando se trata por separado el
canal de luminancia y los de color Y y CR CB , por ejemplo.
Vectorial
Vectorialmente, considerando cada pixel un vector. Tiene en cuenta la correlación
entre coordenadas por lo que no introduce artefactos procesando RGB.
Mejoras basadas en el Histograma
T
5.3
DR
AF
En una imagen con poco contraste, causada, por ejemplo, por sobre o subexposición,
todos los pixels de la imagen presentan valores de intensidad acumulados en un extremo
del rango, superior o inferior respectivamente). Modificando el histograma reasignamos
a cada pixel un nuevo valor de intensidad (o triplete de intensidades) de forma que se
expanda el rango de valores presentes en la imagen. En un ajuste lineal de histograma
(estiramiento o stretching), haciendo los oscuros más oscuros y los claros más claros, el
contraste mejora.
La mofificación del histograma se caracterizará por una función, que llamaremos
curva tonal, siendo los valores iniciales del histogramas los del eje X y los finales los del
eje Y (la recta diagonal se corresponde con la no modificación del histograma). A veces
cuando la conversión es estándar, esta función se almacena dando lugar a la denominada
Look Up Table LUT.
Figure 5.6: Curva tonal general y la aplicació en la linelaización del histograma.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
51
5.3.1
Linealización del histograma
La linealización del histograma, conocida también como estiramiento o expansión del
rango dinámico, consiste en la distribución de las frecuencias de aparición que conforman
el histograma para que ocupen la anchura total del histograma. Se define una transformación lineal para que el histograma resultante tenga frecuencias no nulas en todo el
rango [0, 255]. Para ello, si el primer nivel de gris con valor no nulo del histograma es m
y el último M , se aplica la transformación:
T (ng) = 255 ×
ng − m
M −m
DR
AF
T
Es común elegir m o M convenientemente, aunque no sean el mı́nimo o el máximo, para
mejorar el proceso. En imágenes en color se puede aplicar el procedimiento por separado
a los tres canales o hacerlo en el de luminancia.
Este procedimiento puede mejorar el contraste de una imagen (si antes estaba muy
oscura o muy clara puede mejorarse la visibilidad de los objetos en ella), aunque no
siempre da buenos resultados.
Figure 5.7: Efecto de la linealización del histograma en el canal de luminancia Y CB CR .
5.3.2
Ecualización del histograma
El principal problema dle método anterior es que requiere la intervención del usuario
(bien es cierto que esto se puede evitar con un pequeño programa de detección de mı́nimos
que seleccione de forma automática los valores m y M ). Es por ello que normalmente
se usa otra conocida transformación de histograma, la equalización. Como su nombre
indica, esta transformación trata de igualar las frecuencias relativas de todos los niveles
de gris, transforma el histograma en una distribución uniforme, constante. Supongamos
u una variable aleatoria que ligada con el nivel de gris de una imagen. Supongamos que u
es contı́nua y comprendida en el intervalo [0, 1], asociado con los valores negro y blanco.
Para cada valor en dicho intervalo, supongamos una transformación:
ρ = T (u)
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
52
que cambia por un nivel de gris ρ cada valor u de la imagen. La transformación T tiene
que cumplir dos criterios. Por un lado ha de ser monovaluada y monótona creciente y por
el otro T (u) ∈ [0, 1]. La primera condición preserva el orden negro-blanco en la escala de
grises y la segunda nos asegura un valor coherente con nuestro rango de grises. Se puede
probar [9] que la transformación requerida es:
Z u
ρ = T (u) =
Pu (w)dw
0
es decir, es la integral normalizada con el factor 255/numeroP ixels. Veamoslo de otra
forma. Si nuestra imagen tiene N pı́xeles y G niveles de gris diferentes [0, 1,
P· · · , G − 1],
siendo h(g) el número de pı́xeles asociados on el nivel de gris g (se tiene que h(i) = N ),
la ecualización se lleva a cabo asignando un nuevo valor a he (g) dado por:
i=g
G−1X
h(i)
g = h (g) =
N i=0
0
e
DR
AF
v−1
X
T
donde se debe elegir el entero más próximo tras realizar las operaciones con variables
reales. Por último, podemos tambien encontrar definiciones que involucran la función de
distribución acumulada cdf, definida:
cdf (v) =
h(i)
i=0
y su valor mı́nimo, cdfmin , para producir una definición similar (incluyendo el redondeo
al entero más próximo mediante la función round()):
cdf (v) − cdfmin
0
e
v = h (v) = round (G − 1) ·
N − cdfmin
Figure 5.8: Efecto de la ecualización del histograma.
OpenCV dispone de una función que aplica la ecualización de histogramas, tomando
como argumentos las imágenes origen y destino,
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
53
void
e q u a l i z e H i s t ( const Mat& s r c , Mat& d s t ) ;
aunque éstas han de tener una profundidad de 8 bits y el mismo tamaño por lo que
podemos pensar en usar la combinación
c v t C o l o r ( s r c , s r c , CV BGR2GRAY ) ;
equalizeHist ( src , dst ) ;
algoritmo que normaliza la luminosidad de la imagen y aumenta el contraste. Si queremos
aplicar la ecualización de histograma a una imagen en color habrá que llamar a la función
anterior con cada uno de los canales de color y recomponer la imagen posteriormente (con
resultado sorprendente y nada parecido al desado) o cambiar a un sistema con luminancia
separada y aplicarlo a dicho canal.
5.3.3
Transformación gamma
DR
AF
T
Como se mencionó con anterioridad, ver 4.5, la transformación gamma es bastante
común y se utiliza para tratar de ajustar el proceso entre la toma de una imagen y su reproducción para que ambas sean lo más parecidas posible. En general una transformación
gamma tendrá la forma:
u γ1
h(v) = 255 ·
255
y se suelen distinguir dos pasos, la gamma de codificación, aplicada por el instrumento que
captura la imagen antes de su grabación a disco y la gamma de descodificación aplicada
al leer dicho archivo y mostrarlo en un monitor.
Figure 5.9: Gammas de codificación y decodificación para conseguir linelalidad.
El valor de gamma utilizado en la creación de un archivo imagen queda normalmente
especificado por el pefil de color utilizado y que se especifica en el fichero imagen. La
mayorı́a de los fiheros imagen se codifican con un valor γ = 1/2.2 (como los que usan los
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
54
espacios de color sRGB o Adobe RGB 1998 ) con la excepción de los ficheros RAW que
se almacenan con un gamma lineal. Para los ficheros que no especifican perfil de color se
supone el valor mencionado con anterioridad, γ = 1/2.2
La correción gamma básica es muy fácil de implementar usando OpenCV, ya que la
librerı́a dispone de una función para elevar a un exponente dado todos los elementos de
una matriz, InputArray, que puede ser directamente un objeto Mat:
cv : : pow ( InputArray s r c , double power , OutputArray d s t )
aunque existe una opción mejor. Se trata de evaluar la transformación a seguir por cada
nivel de gris y generar una matriz (Look up Table) LUT que utilizará OpenCV para
generar la imagen nueva:
cv : : LUT ( InputArray s r c , InputArray l u t , OutputArray d s t , 0 )
Puesto que las operaciones complejas se realizan sólo en la generación de la matriz lut,
esta segunda opción es mucho más rápida.
Técnicas de filtrado espacial
T
5.4
DR
AF
Las técnicas de filtrado espacial se utilizan básicamente para suprimir el ruido o
suavizar la imagen. Es importante distinguir el procesado de imágenes en blanco y
negro del de imágenes en color. Normalmente las técnicas de procesado se aplican en
imágenes en niveles de gris, algo fácilmente extrapolable a imágenes en color aplicando
la transformación al canal de luminancia, requiriendo en algunos casos el tyratamiento
simultáneo de los canales de color, como en el caso del ruido.
Los filtros espaciales modifican la contribución de determinados rangos de frecuencias
espaciales en una imagen. El término espacial hace referencia a la aplicación directa del
filtro sobre la imagen y no sobre su transformada, a pesar de hacer referencia a frecuencias
espaciales: el nuevo valor del nivel de gris de un pixel se obtiene en funcioón del valor de
sus vecinos (por lo que definiremos a continuación vecindad y conectividad). Existe, sin
embargo, una relación entre los filtros espaciales y el filtrado en el dominio de frecuencias,
por eso toman su nombre de allı́:
• Filtros Pasa-Baja. Se utilizan en la reducción del ruido o en la difusión de bordes
(ambos asociados con frecuencias altas). Suavizan las imágenes produciendo una
cierta pérdida de nitidez (snoothing).
• Filtros Pasa-Alta. Con el efecto contrario (sharpening). Se utilizan para resaltar
los detalles finos o para recuperar detalles perdidos en una mala adquisición de la
imagen.
• Filtros Pasa-Banda. Son una combianción de ambos, ya que resaltan un determinado tipo de detalles (banda de frecuencias).
Hay más operaciones a imágenes abordables con la terminologı́a de filtrado. Se entenderá por filtrado la convolución del filtro, una matriz N × N con la imagen. La forma de
la matriz vendrá dada por el efecto a conseguir, el numero de vecinos involucrados, etc.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
55
Figure 5.10: Ejemplo de kernel usado en suavizado.
5.4.1
Suavizado
El suavizado de una imagen, filtro pasa-baja, se utiliza para difuminarla o reducir
el ruido. La forma más sencilla de filtro pasa-baja es el promedio con los vecinos del
conjunto W . Ası́, el valor final del pixel p(u, v) será:
XX
f (u, v) =
a(i, j) · p(u − i, v − j)
(i, j) ∈ W
i
j
DR
AF
T
en función de los pesos asociado a cada vecino. Como ejemplo podemos pensar en un
vecindario N8 con pesos unidad (el pixel central puede incluirse o no):
( 1
)
1
1 X X
p(u + i, v + j)
f (u, v) =
9 i=−1 j=−1
El ejemplo anterior recibe el nombre de box filter y tiene implementación directa
en OpenCV mediante dos canales, cv::boxFilter() y cv::blur(). En la primera opción se
especifica si se desea el filtro normalizado o no, mientras que en la segunda el filtro es
normalizado, con un tamaño ksz × ksz y el tratamiento de bordes por defecto:
cv : : b o x F i l t e r ( s r c , dst , −1 , ksz , P oi nt ( −1 , −1) , true ,BORDER DEFAULT)
cv : : b l u r ( s r c , dst , ksz , Po i nt ( −1 , −1) ,BORDER DEFAULT)
Existe un métod adicional de suavizado que conserva los bordes, llamado filtro bilateral.
5.4.2
Filtro bilateral
El filtro bilateral es un filtro de suavizado que conserva los bordes: el valor de un pixel
se calcula en base a una media ponderada de los pı́xeles vecinos y con valores similares.
En las regiones más uniformes, los pı́xelses de un vecindario son similares entre sı́ y el
filtro actúa eliminando las pequeñas diferencias atribuibles al ruido. Cuando el pixel
central se encuentra en un borde entre zonas oscuras y claras el filtro reemplaza su valor
por la media de los pı́xeles brillantes, ignorando los oscuros (cuando se centra en uno
oscuro se promedian los oscuros e ignoran los brillantes). Este comportamiento permite
mantener los bordes. En un caso particular, las funciones de ponderación de cercanı́a
c(x) y similitud s(x) son gausianas:
1 d(ξ − x)
c(ξ − x) = exp −
2
σd
1 δ(ξ − x)
s(f (ξ) − f (x)) = exp −
2
σr
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
56
Figure 5.11: Eliminación de ruido en una imagen de color perteneciente a una secuencia de
video efectuada con VirtualDub MSU Denoising Filter.
T
siendo d(ξ − x) la distancia euclı́dea y δ(ξ − x) es la distancia entre valores de intensidad
de los pı́xeles, |f (ξ) − f (x)|. El filtro combinado toma entonces la forma:
ZZ ∞
1
h(x) =
f (ξ) · c(ξ − x) · s(f (ξ) − f (x)) · dξ
k(x) ∞
DR
AF
siendo k(x) el factor de normalización:
ZZ ∞
k(x) =
c(ξ − x) · s(f (ξ) − f (x)) · dξ
∞
Como ejemplo, decir que Adobe Photoshop implementa un filtro bilateral en su herramienta de difuminar superficies (surface blur tool).
cv : : b i l a t e r a l F i l t e r ( s r c , dst , ksz , sigmaColor , sigmaSpace ,BORDER DEFAULT)
5.4.3
Eliminación de ruido
La eliminación del ruido es tema bastante trabajado aunque difiere enormemente de
acuerdo con el tipo de imagen: blanco y negro, color o imagen de secuencia en color.
También depende de la suposición sobre el ruido presente en la imagen y su caracterización. Hablaremos del ruido impulso y el ruido gaussiano como ruidos con comportamiento claramente definido. Mencionar que, por supuesto, estos son dos idealizaciones
y el ruido presente en imágenes reales es muy dificil de asignar a uno de los diversos
modelos.
En el tipo de ruido conocido como ruido impulso o sal y pimienta los valores de los
pı́xeles de la imagen afectados por él son muy diferentes en color o intensidad de los
almacenados por los pı́xeles cercanos, afectando a pocos pı́xeles de la imagen. Estas dos
caracterı́sticas le hacen particularmente fácil de eliminar. El mecanismo de suavizado anteriormente descrito puede utilizarse para reducir este tipo de ruido, aunque el mecanismo
perfecto es el filtro de mediana.
La idea central en el filtro de mediana es la selección de todos los pı́xeles en un entorno
dado del pixel a corregir sustituyendo su valor por la mediana de los valores de los pı́xeles
del vecindario. Si dicho vecindario tiene un número impar de elementos, la mediana se
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
57
Figure 5.12: Aplicación del filtro no lineal de mediana.
DR
AF
T
calcula fácilmente puesto que es el valor central una vez ordenados numéricamente Debido
a esto en los vecindarios, como el N8 se incluye tambié el pixel a procesar, ya que para
un conjunto con ordinal par existe más de un posible valor de la mediana [2].
OpenCV dispone de un filtro de mediana aplicable a imágenes de 1, 3 o 4 canales y
de tipo CV 8U, CV 16U, o CV 32F para kernel de tamaño 3 o 5. En caso de usar un
kernel de mayor tamño el tipo ha de ser CV 8U.
cv : : medianBlur ( s r c , d s t , k s z )
Volvemos a resaltar que su aplicación a imágenes a color de forma marginal, es decir,
por componentes, puede producir efectos extraños, recomendándose su aplicacion al canal
de luminancia. La aplicación del filtro de mediana vectorial se complica un poco [6].
Supongamos un entorno N8 que centrado en cada pixel de la imagen proporcionará un
conjunto de N = 9 vectores (incluyendo el pixel central) x1 , x2 · · · , xn , el vector resultante
de la aplicación del Filtro de Mediana Vectorial o VMF será xvm :
V M F {x1 , · · · , x9 } = xvm
que debe cumplir:
xvm ∈ {x1 , · · · , x9 }
9
X
i=1
kxvm − xi k ≤
9
X
kxj − xi k
j = 1, 2, · · · , 9
i=1
siendo kzk la norma o distancia entre vectores elegida. Como cualidad importante de este
tratamiento vectorial es que no produce resultados que no esten presentes en la imagen.
Como ya sabemos, el filtro de mediana es particularmente efectivo con el ruido de
tipo impulso. Para otros tipo de ruidos, el kernel utilizado en la convolución se genera
a partir de funciones con comportamiento similar al ruido a eliminar. Podemos suponer
que el nivel de gris presentado por un pixel estará incluı́do en una gausiana centrada en
el valor ideal. Dicha gausiana se aproxima en su forma discreta a través de la función
binomial de orden N :
N
N!
fN (x) =
=
x! · (N − x)!
x
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
58
obteniéndose par el orden 2 f2 (x) = [ 1 2 1 ], lo que producirı́a un filtro bidimensional:
 


1
1 2 1
 


[f2 (x)]T × [f2 (x)] = 2 × [ 1 2 1 ] = 2 4 2
1
1 2 1
que se normalizarı́a con el factor 1/16 para no alterar el nivel de luminancia de la imagen.
cv : : G a u s s i a n B l u r ( s r c , dst , k s i z e , sigmaX , 0 ,BORDER DEFAULT)
5.5
Resaltado o perfilado de bordes
DR
AF
T
Experimentos psicofı́sicos parecen indicar que fotografı́as con los bordes resaltados
paracen subjetivamente más agradables a la vista que una reproducción exacta. El ojo
humano percibe en los bordes de transiciones bruscas de luminancia lo que se denomina
Bandas de Mach, figura 5.13. Este efecto parece mejorar nuestra habilidad para distinguir
detalles en tales bordes.
Figure 5.13: Percepción de una escala de gris, bandas de Mach y su explicación con la teorı́a de
los campos receptivos (celulas ganglionares con regiones excitadoras (+10) e inhibidoras (-5)).
El resaltado de bordes también se emplea como mejora en imágenes con bordes borrosos, para mejorar la nitidez. Este filtrado se denomina unsharp masking. La idea
consiste en restar a la imagen a mejorar f (x, y) una version suavizada de la misma
fpb (x, y), obteniendo ası́ una máscara para resaltar los bordes que, amplificada por un
factor k entre 1 y 3, se suma a la imagen original. Este efecto se puede generar tambien
con una convolución con un kernel dado hum :
k · {f (x, y) − fpb (x, y)} + f (x, y) = f (x, y) ⊗ hum (x, y)
pudiendose obtener la expresión para el kernel:
hum (x, y) = (1 + k) · δ(x, y) − k · hpb (x, y)






0
0
0
1 1 1
−1 −1 −1
1



 k 
hum (x, y) = 0 1 + k 0 − k · 1 1 1 = · −1 8 + k9 −1
9
9
−1 −1 −1
0
0
0
1 1 1
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
59
Figure 5.14: Explicación gráfica del filtro de resaltado de bordes. Ejemplo práctico
T
Ademas del kernel usm definido anteriormente, podemos podemos resaltar los bordes
mediante filtrado lineal con otros filtros como [8]:






0 −1 0
−1 −1 −1
1 −2 1






H2 = −1 9 −1
H3 = −2 5 −2
H1 = −1 5 −1
0 −1 0
−1 −1 −1
1 −2 1
5.6
DR
AF
que tienen en común la suma unidad de sus elementos, para evitar normalizar y simplificar
el proceso.
Mejora de Imagen: Filtros Inversos
Mejorar la calidad de una imagen degradada por imperfecciones en el sistema de
adquisición o transmisión, movimientos de objeto o cáamara, desenfoques o condiciones
atmosféricas negativas es un elemento básico en e procesamiento de imágenes a la vez
que muy complicado.
Imaginemos una imagen borrosa (debido al desenfoque o a movimientos indeseados)
con ruido añadido:
g(x, y) = H [f (x, y)] + η(x, y)
siendo H el mecanismo de degradación y η el ruido. Podemos imaginar, por simplicidad,
un kernel determinado para cada efecto y evaluar la imagen resultante como la convolución
de dicho kernel con la imagen original:
X
g(x, y) =
H(i, j) · f (x − i, y − j) + η(x, y)
i,j∈N8
Hay mecanismos aplicados de forma convencional para restaurar o mejorar la imagen,
como el Filtrado Inverso, los Filtrados de Wiener o Kalman, etc. Sin embargo, todos
ellos requieren el conocimiento del mecanismo de degradación, es decir, el conocimiento
explı́cito de la función H(u, v). De ser ası́, podemos restaurar la imagen original f (x, y)
convolucionando la imagen degradada con la inversa de la función de degradación. La
eliminación del ruido requiere, por supuesto, el conocimiento de su comportamiento estadı́stico.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
60
Para la aplicación de estos mecanismos de restauración se utiliza la transformada de
Fourier
F (u, v) = F {f (x, y)}
para recomponer la imagen original:
f (x, y) = F−1 (F (u, v)) = F−1 G(u, v) · H −1 (u, v) − N (u, v) · H −1 (u, v)
Cuando no hay ruido aditivo (η(x, y) = 0) el filtrado inverso se comporta aceptablemente.
Con ruido aditivo, pierde eficacia a frecuencias altas donde la magnitud de H(u, v) se hace
del orden del ruido.
Código
k e r n e l = ( Mat <f l o a t >(3 ,3) <<
1 , −2 , 1 , −2, 5 , −2 , 1 , −2 , 1 ) ;
s r c = imread ( ” Path a una imagen ” ) ;
i f ( ! s r c . data )
return −1 ;
DR
AF
Mat
T
Mat
src , dst ;
Point anchor ;
double
delta ;
int
ddepth ;
anchor=Poi nt ( −1 , −1); // a n c l a punto c e n t r a l d e l k e r n e l
d e l t a = 0 ; // Sin o f f s e t
ddepth = −1; // Imagen tambien de 8 b i t s
kernel size = 5 ;
f i l t e r 2 D ( s r c , dst , ddepth , k e r n e l , anchor , d e l t a ,BORDER DEFAULT) ;
Figure 5.15: Codigon para resaltar bordes de una imagen.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
61
Chapter 6
Segmentación de una imagen
DR
AF
T
La segmentación de una imagen es un paso imprescindible en el camino hacia su
comprensión o interpretación, por ejemplo, reconociendo personas u objetos. La segmentación consiste en la separación de una imagen en un conjunto de zonas homogéneas,
cuyos pı́xeles presentan un valor semejante en un determinado número de propiedades [9].
Estas propiedades pueden incluir nivel de gris, contraste, texturas, valores espectrales o
colores. El resultado de la segmentación debe ser un determinado número de regiones
conexas y que no se solapen, asociadas con una etiqueta.
La segmentación de una imagen I consiste en la identificación de un conjunto de n
regiones R = {R1 , R2 , · · · , Rn } tal que, en referencia a la propiedad P:
1. I = R1 ∪ R2 ∪ · · · ∪ Rn
2. Ri ∩ Rj = ∅
3. P(Ri ) = true
∀ i 6= j
∀i
4. P(Ri ∪ Rj ) = f alse
∀ i 6= j
Existe una gran variedad de métodos y algoritmos de segmentación y varias formas de
clasificarlos. Pueden dividirese en métodos que utilizan:Thresholding, Clustering, Transformaciones y Texturas. También pueden dividirse en dos grupos según exploten dos
propiedades de los niveles de gris de pı́xeles vecinos: discontinuidad y similitud [9].
Los algoritmos de la primera categorı́a dividen la imagen en regiones basándose en
cambios súbitos en el nivel de gris, es decir, posibles bordes. La detección de bordes
y el establecimiento de relaciones entre ellos permiten determinar regiones como aquellas partes de la imagen contenidas por un borde cerrado. Los de la segunda categorı́a
construyen las regiones mas o menos homogéneas, conectando pı́xeles con una intensidad
similar. En general, en la segmentación de la imagen se utilizan varias propiedades locales
de los pı́xeles. Entre las técnicas de segmentación más conocidas están el umbralizado
de histograma (Histogram-based Thresholding), mexcla y separación de regiones (Regio
Splitting and Merging), crecimiento de regiones (Region Growing), o las técnicas basadas
en grafos.
Figure 6.1: Ejemplo de segmentación por umbralizado múltiple de histograma.
6.1
Threshoding: umbralizado de la imagen
DR
AF
Umbralizado simple
T
El umbralizado de la imagen o thresholding es el método más sencillo de segmentación. El umbralizado es un metodo de coste computacional bajo, basado en una
división de la imagen en partes mútuamente excluyentes. Este métod conlleva la identificación o elección de los umbrales óptimos. Esta elección de máximos suele basarse en
el histograma de la imagen, por lo que no se tiene en cuenta información espacial.
Sea aplica a imágenes con histograma bimodal (dos máximos), uno correspondiente
al objeto y otro al fondo, con dos niveles de gris distintivos (una imagen de un texto
sobre papel blanco). Ambos máximos estarán separados por un valle donde se situará el
umbral. La imagen binaria B(i, j) obtenida mediante umbralizado con umbral U a partir
de una imagen en niveles de gris I(i, j) se obtiene:
(
0 if I(i, j) ≤ U
B(i, j) =
1 if I(i, j) > U
Este tipo de umbralización, llamada global, funciona de forma óptima si se controla el
entorno de captura de la imagen (inspección de objetos industriales), donde se puede manipular la iluminación y el fondo para producir un histograma bimodal fácil de umbralizar.
El umbral elegido se puede refinar por varios métodos. En histogramas bimodales funciona muy bien el método de Noboyuki Otsu[7]. Este método selecciona el umbral de
forma adaptativa de forma que se minimice la varianza dentro de cada clase (objeto y
fondo) σ1,2 :
2
σ1,2
(t) = ω1 (t) · σ12 (t) + ω2 (t) · σ12 (t)
que es lo mismo que minimizar la varianza entre clases σ:
σ 2 (t) = ω1 (t) · ω2 (t) · [µ1 (t) − µ2 (t)]2
siendo ωi la probabilidad de encontrar un pixel en la clase i (número de pixels en esa
clase dividido por el número total de pixels) y µi el nivel de gris medio de los pı́xels en
la clase i para el nivel de gris umbral t. Calculando el valor σ(t) para todos los valores
t ∈ {0, 1, 2, · · · , 255} y se elige como umbral el valor t0 que produce el valor máximo o
una media en caso de que haya más de uno.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
63
Figure 6.2: Umbralización para histograma bimodal y multimodal.
Umbralizado Multinivel
En este caso la imagen se divide en n + 1 regiones usando n umbrales diferentes. En
estos casos el histograma es multimodal. En el caso de varios objetos de color distinto
sobre un mismo fondo, el pico mayor se corresponderá con el fondo, habiendo un pico
extra por cada objeto.
Detección de Bordes
T
6.2
DR
AF
La detección de bordes (Edge Detection) y lı́neas en una imagen proporciona una
gran cantidad de información sobre la misma. Estos rasgos o features de la imagen son
de caracter local y se detectan debido a cambios bruscos en el nivel de gris de la imagen.
Mientras que el borde seńala la división entre dos regiones distintas d la imagen, una
lı́nea puede estar incluida en una zona uniforme.
La detección de bordes consiste básicamente en la detecció de la transición entre dos
regiones con niveles de gris significativamente distintos. Este cambio de gris se detecta con
discretizaciones de la primera y segunda derivada del nivel de gris. Puesto que podemos
considerar una imagen como una función bidimensional f (x, y), la dirección y el módulo
de la máxima variación se obtienen a través del vector Gradiente:
#
" #
"
∂f (x,y)
−→
Gx
→
−
G=
= ∇f (x, y) = ∂f∂x
(x,y)
Gy
∂y
cuya dirección se evalúa según:
θ(x, y) = arctan
Gy
Gx
existiendo varias formas de evaluar el módulo, según la métrica utilizada:
q
G = 2 G2x + G2y
,
G = | Gx | + | Gy |
,
G = max {Gx , Gy }
En el caso bidimensional discreto, las aproximaciones del operador gradiente se basan
en diferencias entre los niveles de grises de la imagen, por lo que las derivadas parciales
pueden aproximarse por la diferencia de valores adyacentes de la función:
Gx = f (i + 1, j) − f (i, j)
Luis M. Fuentes
,
Gy = f (i, j + 1) − f (i, j)
Tratamiento de Imagen y Sonido, UVa
64
Figure 6.3: Máscaras para los gradientes de fila y columna, Hx y Hy .
Los operadores gradiente requieren dos máscaras, una para el gradiente en dirección X o
gradiente de fila Gx o Gf y otra para el gradiente en dirección Y o gradiente de columna,
Gy o Gc . El resultado de la aplicaciómn de estas dos máscaras en un pixel dado se
combina para obtener el módulo del vector gradiente:
Gx (i, j) = (Hx ⊗ f )(i, j)
Gy (i, j) = (Hy ⊗ f )(i, j)
,
G(i, j) =| Gx (i, j) | + | Gy (i, j) |
6.2.1
Operadores basados en el gradiente
DR
AF
T
A continuación mencionaremos los detectores de bordes basados en la primera derivada,
entre los que destacan los operadores de Robert, Sobel, Prewitt y Krisch, con mención especial al operador de Canny, desarrollado para ser el detector de bordes óptimo. En cada
uno de ellos se computa el gradiente, asignando al pixel como borde si dicho gradiente
supera un umbral.
Operador de Roberts
Es un operador gradiente basado en una sencila máscara 2 × 2, proporcionando la
aproximación más simple a la magnitud del gradiente en un pixel:
G(x, y) =| f (i, j) + f (i + 1, j) − f (i, j + 1) − f (i + 1, j + 1) |
Puesto que el kernel es muy pequeño, 2 × 2, este operador es muy sensible al ruido. Es
posible crear una versión de kernel 3 × 3 para utilizar en convoluciones convencionales,
ver figura.
Operadores de Sobel, Prewitt y Frei-Chen
Son aproximaciónes discreta al cálculo del gradiente. Para ello se proponen dos kernels
para la detección de bordes horizontales y verticales.
Gx (i, j) = f (i−1, j−1)+K·f (i−1, j)+f (i−1, j+1)−f (i+1, j−1)−K·f (i+1, j)−f (i+1, j+1)
Gy (i, j) = f (i−1, j−1)+K·f (i, j−1)+f (i+1, j−1)−f (i−1, j+1)−K·f (i, j+1)−f (i+1, j+1)
o incluyendo la normalización:


1
K
1
1 

Gx =
0
0
0
2+K
−1 −K −1
Luis M. Fuentes

,

1 0 −1
1 

Gy =
K 0 −K 
2+K
1 0 −1
Tratamiento de Imagen y Sonido, UVa
65
El gradiente se valúa entonces con cualquiera de las ecuaciones mencionadas anteriormente, normalmente:
G(i, j) =| Gx (i, j) | + | Gy (i, j) |
El operador de Prewitt, K = 1, involucra con el mismo peso los vecinos de filas o
columnas adyacentes. El operador de Sobel, K = 2, se considera más resistente al ruido
√y
mejor para los bordes diagonales. El caso intermedio, el operador de Frei-Chen, k = 2,
el gradiente es el mismo para bordes verticales, horizontales y diagonales.
El operador de Sobel, a pesar de reducir la creación de artefactos con respecto al operador Prewitt, sigue sin tener simetrı́a rotacional. Scharr estudió la forma de mejora los
resultados dentro de las limitaciones del gradiente discreto con kernels 3 × 3, proponiendo
un kernel alternativo.




3
10
3
3 0 −3




Gx =  0
,
Gy = 10 0 −10
0
0
−3 −10 −3
3 0 −3
DR
AF
T
Estos valores se obtienen en un proceso de optimización del error cuadrático angular en
el espacio de Fourier. OpenCV tiene implementados los filtros de bordes de Sobel (para
tamaños de kernel 3, 5 y 7) y Scharr. Este último está tambien implementado dentro del
primero para un tamaño de kernel CV SCHARR.
S o b e l ( s r c , dst , ddepth , dx , dy , k s i z e , 1 , 0 ,BORDER DEFAULT)
es decir, para aplicar el operador de gradiente Gx con kernel 3 × 3 con la imagen destino con la
misma profundidad que la de entrada, 8 bits:
S o b e l ( s r c , dst , − 1 , 1 , 0 , 3 , 1 , 0 ,BORDER DEFAULT)
(a) Roberts G
(b) Sobel Gx
(c) Scharr Gy
Figure 6.4: Operadores de detección de bordes.
6.2.2
El detector de bordes de Canny
El detector de bordes desarrollado por John F. Canny[3] consiste en un algoritmo con varias
etapas. El objetivo de Canny era descubrir el detector de bordes óptimo, es decir que presente
una buena tección, detectando tantos bordes como sea posible; una buena localización, situando
el borde lo más cerca posible de su situación en la imagen y una respuesta mı́nima, es decir,
debe marcar cada borde sólo una vez y el ruido no debe introducir bordes inexistentes. Usando
el Cálculo de Variaciones, Canny optimizó el proceso de detcción de bordes:
• maximizando el cociente señal/ruido al aplicar el gradiente
• añadiendo un factor de localización para situar el borde de forma precisa
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
66
• minimizando el número de detecciones de un mismo borde.
La implementación del algoritmo de Canny requiere cinco pasos: suavizado, aplicación de operadores gradiente, restricción a máximos locales, doble umbralizado y seguimiento del borde
por histéresis [5].
Suavizado
T
Es inevitable que las imágenes tengan, en mayor o menor medida, algo de ruido. Para
prevenir que dicho ruido sea contabilizado como bordes o impedir que perturbe la detección
de los verdaderos bordes, hay que reducir el ruido y suavizar la imagen. Para ello se utiliza la
convolución con un filtro Gausiano cuyo kernel tiene una desviación estándar σ = 1.4.


2 4 5 4 2


4 9 12 9 4

1 
5 12 15 12 5
Hσ =


159 

4
9
12
9
4


2 4 5 4 2
Cálculo de Gradientes
DR
AF
El algoritmo de Canny detecta los bordes aplicando operadores de Sobel para el cálculo de
los gradientes en las direcciones de los dos ejes:
HSy


1 0 −1


= 2 0 −2
1 0 −1

,
HSx

1
2
1


= 0
0
0
−1 −2 −1
para evaluar la magnitud del gradiente G aplicando la distancia euclı́dea o, por acelerar el
cálculo, la distancia Manhattan. Los bordes ası́ calculados están bien marcados pero son bastante gruesos por lo que para determinar su situación con más exactitud se almacena también
el argumento del vector gradiente θG .
Refinamiento de máximos
El propósito de esta etapa es refinar los bordes obtenidos en la etapa anterior, pasando a de
bordes gruesos o borrosos a bordes bien definidos. Simplificando, esto se consigue preservando
los máximos locales y anulando todo lo demás. Para cada pixel de la imagen gradiente se
realizan los siguientes pasos:
1. Redondear el argumento θ al multiplo de 45◦ más cercano (correspondiente a conectividad
con el vecindario N8 ).
2. Comparar el módulo del gradiente con el correspondiente de los vecinos anterior y posterior en esa dirección ( si θ = 45◦ con los valores g(x + 1, y + 1) y g(x − 1, y − 1); si θ = 90◦
con g(x, y − 1) y g(x, y + 1); etc).
3. Si en esa comparación el valor del pixel actual no es el máximo, se procede a su eliminación.
Un ejemplo sencillo de la aplicación de este algoritmo se muestra en la figura 6.5, donde la
mayorı́a de los pı́xeles tienen gradiente con orientación norte y, por lo tanto, se compara su
valor con los pixeles inferior y superior.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
67
Doble umbralizado
Los pı́xeles de borde que no han sido eliminados en el proceo anterior siguen manteniendo su
valor y orientación. Aunque la mayorı́a pertenezcan al borde, existe la posibilidad de que sean
causados por ruido o variaciones bruscas de color como las que aparecen en superficies rugosas.
En este momento se aplica el umbralizado para conservar sólo los bordes con valor mayor que
el umbral. El algoritmo de Canny tiene dos umbrales de forma que los pı́xeles con valor mayor
que el umbral superior se marcan como borde fuerte, los pixeles con gradiente menor que el
umbral inferior dejan de contar como bordes y los pı́xeles con valores intermedios se marcan
como borde débil.
Seguimiento de borde por histéresis
6.2.3
DR
AF
T
La división anterior en bordes débiles y fuertes se trata de la siguiente manera. Los bordes
fuertes se interpretan como correctos y se incluyen en el resultado final. Los borde débiles se
incluyen si, y sólo si, están conectados con los fuertes. Se supone que los bordes débiles son
debidos al ruido o varaciones de color y, en ese caso, se encuentrarán distribuidos por la imagen
independientemente de la situación de los bordes fuertes. Si los bordes débiles son verdaderos,
entonces es probable que se encuentren conectados o en las proximidades de bordes fuertes.
El seguimiento de bordes o edge tracking puede ser implementado mediante un análisis de
BLOBs (Binary Large Objects). Los pı́xeles del borde se dividen en blobs usando conectividad
al N8 . las blobs qu contengan al menos un pixel fuerte se conservan, eliminándose el resto.
Operadores basados en la segunda derivada
Estos operadores se basan en la derivada segunda para detectar como bordes sólo los puntos
que presentan máximos locales en la función gradiente. Los puntos que presentan máximos en
la primera derivada tiene un valor nulo en la segunda en los bordes. El operador laplaciana es
el más comun.
Laplaciana ∇2
Los operadores gradientes mencionados anteriormente son anisotrópicos, es decir, no son
invariantes bajo rotación. Si aplicaramos un operador isotrópico a una imagen y rotaramos
el resultado obtendrı́amos lo mismo que rotando la imagen y aplicando luego el operador.
La ventaja de operadores isotrópicos en la detcción de bordes radica en que los objetos a
detectar no tienen que presentar una orientacion determinada, es decir, podemos detectar bordes
independientes de la posición. Operadores isotrópicos requieren derivadas de orden par. El más
sencillo es el de orden dos, la laplaciana:
L(x, y) = −∇2 f (x, y) =
∂2f
∂2f
+
∂x2
∂y 2
Figure 6.5: Refinamiento de máximos en el algoritmo de Canny.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
68
T
Figure 6.6: Resultado de la aplicaciones de las distintas etapas del algoritmo de Canny.
de forma análoga,
DR
AF
dGx
d(f (i, j) − f (i, j − 1))
df (i, j) df (i, j − 1)
∂2f
=
=
=
−
=
2
∂x
dx
dx
dx
dx
= [f (i, j + 1) − f (i, j)] − [f (i, j) − f (i, j − 1)] = f (i, j + 1) − 2 · f (i, j) − f (i, j − 1)
∂2f
= f (i + 1, j) − 2 · f (i, j) − f (i − 1, j)
∂y 2
Las máscaras o kernels a utilizar en la convolución para las direcciones X (Lx ) e Y (Ly ) son:




0 0 0
0 1 0




Lx = 1 −2 1
,
Ly = 0 −2 0
0 0 0
0 1 0
Combinando ambos kernels y normalizando podemos obtener el operador laplaciana para vecindarios N4 y N8 :




0 1 0
1 1 1
1 
1


L4 = · 1 −4 1
,
L8 = 1 −8 1
4
8
0 1 0
1 1 1
Este operador puede ser más rápido, al utilizar sólo un kernel, pero tiene un serio inconveniente,
es extremadamente sensible al ruido. Por tanto, deberı́a usarse en combinación con algún
mecanismo de redución de ruido, como un suavizado gausiano, que se comenta a continuación.
Laplaciana de una Gausiana LoG
Para reducir la susceptibilidad de la laplaciana al ruido se utiliza en combinación con un
suavizado gausiano, el operador laplaciana del gausiano u operador de Marr-Hildreth, que resulta en menos falsos bordes que el operador anterior. La función de convolución se define
como:
2
x2 + y 2
x + y2
1
1−
exp −
LoG(x, y) =
πσ 4
2σ 2
2σ 2
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
69
Figure 6.7: Representación tridimensional y corte transversal de la laplaciana de una gausiana.
DR
AF
T
El operador LoG funciona de forma similar al modelo de campos receptivos de las células
ganglionales del sistema visual humano, el famoso sombrero mexicano. La construcción de la
máscara de convolución depende del valor de σ, a medida que σ aumenta se necesita un kernel
de dimensión mayor. El kernel más sencillo para su aplicación es 5 × 5:


0
0 −1
0
0


 0 −1 −2 −1
0 



LoG5 = 
 −1 −2 16 −2 −1 


0 
 0 −1 −2 −1
0
0 −1
0
0
Diferencia de gausianas DoG
Existe la posibilidad de reproducir de forma aproximada el comportamiento del filtro LoG
usando la diferencia entre dos gausianas de distinto tamaño. Este filtro, conocido como DoG
viene definido por:
2
2
1
x + y2
1
x + y2
σ1
· exp −
−
· exp −
,
1<
<2
DoG(x, y) =
2
2
2
2
σ2
πσ1
2σ1
πσ2
2σ2
La implementación de este filtro se realiza mediante una máscara de convolución obtenida
restando dos máscaras gausianas con distintos valores de σ. El cociente entre dichos valores
debe situarse entre 1 y dos para la obtención de buenos resultados en la detección de bordes
(algunos autores proponen el valor 1.6). La máscara de convolución asociada al filtro Dog tiene
un tamaño 7 × 7:


0
0 −1 −1 −1
0
0


 0 −2 −3 −3 −3 −2
0 



 −1 −3
5
5
5
−3
−1




DoG7 =  −1 −3
5 16
5 −3 −1 


 −1 −3
5
5
5 −3 −1 




0 
 0 −2 −3 −3 −3 −2
0
0 −1 −1 −1
0
0
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
70
6.2.4
Limitaciones de la detección de bordes
Las principales limitaciones de la detección de bordes como herramienta de segmentación
son:
• Los bordes detectados no siempre coinciden con los presentados por los objetos de la
imagen, especialmente en imágenes de baja calidad.
• Los mecanismos de detcción se basan en propiedades locales ignorando información y
organizacion de orden superior.
• Despues de su detección los bordes detectados han de ser conectados para determinar los
verdaderos bordes de los objetos. En este proceso pueden aparecer discontinuidades o
agujeros, o a interpolaciones arbitrarias si intentamos cerrarlos.
Normalmente, la detección de bordes viene seguida por un tratamiento de los mismos, bien
como blobs, contornos o sencillamente con morfologı́a matemática. Estos procesos pretenden
consolidar el borde rellenando posibles huecos y proporcionar una segmentación completa.
Formando regiones a partir de bordes
T
6.2.5
DR
AF
Supongamos que tenemos unos bordes parciales y queremos utiizarlos para segmentar la
imagen. Cada pixel del borde tiene asociado unvalor del gradiente y su ángulo. Utilizaremos
éste último para buscar el llmado pixel borde opuesto, marcando los pı́xeles en la lı́nea que une
ambos como pixeles de la region comprendida por el borde. Un análisis probabiliı́stico de las
veces que esto ocurre para un pixel y se vecindario permite establecer regiones. Establezcamos
un algoritmo para bordes de una imagen sencilla, con objetos y fondo.
• Para cada pixel de borde se busca el pixel borde opuesto en dirección perpendicular a la
marcada por su gradiente y a una distancia máxima δM . Si se encuentra dicho pixel, se
marca cada pixel en la linea conectando ambos como potencial candidato a esa región. Si
no se encuentra, se procede con el siguiente pixel.
• Se contabiliza el número de marcadores m(i, j) asociado con cada pixel de la imagen, que
indica cuantas veces ese pixel ha sido parte de la linea conectando dos pı́xeles borde.
• Se crea un ı́ndice de marcadores normalizado en función de m(i, j) según: M (i, j) =
1.0 si m(i, j) > 3, M (i, j) = 0.5 si m(i, j) = 3, M (i, j) = 0.2 si m(i, j) = 2,
M (i, j) = 0.1 si m(i, j) = 1 y M (i, j) = 0 si m(i, j) = 0.
• La fiabilidad de que un pixel p(i, j) pertenezca a una región se P
evalúa como la suma a un
vecindario N del pixel dado de los marcadores normalizados:
N M (r, s). Si este valor
es mayor que la unidad, entonces el pixel pertenece a la región, si no es ası́, es fondo.
6.3
Segmentación basada en regiones
Los algoritmos de segmentación basados en regiones funcionan de forma iterativa agrupando
los pı́xeles vecinos con valores similares de ciertas propiedades y separando los que son distintos.
La homogeneidad es una propiedad importante de las regiones y se utiliza con frecuencia como
criterio para dividir la imagen en zonas de máxima uniformidad, basándose en propiedades
como el nivel de gris, color, textura, forma, modelo, etc. Los métodos basados en regionesse
pueden dividir entre los que unen pı́xeles (merge, los que separan pı́xeles (split)y los que,
iterativamente, hacen las dos cosas (split-merge).
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
71
6.3.1
Crecimiento de regiones
El creciemiento de regiones usando semillas es un método semiautomático de segmentación
basada en regiones, clasificado como del tipo merge. Se parte de un grupo de puntos, llamados
semillas. Si empezamos con un pixel semilla y defnimos una métrica que permita comparar
ciertas propiedades del pixel semilla p con sus vecinos q, tal como P(p, q), tal que si dicho
valor es superior a un umbral dado UP , el pixel q se añade a la región. Esto se repite para
todos los vecinos N8 de p. Al terminar se procede a repetir el procedimiento con los pı́xeles
recien añadidos, como q, de forma recursiva. Cuando la región no añada ningún pixel nuevo,
se comienza con otro punto semilla, procediendo análogamente hasta que ninguna región pueda
crecer. Si no se ha completado la imagen, se añaden más semillas y se comienza su crecimiento.
El problema de éste método proviene de los puntos sin especificar: cómo se seleccionan los
pixels semilla? Cómo definimos la medida de similitud de la propiedad elgida P(p, q)? Cómo
definimos su valor umbral UP ? Es dicho valor constante o cambia para cada semilla? Para
añadir a la región el pixel r, vecino de q, qué medida de semejanza usamos P(p, r), P(q, r) u
otra cosa? Existen varias respuestas para estas preguntas:
DR
AF
T
• la medida de semejanza obvia es el nivel de gris o el color, aunque es sensible al ruido (se
puede reducir previamente).
• se puede comparar siempre con el pixel original P(p, r), pero eso aumenta la dependencia
del resultado con el pixel semilla y su elección.
• la otra solución es usar la comparación con el pixel recien añadido a la región q, con lo que
podemos introducir más variedad en la regió y eliminamos dependencia del pixel semilla.
Por supuesto, el inconveniente es que, si la transición es gradual, podemos acabr muy
alejados del valor de la propiedad en el pixel semilla.
• la tercera aproximación es la comparación con un valor estadı́stico (media) de la propiedad
en la región existente en ese momento (centroid region growing). Este método permite la
difusión pero en una medida mucho menor.
• también es posible utilizar como métrica las diferencias acumuladas, es decir, P(p, r) +
P(q, r) y usarla para aceptar o rechazar r.
• se pueden usar contra ejemplos: si se provee un pixel semilla de la región deseada y otro
de otra región se pueden usar los valores de las propiedades en ambos para establecer de
forma automática el valor umbral.
Las condiciones de uniromidad deben revisarse cuando se aplica esta técnica a imágenes en
color: se pueden utilizar varios espacios de color, usar sólo luminancia o crominacia, usar el
color como vector, usar métricos de color predefinidas, etc.
En general, para usar este método deben especificarse dos cosas: el algoritmo para la generación de las semillas (o las propias semillas) y el criterio de semejanza a utilizar junto con el
umbral. Como ejemplo, Adams y Bischof [1] proponen un algoritmo de crecimiento de regiones
que partiendo de un conjunto de n semillas asigna cada pixel de la imagen a una de las n
regiones distintas.
6.3.2
Método Splitting-Merge
En esta técnica se parte de la imagen entera. Dicha imagen se divide en un cierto número
de regiones N (normalmente N =4) hasta que se cumple un cierto criterio de uniformidad para
cada una de ellas. De no cumplirse en una región determinada P(Rj ) = F ALSE, dicha región
se vuelve a dividir en N subregiones iterativamente hasta que la condición de uniformidad se
cumpla en todas las subregiones, P(Ri ) = T RU E. La organización jerárquica resultante puede
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
72
Figure 6.8: Representación gráfica de un algoritmo split and merge.
Definir una propiedad usando un predicado lógico P(Ri )
Evaluar dicho predicado P(Ri ) en todas las regiones
Dividir las regiones Rj para las que no se cumpla, P(Rj ) = F ALSE
Repetir los pasos 2 y 3 hasta que todas las regiones satisfagan P(Ri ) = T RU E
Unir las regiones adyacentes Rj y Rk que cumplan P(Rj ∪ Rk ) = T RU E
Repetir el paso 5 hasta que no se puedan unir más regiones.
DR
AF
1.
2.
3.
4.
5.
6.
T
representarse con un quadtree (un árbol en el cual cada vértice tiene cuatro subordinados),
figura 6.9.
Una vez hechas las divisiones, es posible que regiones adyacentes cunplan el criterio de
uniformidad, siendo senejantes y pudiendo unirse en una sóla región, es la fase de unión en la que
se comprueba si la unión de regiones adyacentes cumple el criterio de uniformidad P(Rj ∪ Rk ) =
T RU E.
El algoritmo de segmentación split and merge se puede presentar en forma algorı́tmica como:
Existen numerosas variaciones de este algoritmo. Por ejemplo, se puede optar por permitir
la unión de dos regiones que cumplan el prdicado lógico por separado P(Rj ) = T RU E y P(Rk ) =
T RU E, resultando un algoritmo más sencillo y rápido al evitar la evaluación de la región suma.
También se puede extender a imágenes a color, evaluando el predicado lógico con el vector color.
También es posible una divisón mezcla de regiones cromáticas y acromáticas[10].
6.3.3
Watershed
La transformaciı́n watershed combina aspectos de los dos tipos de segmentación vistos,
basados en bordes y regiones. Las regiones se crean uniedno pixels mientras que sus bordes se
localizan usando discontinuidades en la imagen.
La idea de la transformación watershed viene de la topografı́a. El agua de lluvia es recogida
en las cuencas hidrográficas asociadas con rios o lagos. Podemos imaginar cada mı́nimo local
como una cuenca separada de otras cuencas vecinas por lı́neas de altitud máxima, llamadas
watershed o lı́neas divisorias. Como una gota de agua situada en una de estas lı́neas no tendrı́a
una cuenca asignada, se definen las lineas divisorias como formadas aquellas por los puntos de
una superficie topográfica que no pertenecen a ninguna cuenca. De esta forma, se divide una
superficie en puntos pertencientes a una cuenca determinada o a lineas divisorias. Hay dos tipos
de algoritmos para implementar esta idea, el de la gota de lluvia y el de la inundación.
Podemos imaginar una imagen digital en blanco y negro como una superficie topografica, en
la cual la altitud de cada pixel viene dada por su nivel de gris. Podemos imaginar que una gota
de agua abandonada en un pixel cualquiera caera por la dirección de máximo gradiente hacia
un mı́nimo. Mediante este procedmiento podemos asignar a cada pixel de la imagen una cuenca
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
73
Figure 6.9: Tres etapas en la inundación progresiva de una cuenca formada por una función
de una variable. Las lineas divisorias finales de marcan con lı́neas verticales gruesas (presas). Cuando se usan marcadores (puntos rojos) para los mı́nimos locales seleccionados, sólo se
mantienen separadas las cuencas con marcadores (presas rojas).
DR
AF
T
detrminada o una lı́nea divisoria. Es la aproximación de la gota de lluvia. En primer lugar se
localizan los mı́nimos de la imagen y se etiquetan (mı́nimos adyacentes comparten etiqueta). A
continuación, para todos los pı́xeles no etiquetados se supone una gota de agua partiendo de
ellos que se desplaza al vecino N8 de menor valor hasta que llega a un pı́xel etiquetado, etiqueta
que asume el pixel origen. Este algoritmo presenta problemas cuando se encuentra con mesetas,
espacios llanos sin pendiente en ninguna dirección. Este problema se resuelve con el algoritmo
descrito a continuación.
En una aproximación conceptual de una inundación de la supericie, se imaginan agujeros del
tamaño de un pixel en os mı́nimos locales y se sumerge en agua que ascendera por os agujeros
inundando cada cuenca. Cuando una cuenca está a punto de desbordarse se crea una presa
elevando el máximo local hasta el máximo de la imagen, es decir, las presas se crean para
impedir que se mezcle el agua de distntas cuencas.
El problema más común con la segmentación watershed se que la imagen presenta, normalmente, un exceso de mı́nimos locales que lleva a una sobresegmentación, puesto que se crea una
región a partir de cada mı́nimo local. Para mejorar el algoritmo y reducir la sobresegmentación,
se implementan distintas versiones del algortimo. Todas ellas comienzan con un filtrado y preproceasdo, con objeto de reducir el número de mı́nimos locales y resaltar los bordes de los
objetos.
Luis M. Fuentes
Tratamiento de Imagen y Sonido, UVa
74
Bibliography
[1] Rolf Adams and Leanne Bischof. Seeded region growing. IEEE Trans. Pattern Anal. Mach.
Intell., 16(6):641–647, 1994.
[2] Herman J. C. Berendsen. A Student’s Guide to Data and Error Analysis. Cambridge
University Press, 1 edition, 2011.
[3] John Canny. A computational approach to edge detection. Pattern Analysis and Machine
Intelligence, IEEE Transactions on, PAMI-8(6):679–698, 1986.
T
[4] R. W. G. Hunt. The Reproduction of Colour - 6th Edition. Wiley, 6 edition, 2004.
[5] Prem K. Kalra. Csl783: Digital image processing, 2012.
DR
AF
[6] A. Koschan and M. Abidi. Digital Color Image Processing. Wiley, 2008.
[7] Noboyuki Otsu. A threshold selection method from gray-level histograms. Systems, Man
and Cybernetics, IEEE Transactions on, 9(1):62–66, 1979.
[8] William K. Pratt. Digital Image Processing. Wiley-Interscience, 4 edition, 2007.
[9] Ajoy K. Ray Tinku Acharya. Image Processing: Principles and Applications. WileyInterscience, 2005.
[10] Din-Chang Tseng and C.-H. Chang. Color segmentation using perceptual attributes. In
Pattern Recognition, 1992. Vol.III. Conference C: Image, Speech and Signal Analysis, Proceedings., 11th IAPR International Conference on, pages 228–231, 1992.
Descargar