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.