Filtro lineal

Anuncio
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
Descargar