Visión Sesión 2: Filtrado de imágenes Departamento CCIA http://www.jtech.ua.es/vision/2011/ Hoy • • • • • • • Representación de imágenes Tipos de datos e imágenes en OpenCV Filtros lineales Suavizado del ruido Resaltado de aristas con filtros lineales Operadores morfológicos Filtros y operaciones en OpenCV • Referencias • Svetlana Lazebnik • Michael J. Black • Derek Hoeim 2 Imágenes como funciones • Podemos pensar en una imagen como una función f, de R2 to R: • f ( x, y ) devuelve la intensidad en la posición ( x, y ) • En la realidad, la imagen sólo está definida sobre un rectángulo [a,b]x[c,d] • Una imagen de color son tres funciones juntas. Podemos formalizar este concepto con una función color image is just three functions pasted together. We can write this as a “vector-valued” function: (S. Seitz) 3 ¿Qué es una imagen digital? • Trabajamos con imágenes digitales (discretas): • Muestreamos al espacio 2D sobre una rejilla regular • Discretizamos cada muestra (se redondea hasta el entero más cercano) • Si nuestras muestras están separadas en Δ, podemos escribir esto como: • f[i ,j] = Quantize{ f(i Δ, j Δ) } • La imagen puede representarse entonces como una matriz de valores enteros 4 Discretización • Array deArray sensores Sensor CMOS sensor • Perfil real 1D Actual 1D profile CS143 Intro to Computer Vision ©Michael J. Black 5 Imágenes digitales • Niveles de gris The raster image (pixel matrix) 0.92 0.95 0.89 0.96 0.71 0.49 0.86 0.96 0.69 0.79 0.91 0.93 0.89 0.72 0.95 0.81 0.62 0.84 0.67 0.49 0.73 0.94 0.94 0.82 0.51 0.88 0.81 0.60 0.74 0.54 0.56 0.90 0.89 0.97 0.89 0.55 0.94 0.87 0.58 0.58 0.85 0.66 0.67 0.49 0.62 0.56 0.51 0.56 0.57 0.50 0.51 0.48 0.43 0.33 0.41 0.37 0.31 0.42 0.46 0.37 0.60 0.39 0.37 0.42 0.61 0.78 0.85 0.75 0.57 0.91 0.80 0.58 0.73 0.88 0.77 0.69 0.78 0.97 0.92 0.41 0.87 0.88 0.50 0.92 0.90 0.73 0.79 0.77 0.93 0.81 0.49 0.90 0.89 0.61 0.91 0.94 0.71 0.73 0.89 0.92 0.95 0.91 0.97 0.79 0.45 0.49 0.82 0.90 0.93 0.99 0.99 0.91 0.92 0.95 0.85 0.33 0.74 0.93 0.99 0.97 0.93 • Color, 3 canales Color Image (R,G,B) R G B (Hoeim) 6 Tipos de datos de OpenCV • Tipos de datos en OpenCV • Matrices e imágenes • CvArr: clase abstracta • CvMat: matriz 2D multi-canal • • Constructor: CreateMat(filas: int, columnas: int, tipo: int) tipo = CV_<bit_depth><S|U|F>C<num_channels> • • Ejemplo: CreateaMat(200,200, cv.CV_32FC3) devuelve una matriz formada por tuplas de 3 números reales de 32 bits Otros constructores: • CreateMatHeader(filas: int, columnas: int, tipo: int) • CreateData(array: CvArr) • IplImage: imagen. Añade algunos elementos a CvMat propios de imágenes. • CreateImage (size: CvSize, depth: int, channels: int) 7 Estructura de imagen en OpenCV • Las matrices se mapean en memoria como una secuencia de números del tipo especificado • Para recorrer las matrices de forma eficiente (C): • Posición de un punto en la matriz • ROI: Región de interés • xOffset, yOffset, height, weight 8 Filtros • Transforman imágenes in nuevas imágenes • Aplicaciones: • Suavizado del ruido • Resaltado de aristas y otras características de la imagen • Búsqueda de plantillas Hybrid Images, Oliva et al., http://cvcl.mit.edu/hybridimage.htm • • • • Filtros lineales y convolución Muestreo y aliasing Filtros como plantillas Pirámides gaussianas 9 Filtro lineal • Operador de vecindad: el valor resultante de un píxel se calcula como una función de su vecindad • Filtro lineal: • El componente h se denomina el núcleo o máscara del filtro y los valores k,l representan la vecindad del píxel i,j • La operación anterior es una correlación • Convolución: f 10 Convolución • Reemplazamos cada píxel con la media ponderada de los píxeles vecinos • Los pesos se denominan el kernel (o máscara) del filtro • Ejemplo: la media de los 9 puntos vecinos se calcula con el siguiente kernel (mean filter) 1 1 1 1 1 1 1 1 1 • Filtros de imagen en OpenCV • Filter2D realiza una convolución 11 Propiedades de los filtros lineales • Linealidad: filter(f1 + f2) = filter(f1) + filter(f2) filter(a f1 + b f2) = a filter(f1) + b filter(f2) • Invarianza al desplazamiento (shift invariance): el mismo comportamiento independientemente de la posición del pixel: filter(shift(f)) = shift(filter(f)) • • Resultado teórico: cualquier operador lineal invariante al desplazamiento se puede representar con una convolución La linealidad nos permite construir filtros complejos: 12 Propiedades de los filtros lineales • Linealidad: filter(f1 + f2) = filter(f1) + filter(f2) filter(a f1 + b f2) = a filter(f1) + b filter(f2) • Invarianza al desplazamiento (shift invariance): el mismo comportamiento independientemente de la posición del pixel: filter(shift(f)) = shift(filter(f)) • • Resultado teórico: cualquier operador lineal invariante al desplazamiento se puede representar con una convolución La linealidad nos permite construir filtros complejos: unit impulse Gaussian Laplacian of Gaussian 12 Ejemplos con distintas máscaras • Blur 13 Sharpening – = + original detail smoothed (5x5) original = detail sharpened 14 El problema del borde • Cuando la máscara llega a los puntos del borde de la imagen no es posible hacer la convolución • Varias técnicas posibles para “inventarse” los nuevos puntos: • CopyMakeBorder es la función de OpenCV 15 Ruido en las imágenes • Distintos tipos de ruido • Ruido de sal y pimienta (salt and pepper noise): ocurrencias aleatorias de píxeles blancos y negros • Ruido de impulso (impulse noise): ocurrencias aleatorias de píxeles blancos • Ruido gausiano (gaussian noise): variaciones en la intensidad generadas por una distribución gausiana normal 16 Ruido gaussiano • Modela bien el ruido real: suma de múltiples factores • Ejemplo: ruido en imágenes reales • Comparativa de 5 cámaras: iPhone 4S, iPhone 4, Samsung Galaxy SII, Olympus XZ-1, Canon 20D Ars Technica: Can the iPhone 4S replace a "real" digital camera? 17 Suavizado del ruido con el filtro de media • El filtro de media reemplaza un pixel por la media de valores de su vecindad • Se denomina también filtro de caja (box filter) • Suaviza la imagen, eliminando las diferencias y, por tanto, el ruido • Mejora: filtrado gausiano, sustituimos el kernel por un kernel gaussiano que da más peso al centro y menos a los bordes 1 2 1 2 4 2 1 2 1 18 Kernel gaussiano • Distintos valores de la σ y del tamaño del kernel Choosing kernel width cambian la forma de la gaussiana • The Gaussian function has infinite support, but discrete filters use finite kernels Choosing kernel width • Rule of thumb: set filter half-width to about 3 Source: K. Grauman • Consejo: el ancho del kernel debe ser 6σ 19 Separabilidad del filtro gaussiano • Aplicado a convolución de un kernel gaussiano: Separability example 2D convolution ((center location only) y) The e filter e factors ac o s into a product of 1D filters: Perform convolution along rows: * = Followed by convolution along l th the remaining i i column: l * = Source: K. Grauman 20 Filtrado gaussiano para eliminar ruido • Aplicación de un filtro gaussiano y de caja • Distintos valores de σ tienen distintos efectos en el filtrado del ruido. Mayores σ eliminan más ruido, pero difuminan más la imagen 21 se ginal e noise Filtrado de mediana • El filtro gaussiano no funciona bien con ruido sal y pimienta • Salt and pepper noise: contains random occurrences of black and white pixels • Impulse noise: Salt and pepper noise contains random 5x5 Original 3x3 occurrences of white pixels • Filtro de mediana • Gaussian noise: variations in intensity drawn from a Gaussian normal distribution 7x7 Gaussian noise Source: S. Seitz • La mediana es un estimador robusto frente a outliers 22 se ginal e noise Filtrado de mediana • El filtro gaussiano no funciona bien con ruido sal y pimienta • Salt and pepper noise: contains random occurrences of black and white pixels • Impulse noise: Salt and pepper noise contains random 5x5 Original 3x3 occurrences of white pixels • Filtro de mediana • Gaussian noise: variations in intensity drawn from a Gaussian normal distribution 7x7 Gaussian noise Source: S. Seitz • La mediana es un estimador robusto frente a outliers 22 Ejemplos del filtro de mediana 108 Original con ruido Filtro mediana (a) (a) (b) (b) Original(e) con ruido (c) (f) 3 Image proces (d) Figure 3.18 Median and bilateral filtering: (a) original image median filtered; (d) bilaterally filtered; (e) original image with sho (h) bilaterally filtered. Note that the bilateral filter fails to remov different from their neighbors. (e) Filtro gaussiano (f) 3.3 More neighborhood op Filtro de (g)mediana (h) As we have just seen, linear filters can perf e 3.18 Median and bilateral filtering: (a) original image with Gaussian noise; (b) Gaussian filtered However non-linear filters, such as edge-prese n filtered; (d) bilaterally filtered; (e) original image with shot noise; (f) Gaussian filtered; (g) median filt perform even better. Other examples of neigh aterally filtered. Note that the bilateral filter fails to remove the shot noise because the noisy23 pixels ar ators that operate on binary images, as well nt from their neighbors. El filtro de suavizado en OpenCV • Smooth realiza un suavizado de la imagen aplicando distintos tipos de filtros 24 Filtrado para resaltar aristas • Correspond to fast changes • –Aristas: píxeles de la imagen donde se produce un Where the magnitude fuerte of thegradiente derivative is(tanto positivo como negativo) Edges large fast Simple Signal gnitude ve is CS143 Intro to Computer Vision ©Michael J. Black • Imagen suavizada con gaussiana Simple Signal CS143 Intro to Computer Vision nuous ©Michael J. Black Discontinuous Smoothed with Gaussian CS143 Intro to Computer Vision • Primera derivada ©Michael J. Black Smoothed with Gaussian CS143 Intro to Computer Vision ©Michael J. Black 25 Derivadas con filtros lineales • Podemos calcular la derivada con un filtro lineal Compute Derivatives We can implement this as a linear filter: 1.0 -1 0 1 - 1.0 -1 [ -1 1] 0 1 Or [-1 0 1] symmetric CS143 Intro to Computer Vision ©Michael J. Black • En 2D tenemos que utilizar las derivadas parciales con respecto a x e y 26 ¿Funciona con el ruido? • Imagen originalActual 1D profile CS143 Intro to Computer Vision ©Michael J. Black • Suavizada con una gaussiana Smoothed with a Gaussian • DerivadasBarbara signal and derivatives CS143 Intro to Computer Vision CS143 Intro to Computer Vision ©Michael J. Black ©Michael J. Black 27 Filtro suavizado gaussiano y derivada • En 1D Derivatives and Smoothing dG G CS143 Intro to Computer Vision • En 2D ©Michael J. Black In 2D Compare with [-1 0 1] filters. CS143 Intro to Computer Vision ©Michael J. Black 28 ¿Funciona? • La derivada amplifica las pequeñas variaciones 1D Barbara signal Smoothed Signal First Derivative Note the “amplification” of small variations. • Se podría utilizar un umbral para “detectar” las aristas CS143 Intro to Computer Vision ©Michael J. Black Thresholding the Thresholding the Derivative? Derivative? CS143 Intro to Computer Vision CS143 Intro to Computer Vision ©Michael J. Black ©Michael J. Black 29 Una solución mejor: segunda derivada • Cálculo de la segunda Secondderivada Derivative Filter kernel? [1 -2 1] • Las aristas estaríanCS143 enIntrolos cruces por el ©Michael ceroJ. Black (zero to Computer Vision crossing) Maxima of first derivative “zero crossings” of second derivative CS143 Intro to Computer Vision ©Michael J. Black 30 The Laplacian En 2D: Laplaciana • Formulación The Laplacian • Just Unanother filtro lineal Just another linear filter. linear filter. • Kernel de la Laplaciana CS143 Intro to Computer Vision CS143 Intro to Computer Vision ©Michael J. Black ©Michael J. Black 31 Aproximación de la Laplaciana Approximating the Laplacian • La Laplaciana también se puede aproximar como una •diferencia gaussianas a diferentes escalas Difference ofde Gaussians at different scales. The Laplacian Pyramid Laplacian Pyramid Gaussian Pyramid expan d - = CS143 Intro to Computer Vision Sept, 2007 ©Michael J. Black - = - = CS143 Intro to Computer Vision ©Michael J. Black 32 Pirámides de imágenes • Las pirámides de imágenes permiten representar una imagen a múltiples escalas • Múltiples usos: características, compresión • Pirámides gaussianas y laplacianas 33 Cruces por cero • Imagen original LoG zero crossings (where the filter response changes sign) • Cruces por cero de la laplaciana sigma=4 sigma=2 • Se denomina operador de Marr/Hildreth Ponce & Forsyth CS143 Intro to Computer Vision ©Michael J. Black 34 Otros filtros • Sobel • Imágenes “híbridas”, Oliva et al., http://cvcl.mit.edu/ hybridimage.htm 35 Funciones en OpenCV • Laplace aplica un filtro de Laplace • Sobel aplica un filtro de Sobel 36 Funciones en OpenCV • PyrDown reduce la imagen después de aplicar un filtro gaussiano • Threshold realiza un umbralizado de la imagen 37 Filtros morfológicos • Filtros no lineales para imágenes binarias • Convolución de la imagen con el elemento estructurante (kernel), seguida de una umbralización • Definimos la umbralización: • Definimos la convolución entre una imagen f y el elemento estructurante s como el número de píxeles que están a 1 dentro del elemento estructurante de tamaño S • Operaciones: • dilatación(f,s) = 𝜃(c,1) • erosión(f,s) = 𝜃(c,S) • mayoría(f,s) = 𝜃(c,S/2) • • apertura(f,s) = dilatación(erosión(f,s),s) cierre(f,s) = erosión(dilatación(f,s),s) 38 Funciones en OpenCV • CreateStructuringElementEx devuelve un elemento estructurante • Erode realiza una erosión • Dilate realiza una dilatación 39 Funciones en OpenCV • MorphologyEx realiza operaciones morfológicas avanzadas 40 Referencias • Computer Vision: Algorithms and Applications de Szelinsky: cap. 3.1, 3.2, 3.3, 3.5 • Learning OpenCV: cap. 3, 5, 6.1-6.4 41