Tema 3. Filtros y transformaciones locales.
Transcripción
Tema 3. Filtros y transformaciones locales.
PROCESAMIENTO AUDIOVISUAL Tema 3. Filtros y transformaciones locales. Programa de teoría 3.1. Filtros y convoluciones. 3.2. Suavizado, perfilado y bordes. 3.3. Filtros no lineales. 3.4. Morfología matemática. A.3. Filtros en IPL y OpenCV. 1. Adquisición y representación de imágenes. 2. Procesamiento global de imágenes. 3. Filtros y transformaciones locales. 4. Transformaciones geométricas. 5. Espacios de color y el dominio frecuencial. 6. Análisis de imágenes. 7. Vídeo y sonido digital. Procesamiento Audiovisual (c) Ginés García Mateos, http://dis.um.es/profesores/ginesgm Temade3.Informática Filtros y transformaciones locales. de Murcia Dept. y Sistemas, Universidad 1 3.1. Filtros y convoluciones. 90 67 75 78 62 68 78 92 87 78 82 102 89 76 85 45 83 80 130 83 109 80 111 39 69 115 154 69 92 115 121 Entrada Transf. local 81 Salida • No se tiene en cuenta la relación de vecindad entre píxeles. El resultado no varía si los píxeles son permutados aleatoriamente y después reordenados. • Transformación local: el valor de un píxel depende de la vecindad local de ese píxel. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3 • Transformación global: R(x,y):= f(A(x,y)) ó R(x,y):= f(A(x,y), B(x,y)) • Filtros y transformaciones locales: R(x,y):= f(A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)) • Ejemplo. Filtro de la media. R(x,y):= (A(x-1,y-1)+A(x,y-1)+A(x-1,y)+A(x,y))/4 92 78 82 - - - 45 80 130 - 74 93 39 115 154 - 70 120 A ∑/4 R Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 4 3.1. Filtros y convoluciones. 3.1. Filtros y convoluciones. • Ejemplo. Entrada 2 3.1. Filtros y convoluciones. • Recordatorio: en las transformaciones globales, cada píxel de salida depende sólo de un píxel de entrada. Transf. global Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • Un tipo interesante de transformaciones locales son las convoluciones discretas. • Convolución discreta: transformación en la que el valor del píxel resultante es una combinación lineal de los valores de los píxeles vecinos en la imagen. Salida • Ejemplo. El filtro de la media es una convolución. • Resultado: la imagen se suaviza, difumina o emborrona. • Las transformaciones locales tienen sentido porque existe una relación de vecindad entre los píxeles. • Recordatorio: un píxel representa una magnitud física en un punto de una escena Æ dos píxeles próximos corresponden a puntos cercanos de la escena Æ el mundo es “continuo” Æ los píxeles próximos tendrán valores parecidos. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 5 R(x,y):= 1/4·A(x-1,y-1) + 1/4·A(x,y-1) + 1/4·A(x-1,y) + 1/4·A(x,y) • Otra forma de ver la convolución: (x-1,y-1) Matriz de coeficientes de la 1/4 combinación lineal. 1/4 (x-1,y) Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. (x,y-1) 1/4 1/4 (x,y) 6 1 3.1. Filtros y convoluciones. 3.1. Filtros y convoluciones. • La matriz de coeficientes es conocida como la máscara o núcleo (kernel) de convolución. • Idea intuitiva: se pasa la máscara para todo píxel de la imagen, aplicando los coeficientes según donde caigan. Máscara de convolución ·1/4 ·1/4 ·1/4 ·1/4 92 78 82 45 80 130 39 115 154 Imagen de salida, R ∑ - - - - 74 93 - 70 120 En X la máscara va de -k a k, y en • Algoritmo. Cálculo de una convolución. Y de -p a p. El Denotamos la convolución como: R:= M⊗A punto central es (0,0) • Entrada. A: imagen de maxX x maxY M: array [-k...k, -p...p] de real • Salida. R: imagen de maxX x maxY • Algoritmo: para cada píxel (x, y) de la imagen A hacer ¿Cuánto valen estos píxeles? Imagen de entrada, A • Sea M una máscara de convolución. Se puede definir como array [-k...k, -p...p] de real R(x, y):= ∑ Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 7 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.1. Filtros y convoluciones. 1/9 1/9 M 1 1 1 1/9 1/9 1/9 1/9· 1 1 1 1/9 1/9 1/9 1 1 1 El valor de un píxel es la media de los 9 píxeles circundantes -1 1 R A R Restar al píxel el valor del píxel de la izquierda Máscara de media aplicada 4 veces R R A • Sobre una imagen se pueden aplicar sucesivas operaciones de convolución: ...M3⊗(M2⊗(M1⊗A))) N Igual que antes, pero factorizamos el múltiplo común (suma total = 1) 8 3.1. Filtros y convoluciones. • Ejemplos. R:= M⊗A M 1/9 ∑ M(i, j)·A(x+i, y+j) i=-k..k j=-p..p Máscara de media + máscara de resta • Ojo: la combinación de convoluciones es equivalente a una sola convolución: M2⊗(M1⊗A) = M⊗A Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 9 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.1. Filtros y convoluciones. • ¿Cómo calcular el resultado de la combinación? • Respuesta: comprobar el efecto sobre una imagen sólo con el píxel central a UNO (“señal impulso”). -1 -1 1 1 1 1 1 ⊗ 1/9· 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ⊗ 0 0 1 0 0 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 -1 ⊗ 1/9· 0 1 1 1 0 = 1/9· 0 1 0 0 -1 0 1 1 1 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 0 0 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.1. Filtros y convoluciones. • Análogamente, algunas convoluciones se pueden obtener combinando otras más simples: núcleos separables. Punto ancla (anchor) • Ejemplo. 1 Máscara equivalente 10 1/3· 1 ⊗ 1/3· 1 1 1 ⊗A = 1/9· 1 1 1 1 1 1 1 1 1 1 ⊗A • Resultado: el filtro de la media es separable. – En lugar de aplicar una máscara de 3x3 se pueden aplicar dos máscaras de 1x3 y 3x1 (máscaras unidimensionales). – Puede ser útil para hacer los cálculos más eficientes. 11 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 12 2 3.1. Filtros y convoluciones. • ¿Qué hacer con los píxeles de los bordes? ·1/4 ·1/4 ·1/4 ·1/4 • Posibilidades: 1. Asignar un 0 en el resultado a los píxeles donde no cabe la máscara. ⊗ 9 4 8 7 8 4 3 2 2 0 0 0 0 7 6 0 5 4 2. Suponer que los píxeles que se salen tienen valor 0 (u otra constante). 3. Modificar la operación en los píxeles que no caben (variar el multiplicador). 4. Suponer que la imagen se “pliega” por los extremos (o se repite como un espejo...). Procesamiento Audiovisual 3.1. Filtros y convoluciones. 9 6 6 8 7 6 5 5 4 2 3 3 4 7 6 2 5 4 5 4 4 7 7 6 8 5 4 • Las convoluciones son una discretización de la idea de convolución usada en señales. (Repasar teoría de señales...) • Diferencias: las convoluciones usadas aquí son discretas y bidimensionales. • Idea: las máscaras de convolución son matrices de números Æ se pueden considerar, a su vez, como imágenes. • Propiedades: – Asociativa: M2⊗(M1⊗A) = (M2⊗M1)⊗A – Conmutativa: M2⊗M1⊗A = M1⊗M2⊗A – Ojo: al aplicar una convolución puede ocurrir saturación de píxeles. Si ocurre esto, el orden sí que puede ser importante. 13 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Tema 3. Filtros y transformaciones locales. 3.2. Suavizado, perfilado y bordes. • Aplicando distintos operadores de convolución es posible obtener diferentes efectos: – Ancho y alto de la región en la que se aplica: w x h. – Posición del ancla. • Suavizado y perfilado son más habituales en restauración y mejora de imágenes. • Bordes y detección de características suelen usarse más en análisis de imágenes. 3.2.1. Operadores de suavizado. Media de 5x5 Media de 21x21 Media de 11x11 Imagen de entrada (340x230) • Normalmente, w y h son impares y el ancla es el píxel central. 1 1 1 1 1 • La máscara es 1 1 1 1 1 1 1 1 un simple array 1 1 1 1 1 1 1 1 de unos de 1 1 1 1 1 1 1 1 tamaño wxh. 17 1 Máscara de media de 3x3 15 • Cuanto mayor es la máscara, mayor es el efecto de difuminación de la imagen. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.1. Operadores de suavizado. • El operador de suavizado más simple es la convolución de media (media aritmética). • Parámetros del operador: – Suavizado: o difuminación de la imagen, reducir contrastes abruptos en la imagen. – Perfilado: resaltar los contrastes, lo contrario al suavizado. – Bordes: detectar zonas de variación en la imagen. – Detección de cierto tipo de características, como esquinas, segmentos, etc. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 14 1 1 1 1 Media de 5x5 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 16 3.2.1. Operadores de suavizado. • Ventajas (respecto a otros suavizados): – Sencillo y rápido de aplicar. – Fácil definir un comportamiento para los píxeles de los bordes: tomar la media de los píxeles que quepan. – Recordatorio: el operador de media es separable. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Media de 5x5 Total: 25 sumas →o(n2) 1 1 1 1 1 1 1 ⊗ 1 1 1 Media de 5x1 y de 1x5 Total: 10 sumas →o(2n) Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 18 3 3.2.1. Operadores de suavizado. • En algunos casos puede ser interesante aplicar suavizados direccionales: horizontales, verticales o en cualquier dirección. 1 1 1 1 1 Media horizontal 5 píxeles 1 0 0 1 1 0 1 0 1 1 0 0 Media diagonal 3p Media vert. 31p Media horiz. 31p Media vertical 3p 3.2.1. Operadores de suavizado. • Ejemplo 1. En una aplicación trabajamos con imágenes capturadas de TV. El canal tiene muchas interferencias, que provocan una oscilación cada 7 píxeles horizontales. ¿Cómo reducir el efecto de las interferencias? Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 19 3.2.1. Operadores de suavizado. • Aplicación de media horizontal de 7 píxeles. • Idea: Probar con una media horizontal de 7 píxeles... Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 20 3.2.1. Operadores de suavizado. 1 1 1 1 1 1 1 • Ejemplo 2. Entrelazado de vídeo: para aumentar la frecuencia de refresco del vídeo se separan las líneas pares y las impares (1/2 imagen = 1 campo, field). Al capturar una imagen, se mezclan los campos produciendo efectos raros. 25 imágenes/seg. → 50 campos/seg. → 20 mseg. entre campos 21 3.2.1. Operadores de suavizado. 22 3.2.1. Operadores de suavizado. • Cuando se aplica la media con tamaños grandes se obtienen resultados artificiosos (a menudo indeseados). 1 1 Media • Aplicar una media vertical de 2 píxeles. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Gaussiana Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • Motivo: la media se calcula en una región cuadrada. 0 0 1 0 0 • Sería mejor aplicarla 0 1 1 1 0 a una región “redonda”. • O, mejor, usar suavizado gaussiano... Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 23 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 24 4 3.2.1. Operadores de suavizado. 3.2.1. Operadores de suavizado. • Suavizado gaussiano: media ponderada, donde los pesos toman la forma de una campana de Gauss. • Ejemplo. Suavizado gaussiano horizontal. Campana discreta Campana de Gauss -x2/s2 – Varianza grande: campana más ancha, más suavizado. – Varianza pequeña: campana más estrecha, menos suavizado. – Se mide en píxeles. • Cálculo de la máscara gaussiana (1D): calcular la función, discretizar en el rango, discretizar en el valor y 1 calcular el multiplicador... s2 es la varianza • ¿No existe una forma más rápida? • Idea: el triángulo de Pascal. 1/64· 1 6 15 20 15 6 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 1 25 3.2.1. Operadores de suavizado. 3.2.1. Operadores de suavizado. 1/8· 1 1/16· 1 1/32· 1 1/64· 1 1 2 3 4 Campana de Gauss 2D f(x,y) = e 1 3 6 6 15 20 15 6 1 ¿Por qué ocurre así? Recordar el teorema central del límite... 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 27 3.2.1. Operadores de suavizado. 2 1 2 1 1 4 2 1 2 1 1 1 2 1 ⊗ 2 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 28 • Comparación: media y suavizado gaussiano, 2D. 1 ⊗ Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 1: blanco 0: negro Gaussiana 21x21 1 4 2 2 3.2.1. Operadores de suavizado. • Propiedad interesante: el filtro gaussiano es separable. • Resultado: se puede obtener un suavizado 2D aplicando dos máscaras gaussianas bidimensionales, una horizontal y otra vertical. 2 1 1 5 10 10 5 2 Máscara gaussiana de 3x3 1/16· 1 4 1 -(x2+y2)/s2 Media de 21x21 1/4· 1 26 Media de 11x11 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • Normalmente, el suavizado gaussiano se aplica en dos dimensiones. Los pesos de la máscara dependen de la distancia al píxel central. • ¡Magia! Las filas del triángulo de Pascal forman discretizaciones de la campana de Gauss. 1/2· 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 Gaussiana 41x41 f(x) = e • La varianza, s2, indica el nivel de suavizado. 29 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 30 5 3.2.1. Operadores de suavizado. 3.2.1. Operadores de suavizado. • Comparación: media y suavizado gaussiano, 1D. Media horiz. 31p Media vert. 31p Gaussiana 61x1 Gaussiana 1x61 • Resultados de la comparación: – El efecto del suavizado gaussiano es más natural (más similar a un desenfoque) que la media. Æ Suele ser más habitual en procesamiento y análisis de imágenes. – Ambos filtros son separables. Æ Si la máscara es de nxn, pasamos de o(n2) a o(2n). 31 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.1. Operadores de suavizado. • Ejemplo 1. Protección de testigos. 3.2.1. Operadores de suavizado. Se aplica un suavizado pero sólo en cierta región de interés (ROI), en este caso elíptica. • Ejemplo 3. Sombra difusa. Añadir a una imagen A una etiqueta de texto B, con un efecto de sombra difuminada. Umbralizar B, con nivel 10 U B ¿Cómo encontrar la posición de la cara Suavizado gaussiano de 15x15, de U • Ejemplo 2. Resaltar objetos de interés. automáticamente? S Se suaviza el fondo para destacar al personaje, simulando un desenfoque. 33 3.2.1. Operadores de suavizado. A M T D Sumar U y D M Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 34 3.2.2. Operadores de bordes. B Sumar T y B, en posición (x0, y0) Multiplicar A por M, en posición (x0, y0) Desplazar S en 7 píxeles en X e Y, y dividir por 2 R • Perfilado y detección de bordes son los efectos contrarios al suavizado: destacar las variaciones en la imagen. • Matemáticamente, la variación de una función viene dada por la derivada. Función continua Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 32 – > 0 : Creciente – < 0 : Decreciente – = 0 : Uniforme Derivada Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. – Para conseguir un mismo “grado de suavizado” la máscara gaussiana debe ser de mayor tamaño. Æ Se puede tomar como medida la varianza de la máscara correspondiente. • La “derivada discreta” se obtiene calculando diferencias. -1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 35 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 36 6 3.2.2. Operadores de bordes. -1 0 0 -1 1 0 1 1 0 Rx R Derivada en X (x2) [0..255]-[0..255]= [-255..255] Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.2. Operadores de bordes. 3.2.2. Operadores de bordes. 2 4 2 1 2 1 Derivada X (+128) Rx = 1 1 -1 -1 2 2 -2 -2 1 1 -1 -1 Filtro de Prewitt 3x3, derivada en X R’x Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. -1 0 1 -2 0 2 -1 0 1 Filtro de Sobel 3x3, derivada en Y -1 -2 -1 0 0 0 1 2 1 • Además, el filtro de Sobel permite calcular derivadas conjuntas en X e Y, derivadas segundas, terceras, etc. • Ejemplo. Derivada segunda en X. -1 1 ⊗ -1 1 = -1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 2 1 0 1 -1 0 1 Filtro de Prewitt 3x3, derivada en Y -1 -1 -1 0 0 0 1 1 1 Filtro de Scharr 3x3, derivada en X -3 0 3 -10 0 10 -3 0 3 Filtro de Scharr 3x3, derivada en Y -3 -10 -3 0 0 0 3 10 3 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 40 3.2.2. Operadores de bordes. • Filtros de Sobel: se construyen usando la derivada de la gaussiana. Filtro de Sobel 3x3, derivada en X 0 -1 • Filtros de Scharr: 39 3.2.2. Operadores de bordes. -1 -1 41 • Ejemplos. Prewitt Y (3x3) ⊗ 1 1 38 • Existen algunos operadores de bordes estándar. • Filtros de Prewitt: Suaviz. + Deriv. X -1 2 • Se produce una especie de “bajorrelieve”, que puede usarse como “efectos especiales”... 37 • Los operadores de bordes son muy sensibles al ruido. • Es posible (y adecuado) combinar los operadores de bordes con suavizados. 1 Ry Sobel 2ª deriv. Y Imagen de entrada • Ejemplo. Derivada en X. R:= M⊗A A – Gris 128: diferencia 0 – Negro: decreciente – Blanco: creciente Derivada Y (+128) -1 • Los bordes decrecientes se saturan a 0... • Podemos sumar 128 para apreciar mejor el resultado: Derivada X (+128) 1 3.2.2. Operadores de bordes. Derivadas en diagonales: Imagen de entrada -1 Derivada en Y: Sobel Y (3x3) Máscara de derivada en X (M): Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 42 7 3.2.2. Operadores de bordes. 3.2.2. Operadores de bordes. • Realmente, en dos o más dimensiones, en lugar de la derivada tiene más sentido el concepto de gradiente. • ¿Qué es el gradiente? Æ Repasar cálculo... • El gradiente indica la dirección de máxima variación de una función (en 2D, la máxima pendiente). • El gradiente en un punto es un vector (u, v): – Ángulo: dirección de máxima variación. – Magnitud: intensidad de la variación. dy (u, v) dx • El gradiente está relacionado con las derivadas: – u = Derivada en X del punto – v = Derivada en Y del punto – Teniendo dy y dx, ¿cuánto vale el ángulo y la magnitud? Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 43 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.2. Operadores de bordes. 3.2.2. Operadores de bordes. • Cálculo del gradiente: – Calcular derivada en X: Dx (por ejemplo, con un filtro de Sobel, Prewitt,...) – Calcular derivada en Y: Dy – Magnitud del gradiente: Dx2 + Dy2 – Ángulo del gradiente: atan2 (Dx, Dy) Valor absoluto de derivada en X (Sobel de 3x3) Valor absoluto de derivada en Y (Sobel de 3x3) 44 • El gradiente da lugar al concepto de borde. • Un borde en una imagen es una curva a lo largo de la cual el gradiente es máximo. El borde es perpendicular a la dirección del gradiente. Magnitud del gradiente Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 45 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.2. Operadores de bordes. 3.2.2. Operadores de bordes. • Los bordes de una escena son invariantes a cambios de luminosidad, color de la fuente de luz, etc. Æ En análisis de imágenes usar los bordes (en lugar de las originales). • Otras formas de calcular los bordes: 1. Calcular la derivada en diferentes direcciones: D1, D2, D3, D4. 2. Para cada punto, la magnitud del gradiente es la derivada de máximo valor absoluto: G(x,y):= max {|D1(x,y)|, |D2(x,y)|, |D3(x,y)|, |D4(x,y)|} 3. La dirección del gradiente viene dada por el ángulo que ha producido el máximo: A(x,y):= argmax {|D1(x,y)|, |D2(x,y)|, |D3(x,y)|, |D4(x,y)|} -1 -1 -1 -1 -1 0 -1 0 1 0 1 1 0 0 0 -1 0 1 -1 0 1 -1 0 1 1 1 1 0 1 -1 0 1 -1 -1 0 D1: N-S Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 46 47 1 D2: NE-SO D3: E-O Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. D4: SE-NO 48 8 3.2.2. Operadores de bordes. df(x)/dx Másc. Gaussiana Operador de suavizado -1 8 -1 0 -1 -1 -1 1 0 d2f(x)/dx2 Másc. Sobel Operador de derivación Másc. Laplaciana Operador de gradiente Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 49 3.2.2. Operadores de bordes. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. – No sólo usa convoluciones (operadores de gradiente), sino que busca el máximo gradiente a lo largo de un borde. – El resultado es una imagen binaria (borde/no borde), ajustable mediante un umbral. • Perfilado: destacar y hacer más visibles las variaciones y bordes de la imagen. Es lo contrario al suavizado. • Permite eliminar la apariencia borrosa de las imágenes, debida a imperfecciones en las lentes. • ... aunque tampoco se pueden hacer milagros... ← Suavizado 51 -1 0 0 0 -1 8 -1 0 1 0 -1 -1 -1 0 0 0 + Perfilado = -1 -1 -1 -1 9 -1 -1 -1 -1 • Más o menos perfilado dando distintos pesos, a y b. 0 -1 0 0 0 0 a· -1 4 0 1 0 0 -1 -1 + b· 0 0 0 0 0 -a 0 = -a 4a+b -a Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 0 -a 52 /b 0 53 • Ejemplos. Variando pesos y tamaño de la laplaciana. Imagen de entrada Identidad -1 Perfilado → Perfilado 60%, 1x1 Laplaciana Original Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.2.3. Operadores de perfilado. 3.2.3. Operadores de perfilado. • El perfilado se puede conseguir con una media ponderada entre la imagen original y la laplaciana. • Lo cual equivale a usar una máscara de convolución adecuada: -1 50 3.2.3. Operadores de perfilado. • Detector de bordes de Canny: Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. “Diferencia entre el píxel central y la media de sus vecinos...” Perfilado 33%, 3x3 2 -1 -1 -1 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Perfilado 15%, 7x7 2 f(x) = e -x /s 0 1 -4 1 0 Laplaciana 2 (3x3) • Otra forma más sencilla (aproximada) es usar máscaras de convolución adecuadas, por ejemplo de Laplace. • La función de Laplace es la segunda derivada de la gaussiana. • La máscara laplaciana se define usando la función de Laplace. • Ejemplos de máscaras de Laplace. Imagen de entrada 3.2.2. Operadores de bordes. 54 9 3.2.3. Operadores de perfilado. 3.2. Suavizado, perfilado y bordes. • Cuidado con el perfilado. La operación de perfilado aumenta el nivel de ruido de la imagen. Imagen con ruido por compresión JPEG Imagen con ruido por interferencias TV Perfilado 60%, 3x3 Perfilado 33%, 3x3 Conclusiones: Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • Las convoluciones son una herramienta fundamental en procesamiento de imágenes. – Una misma base común: combinaciones lineales de una vecindad local de los píxeles (de cierto tamaño). – Diversos usos: según los valores de los coeficientes: suavizado, eliminación de ruido, bordes, perfilado, etc. • Se pueden definir operaciones similares sobre vídeo (usando la dimensión temporal, por ejemplo, suavizado a lo largo del tiempo), y sobre audio digital (por ejemplo, suavizado de la señal o introducción de eco). • Es importante conocer el significado matemático de los procesos aplicados (derivadas, gradientes, integrales,...). 55 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.3. Filtros no lineales. 56 3.3. Filtros no lineales. • Recordatorio: las transformaciones locales son funciones del tipo: • Ejemplo. Media geométrica. ... muy parecido a la media aritmética... R(x,y):= f(A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)) • En las convoluciones, f es una combinación lineal cualquiera. Pero... • También puede ser interesante usar otras funciones no lineales. • Aunque existen muchas (en teoría infinitas) posibles transformaciones no lineales, en la práctica no todas son útiles e interesantes. • Las que más se usan son: máximo, mínimo y media. • Ejemplo, media geométrica. 4 R(x,y):= A(x-1,y-1)·A(x,y-1)·A(x-1,y)·A(x,y) Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 57 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.3. Filtros no lineales. 58 3.3. Filtros no lineales. • Filtro de Máximo: • Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Máx., tamaño 12 Máximo, tamaño 3 Máx., tamaño 6 Imagen de entrada R(x,y):= max {A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)} donde k es el radio, el tamaño (o apertura) es 2k+1 59 El resultado es un cierto efecto de difuminación y aclaramiento de la imagen. Desaparecen los detalles más oscuros. • Si el tamaño es grande, pueden ocurrir dos efectos: 1. Efecto de cuadriculado. Como el máximo se aplica en una zona cuadrada, los píxeles muy claros generan un cuadrado uniforme alrededor. 2. Aparición de colores falsos. Al aplicarlo en los tres canales (R,G,B) independientemente, el máximo en los 3 puede no corresponder a un color presente en la imagen original. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 60 10 3.3. Filtros no lineales. 3.3. Filtros no lineales. • Filtro de Mínimo: • El efecto es parecido al máximo, pero tomando los valores menores (los más oscuros). Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Mínimo, tamaño 3 Máximo Mín., tamaño 12 Mín., tamaño 6 Imagen de entrada R(x,y):= min {A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)} donde k es el radio, el tamaño (o apertura) es 2k+1 Mínimo • Ideas: – Para evitar el efecto de cuadriculado se podría aplicar el máximo/mínimo a una zona circular. – Para evitar la aparición de colores falsos se podría tomar el máximo de las sumas de R+G+B. 61 3.3. Filtros no lineales. • Otro filtro relacionado es el de la mediana. • La mediana de m números es un número p tal que m/2 de esos números son ≤ p, y otros m/2 son ≥ p. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 62 3.3. Filtros no lineales. • La mediana produce un efecto de suavizado, aunque más “abrupto” en los bordes que la media y el suavizado gaussiano. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Mediana 3x3 Mediana 12x12 Mediana 6x6 Imagen de entrada R(x,y):= mediana {A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)} 63 3.3. Filtros no lineales. Mediana Suavizado gaussiano Mediana • Pero el verdadero interés es la eliminación de ruido puntual. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 64 3.3. Filtros no lineales. • Se puede intentar eliminar (o reducir) el ruido con un filtro gaussiano o con una mediana. Filtro gaussiano Mediana 3x3 • Ejemplo. El ruido denominado “sal y pimienta” es producido por picos de perturbación, positivos o negativos. Puede deberse a un canal ruidoso. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 65 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 66 11 Mediana 3x3 3.3. Filtros no lineales. • Otros ejemplos de eliminación de ruido. Mediana 7x7 3.3. Filtros no lineales. • Se puede intentar eliminar (o reducir) el ruido con un filtro gaussiano o con una mediana. Mediana 7x3 Filtro gaussiano Con este tipo de ruido funciona mucho mejor El ruido se difumina, pero no llega a desaparecer Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 67 3.3. Filtros no lineales. 68 3.3. Filtros no lineales. • Más filtros no lineales: recordar la ecualización local del histograma. – Considerar una operación global como el estiramiento, la ecualización del histograma o la umbralización. – Globalmente se calculan los parámetros y se aplican a toda la imagen: estiramiento (máximo y mínimo del histograma), ecualización (función de ecualización) y umbralización (umbral a aplicar). – En lugar de aplicarlos globalmente, calcular los parámetros para cada punto, usando una vecindad local. – Aplicar la transformación a cada punto, usando sus parámetros específicos. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 69 3.3. Filtros no lineales. • Algoritmo. Ecualización local de tamaño axb: 1. Para cada punto (x,y) de la imagen A, calcular el histograma de una región rectangular desde (x-a, y-b) hasta (x+a, y+b) → H(v) 2. Calcular el percentil del valor A(x,y), es decir: p:= (H(0)+H(1)+...H(A(x,y)))/((2a+1)(2b+1)) 3. Hacer R(x,y):= 255·p 0,62*255 = 158 62% Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 70 3.4. Morfología matemática. • Ejemplo. Ecualización local del histograma. • Los operadores de morfología matemática son un conjunto de filtros locales sencillos, que se pueden combinar para obtener resultados más complejos. • Originalmente, están definidos sobre imágenes binarias. • La idea es muy parecida a una convolución, pero utilizando las operaciones booleanas AND y OR. Imagen de entrada Resolución: 299x202 • Ejemplo. R(x,y):= A(x-1,y-1) AND A(x,y) AND A(x+1,y+1) (x-1,y-1) Tamaño: 25x25 Tamaño: 50x50 Tamaño: 120x120 • La misma idea se podría aplicar a umbralización y estiramiento. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 71 Elemento estructurante (= máscara de convolución) 1 0 0 0 1 0 0 0 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. (x,y) → Punto de ancla (x+1,y+1) 72 12 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 73 3.4. Morfología matemática. – Abrir. Aplicar erosión y después dilatación: (B⊗E)⊕E – Cerrar. Aplicar dilatación y después erosión: (B⊕E)⊗E 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Dilatación 1 Erosión 3 1 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 74 • Ejemplo. Segmentación de objetos. Para segmentar un objeto del fondo usamos una simple umbralización. Funciona más o menos bien, pero aparecen algunos puntos mal clasificados. Umbralizada (u=130) Imagen de entrada Abrir: desaparecen los puntos sueltos o estructuras finas Imagen de entrada 1 Elemento estructurante 3.4. Morfología matemática. • Existen otras dos operaciones frecuentes basadas en erosión y dilatación: Elemento estructurante Imagen de entrada Erosión 1 • La idea se puede generalizar a imágenes no binarias: – Dilatación. Combinar con Máximo. – Erosión. Combinar con Mínimo. • El efecto de la dilatación es extender o ampliar las regiones de la imagen con valor 1 (color blanco), mientras que la erosión las reduce. • La cantidad depende del tamaño y forma del elemento estructurante y del número de veces que se aplican. • Ejemplo. Dilatación 3 3.4. Morfología matemática. 3.4. Morfología matemática. • El elemento estructurante define los píxeles que se usan en la operación y los que no. • Dado un elemento estructurante, E, de cierta forma y tamaño, y una imagen binaria B, se definen dos operaciones: – Dilatación B⊕E. Combinar con OR los valores correspondientes a los píxeles 1 del elemento estructurante. – Erosión B⊗E. Combinar con AND los valores correspondientes a los píxeles 1 del elemento estructurante. Cerrar: se rellenan los huecos negros de cierto tamaño 1 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 75 3.4. Morfología matemática. Cerrar 2 (B⊕E⊕E)⊗E⊗E Abrir 1 (B⊗E)⊕E Erosión 2 (B⊗E)⊗E Falsos positivos Falsos negativos Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 76 3.4. Morfología matemática. • El resultado es la máscara para segmentar el objeto. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • ¿Por qué son importantes las dos últimas erosiones? Eliminar píxeles de los bordes Eliminar falsos positivos Eliminar falsos negativos Imagen umbralizada • Usar morfología para arreglar los falsos. 77 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 78 13 3.4. Morfología matemática. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 3.4. Morfología matemática. • Existen otras operaciones de morfología, basadas en las elementales, que son útiles en análisis de imágenes. • Ejemplo 1. Borde morfológico: (B⊕E) - B Borde morfológico Erosión, 1 Imagen de entrada • Ejemplo 2. Adelgazamiento Cierre, 2 Dilatación, 3 Imagen entrada • En imágenes no binarias, el resultado de dilatación y erosión es parecido a las operaciones de máximo y mínimo. • De hecho, es igual si el elemento estructurante es todo 1. 79 (thinning). Aplicar una erosión, pero no eliminar el punto (no poner a 0) si se separa una región conexa en varias o si sólo queda un punto. Procesamiento Audiovisual 80 Tema 3. Filtros y transformaciones locales. 3. Filtros y transformaciones locales. Anexo A.3. Conclusiones: • Las operaciones de procesamiento local son esenciales en mejora de imágenes, restauración, análisis, etc. • Dos categorías básicas: – Filtros lineales o convoluciones: la salida es una combinación lineal de los píxeles en una vecindad. Æ Suavizado, bordes, perfilado, etc. – Filtros no lineales: se usan funciones no lineales. Æ Máximo, mínimo, operaciones de morfología, etc. • Es posible combinarlas con operaciones de procesamiento global. • La idea de “localidad” se puede extender a vídeo y a sonido, considerando la dimensión temporal. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 81 A.3. Filtros en IPL y OpenCV. • • • • • Filtros lineales predefinidos. Filtros lineales arbitrarios. Filtros de máximo, mínimo y mediana. Operaciones de morfología matemática. Ejercicios. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 82 A.3. Filtros en IPL y OpenCV. Operaciones de procesamiento local: • Algunas están disponibles en IPL y otras en OpenCV. No queda más remedio que manejar ambas librerías. • De modo práctico, podemos clasificar las operaciones de filtrado en los siguientes grupos: – Filtros lineales predefinidos de suavizado y detección de bordes. Æ OpenCV, IPL – Filtros lineales arbitrarios, definidos por el usuario en tiempo de ejecución. Æ IPL – Filtros de máximo, mínimo y mediana. Æ IPL – Operaciones de morfología matemática. Æ OpenCV • Ojo nuevamente con las restricciones. Algunas operaciones requieren imágenes con 1 canal o profundidad float (recordar cvCvtPixToPlane, cvCvtPlaneToPix y cvConvertScale). Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Filtros en IPL y OpenCV. 83 • Filtros lineales predefinidos: – cvSmooth, cvSobel, cvLaplace, cvCanny (estándar pero no lineal...), iplBlur, iplFixedFilter • Filtros lineales arbitrarios: – IplConvKernel, iplCreateConvKernel, iplGetConvKernel, iplDeleteConvKernel, iplConvolve2D, iplConvolveSep2D • Filtros de máximo, mínimo y mediana: – iplMaxFilter, iplMinFilter, iplMedianFilter • Filtros de morfología matemática: – cvCreateStructuringElementEx, cvReleaseStructuringElement, cvErode, cvDilate, cvMorphologyEx Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 84 14 A.3. Filtros en IPL y OpenCV. A.3. Filtros en IPL y OpenCV. • Filtros de suavizado de una imagen: • Filtros de Sobel de una imagen: void cvSmooth (const CvArr* src, CvArr* dst, int type=CV_GAUSSIAN, int param1=3, int param2=0) – El parámetro type indica el tipo de suavizado a aplicar, que se aplicará según los tamaños dados en param1 y param2: • CV_BLUR: media de param1xparam2. • CV_BLUR_NO_SCALE: media, pero sin dividir por el número de píxeles (usar sólo con profundidades mayores que 8 bits). • CV_GAUSSIAN: filtro gaussiano de param1xparam2. • CV_MEDIAN: filtro de mediana, de param1xparam1 (siempre cuadrado). • CV_BILATERAL: es un filtro de suavizado. No es una convolución en el sentido tradicional. Reduce el número de colores de una imagen, pero no altera los bordes abruptos. param1 indican el grado de similaridad entre colores, y param2 es un parámetro espacial. Ver la documentación. void iplBlur (IplImage* srcImage, IplImage* dstImage, int nCols, int nRows, int anchorX, int anchorY) – Aplica un filtro de media de tamaño nColsxnRows, con ancla en la posición especificada. – Es más recomendable cvSmooth, pues maneja mejor los extremos de la imagen. Procesamiento Audiovisual 85 Tema 3. Filtros y transformaciones locales. A.3. Filtros en IPL y OpenCV. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 86 A.3. Filtros en IPL y OpenCV. void cvLaplace (const CvArr* I, CvArr* J, int apertureSize=3) – I: imagen de origen, J: imagen de destino. Ambas deben ser de 1 solo canal. Además, J debe ser de 16 bits (si I es de 8), o float de 32. – apertureSize: tamaño de la máscara de convolución (igual que cvSobel). – Calcula la laplaciana de una imagen (suma de las 2ª derivadas en X e Y). • Filtro de bordes de Canny: void cvCanny (const CvArr* img, CvArr* edges, double threshold1, double threshold2, int apertureSize=3) – Ojo, es un filtro de bordes más avanzado que los otros. Usa filtros de Sobel y luego un algoritmo voraz para extraer los bordes más relevantes. También requiere imágenes de 1 sólo canal, pero edges puede ser de 8 bits. – threshold1, threshold2: umbrales del algoritmo. Se refieren al valor mínimo de la magnitud del gradiente para ser considerada como un borde relevante. – apertureSize: tamaño de la máscara de convolución (igual que cvSobel). 87 A.3. Filtros en IPL y OpenCV. tmp= cvCreateImage(ggmGetSize(img), IPL_DEPTH_8U, 1); tmp2= cvCreateImage(ggmGetSize(img), IPL_DEPTH_8U, 1); cvCvtColor(ent, tmp, CV_RGB2GRAY); cvCanny(tmp, tmp2, param*4, param*3); // Probar, p.ej., param=20 cvZero(sal); cvCopy(img, sal, tmp2); • Otras convoluciones predefinidas: void iplFixedFilter (IplImage* src, IplImage* dst, IplFilter filter) – El parámetro filter es un nombre de filtro predefinido. Puede valer: • IPL_PREWITT_3x3_V, IPL_PREWITT_3x3_H, IPL_SOBEL_3x3_V, IPL_SOBEL_3x3_H, IPL_LAPLACIAN_3x3, IPL_LAPLACIAN_5x5, IPL_GAUSSIAN_3x3, IPL_GAUSSIAN_5x5, IPL_HIPASS_3x3, IPL_HIPASS_5x5, IPL_SHARPEN_3x3. – Admite imágenes con 1 ó 3 canales, y distintas profundidades. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 88 A.3. Filtros en IPL y OpenCV. • Filtros lineales arbitrarios: son los más flexibles. Nos definimos la máscara de convolución que queramos y la aplicamos sobre las imágenes. No hace falta si el filtro es uno de los predefinidos. • Los elementos de la máscara de convolución pueden ser enteros (16 bits), char (8 bits) o float (32 bits). • Para representar las máscaras de convolución se definen los tipos: IplConvKernel (enteros y char) y IplConvKernelFP (float). • Usaremos punteros a estos tipos y operaciones de: – Crear una máscara: iplCreateConvKernel, iplCreateConvKernelChar, iplCreateConvKernelFP – Eliminar una máscara: iplDeleteConvKernel, iplDeleteConvKernelFP – Aplicar una máscara: iplConvolve2D, iplConvolve2DFP – Obtener los datos de una máscara (en la mayoría de los casos, esto será innecesario): GetConvKernel, GetConvKernelChar, GetConvKernelFP Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. IplImage *tmp, *can[9]; tmp= cvCreateImage(ggmGetSize(img), IPL_DEPTH_32F, 3); cvConvert(img, tmp); for (i= 0; i<9; i++) can[i]= cvCreateImage(ggmGetSize(img), IPL_DEPTH_32F, 1); cvCvtPixToPlane(tmp, can[0], can[1], can[2], 0); for (i= 0; i<3; i++) { cvSobel(can[i], can[3+i], 1, 0, 3); cvPow(can[3+i], can[3+i], 2.0); // Derivada X cvSobel(can[i], can[6+i], 0, 1, 3); cvPow(can[6+i], can[6+i], 2.0); // Derivada Y cvAdd(can[3+i], can[6+i], can[3+i], 0); cvPow(can[3+i], can[3+i], 0.5); // Módulo } cvCvtPlaneToPix(can[3], can[4], can[5], 0, tmp); cvConvert(tmp, res); // Se supone que res es 8U con 3 canales for (i= 0; i<9; i++) cvReleaseImage(&can[i]); cvReleaseImage(&tmp); – Ejemplo. Aplicación del operador de bordes de Canny, sobre img. • Filtros de Laplace de una imagen: Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. void cvSobel (const CvArr* I, CvArr* J, int dx, int dy, int apertureSize=3) – I: imagen de origen, J: imagen de destino. Ambas deben ser de 1 solo canal. Además, J debe ser de 16 bits (si I es de 8), o float de 32. – dx, dy: orden de la derivada en X y en Y. Normalmt. usaremos (1,0) o (0,1). – apertureSize: tamaño de la máscara de convolución: -1 (filtro de Scharr), 1 (resta simple), 3, 5 ó 7. – Ejemplo. Obtener la magnitud del gradiente de la imagen img con 3 canales. 89 • Crear una máscara de convolución arbitraria: IplConvKernel* iplCreateConvKernel (int nCols, int nRows, int anchorX, int anchorY, int* values, int nShiftR) – Crea una nueva máscara de convolución de enteros, con tamaño nColsxnRows, y ancla en (anchorX,anchorY). – Los pesos de la máscara están dados en el array values, de arriba hacia abajo, de izquierda a derecha. – nShiftR indica un factor multiplicativo. Después de aplicar la convolución, se desplaza el resultado a la derecha nShiftR bits. – Ver también: iplCreateConvKernelChar, iplCreateConvKernelFP – Ejemplo. Crear una máscara de convolución de tamaño 3x3: int pesos[9]= {1, 1, 1, 1, 0, 1, 1, 1, 1}; IplConvKernel*ker= iplCreateConvKernel(3, 3, 1, 1, pesos, 3); ... // Pregunta: ¿cómo es la máscara creada? iplDeleteConvKernel(ker); Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 90 15 A.3. Filtros en IPL y OpenCV. A.3. Filtros en IPL y OpenCV. • Eliminar una máscara de convolución arbitraria: • Ver también: iplConvolve2DFP void iplDeleteConvKernel (IplConvKernel* kernel) – Ver también: iplDeleteConvKernelFP • Recordar la idea de separabilidad de filtros: algunos filtros 2D son equivalentes a un filtro 1D horizontal seguido de otro 1D vertical. • Aplicar una máscara de convolución arbitraria (o varias): void iplConvolve2D (IplImage* src, IplImage* dst, IplConvKernel** kernel, int nKernels, int combineMethod) – Las imágenes de origen y destino pueden ser multicanal. Se aplica el mismo filtro en todos los canales (si no se usan COI). – Admite modo in-place. – Normalmente se aplicará una sola máscara, pero se pueden aplicar varias máscaras a la vez y sus resultados son combinados según combineMethod: IPL_SUM, IPL_SUMSQ (suma de cuadrados), IPL_SUMSQROOT (raíz de la suma de los cuadrados), IPL_MAX, IPL_MIN. – nKernels es el número de máscaras, y kernel es el array que las contiene. – Ejemplo. Aplicar a una imagen img la máscara ker antes definida: ... iplConvolve2D(img, img, &ker, 1, 0); ... Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 91 A.3. Filtros en IPL y OpenCV. – La máscara xKernel debe tener una sola fila. – La máscara yKernel debe tener una sola columna. – Se aplica primero una máscara y luego la otra. Una de ellas puede ser NULL. – Admite imágenes multicanal, pero no modo in-place. – Ver también iplConvolveSep2DFP. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 92 • Filtros no lineales de máximo, mínimo y mediana: • Ojo: al aplicar un filtro es importante saber qué ocurre con los píxeles de los extremos. ¿Qué pasa cuando la máscara cae fuera de la imagen? • Tenemos una función para definir el comportamiento en los bordes: void iplSetBorderMode (IplImage * src, int mode, int border, int constVal) – mode indica cómo tratar los píxeles exteriores: IPL_BORDER_ {CONSTANT, REPLICATE, REFLECT, BORDER_WRAP} – border dice sobre qué borde se aplica: IPL_SIDE_{TOP, BOTTOM, LEFT, RIGHT, ALL}. – Ejemplo. En el ejemplo de arriba, antes de aplicar el filtro poner: iplSetBorderMode(img, IPL_BORDER_REPLICATE, IPL_SIDE_ALL, 0); y comprobar la diferencia. 93 A.3. Filtros en IPL y OpenCV. void iplMaxFilter (IplImage* srcImage, IplImage* dstImage, int nCols, int nRows, int anchorX, int anchorY) void iplMinFilter (IplImage* srcImage, IplImage* dstImage, int nCols, int nRows, int anchorX, int anchorY) void iplMedianFilter (IplImage* srcImage, IplImage* dstImage, int nCols, int nRows, int anchorX, int anchorY) – El tamaño del filtro es nColsxnRows y el ancla (anchorX,anchorY) (empezando en 0,0). – Admite imágenes multicanal, pero no permite uso in-place. – Recordar el problema de la aparición de colores falsos. Para evitarlo, existe la función: iplColorMedianFilter. Encuentra la mediana en un espacio de color 3D. – Conceptualmente es más adecuado, pero en la práctica es mucho más lento y produce prácticamente los mismos resultados. – Recordar también: usar la función iplSetBorderMode antes aplicar los filtros (sobre todo en el caso de mínimo y mediana). Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 94 A.3. Filtros en IPL y OpenCV. • Filtros de morfología matemática: el manejo es parecido a las convoluciones arbitrarias. Definimos un elemento estructurante y aplicamos sobre las imágenes operaciones de erosión, dilatación, apertura y cierre. • El elemento estructurante es de tipo IplConvKernel, aunque también podemos usar por defecto un rectángulo de 3x3. • Crear y liberar un elemento estructurante: – cvCreateStructuringElementEx, cvReleaseStructuringElement • Operaciones básicas de morfología matemática: – cvErode, cvDilate • Crear un elemento estructurante: IplConvKernel* cvCreateStructuringElementEx (int nCols, int nRows, int anchorX, int anchorY, CvElementShape shape, int* values) – Los parámetros son casi los mismos que con iplCreateConvKernel, con algunas salvedades: 1) No hace falta ningún factor de escala, porque el elemento es simplemente de valores booleanos: cero / no cero. 2) Se pueden usar elementos con formas predefinidas por defecto, con el parámetro shape. Valores: CV_SHAPE_RECT, CV_SHAPE_CROSS, CV_SHAPE_ELLIPSE, CV_SHAPE_CUSTOM. 2) Si shape vale CV_SHAPE_CUSTOM, las celdas (cero / no cero) del elemento están dadas en values (de arriba abajo, de izquierda a derecha). • Liberar un elemento estructurante: • Operaciones extendidas: void cvReleaseStructuringElement (IplConvKernel** ppElement) – cvMorphologyEx Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. void iplConvolveSep2D (IplImage* src, IplImage* dst, IplConvKernel* xKernel, IplConvKernel* yKernel) A.3. Filtros en IPL y OpenCV. – Ejemplo. Definir y aplicar a una imagen img un filtro separable: int pesos[9]= {4, 2, 1, 1, 0, 1, 1, 2, 4}; IplConvKernel* kerx= iplCreateConvKernel(9, 1, 4, 0, pesos, 4); IplConvKernel* kery= iplCreateConvKernel(1, 9, 0, 4, pesos, 4); iplConvolveSep2D(img, res, kerx, kery); iplDeleteConvKernel(kerx); iplDeleteConvKernel(kery); Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. • Aplicar un filtro separable arbitrario a una imagen: – Ojo, ver que recibe un doble puntero. – Si *ppElement es NULL, no hace nada. 95 Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 96 16 A.3. Filtros en IPL y OpenCV. A.3. Filtros en IPL y OpenCV. • Aplicar erosión morfológica a una imagen: • Aplicar operaciones morfológicas compuestas: void cvErode (const CvArr* A, CvArr* C, IplConvKernel* B=0, int iterations=1) – Aplica uno o varios pasos de erosión, según el parámetro iterations. – Soporta modo in-place e imágenes multicanal. – Si el elemento B es NULL (el valor por defecto) se usa un rectángulo de 3x3. void cvMorphologyEx (const CvArr* A, CvArr* C, CvArr* temp, IplConvKernel* B, CvMorphOp op, int iterations) – Permite aplicar una operación morfológica compuesta por otras elementales, erosiones, dilataciones y diferencias. – El parámetro op indica el tipo de operación: CV_MOP_OPEN, CV_MOP_CLOSE, CV_MOP_GRADIENT, CV_MOP_TOPHAT, CV_MOP_BLACKHAT. – El parámetro temp es una imagen temporal para cálculos internos (del mismo tamaño y tipo que A y C). Se necesita en los tres últimos tipos de operaciones. – Ejemplo. Las dos siguientes cosas deberían dar lo mismo: • Aplicar dilatación morfológica a una imagen: void cvDilate (const CvArr* A, CvArr* C, IplConvKernel* B=0, int iterations=1) – Aplica uno o varios pasos de dilatación, según el parámetro iterations. – Soporta modo in-place e imágenes multicanal. – Si el elemento B es NULL (el valor por defecto) se usa un rectángulo de 3x3. – Ejemplo. Aplicar una dilatación de 5x5, con elemento en forma de cruz. IplConvKernel* el= cvCreateStructuringElementEx(5,5,2,2,CV_SHAPE_CROSS, 0); cvErode(img, res, el, 1); cvReleaseStructuringElement(&el); cvMorphologyEx(img, res, tmp, NULL, CV_MOP_OPEN, 1); cvErode(img, tmp, NULL, 1); cvDilate(tmp, res, NULL, 1); – Ver también el programa “morphology.c” en los ejemplos de OpenCV. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 97 Ejercicios: 1. Escribir un programa que dadas dos imágenes (con tamaño igual o no), realice una transición entre una y otra utilizando un suavizado como paso intermedio (graduado de menos a más). Implementar la operación de ecualización y estiramiento local del histograma. La operación debe tener un parámetro que indique el tamaño de la vecindad local del histograma. Escribir una operación que realice un suavizado de tipo y tamaño ajustable, y restringido a una zona elíptica pasada como parámetro. Implementar una operación de perfilado, en la que se pueda ajustar el nivel del perfilado y el ancho del filtro. Implementar una operación para calcular la magnitud y la dirección del gradiente de una imagen, utilizando el operador de Sobel. Implementar una operación que escriba un texto en una imagen, con cvPutText, añadiendo un efecto de sombra difusa. 3. 4. 5. 6. 98 A.3. Filtros en IPL y OpenCV. • 2. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. Procesamiento Audiovisual Tema 3. Filtros y transformaciones locales. 99 17