Professional Documents
Culture Documents
Tema 2. Procesamiento
AUDIOVISUAL
global de imgenes.
Programa de teora
2.1. Tipos de operaciones. Histogramas.
1. Adquisicin y representacin de imgenes.
2. Procesamiento global de imgenes. 2.2. Operaciones elementales con pxeles.
3. Filtros y transformaciones locales. 2.3. Transformaciones del histograma.
4. Transformaciones geomtricas.
2.4. Combinacin de imgenes.
5. Espacios de color y el dominio frecuencial.
6. Anlisis de imgenes. 2.5. Transformaciones de color.
7. Vdeo y sonido digital. A.2. Procesamiento global en OpenCV.
Procesamiento
(c) Gins Garca Audiovisual
Mateos, http://dis.um.es/profesores/ginesgm 1 Procesamiento Audiovisual 2
Temade2.Informtica
Dept. Procesamiento global deUniversidad
y Sistemas, imgenes. de Murcia Tema 2. Procesamiento global de imgenes.
1
2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.
Para comprender el significado de muchas transforma-
R(x,y):= f(A(x,y)), (x,y) ciones y saber cul conviene aplicar se usan histogramas.
Qu es un histograma? Repasar estadstica...
Comparar con: Un histograma representa grficamente una distribucin
Filtros y convoluciones: el valor de un pxel depende de frecuencias.
de la vecindad local de ese pxel: Histograma de una imagen: representa las frecuencias
R(x,y):= f(A(x-k,y-k), ..., A(x,y), ..., A(x+k,y+k)) de los diferentes valores de gris en la imagen.
Transformaciones geomtricas: el valor de un pxel
(nmero de pxeles)
depende de pxeles situados en otras posiciones:
Frecuencia
R(x,y):= A(f1(x,y), f2(x,y))
Transformaciones lineales: el valor de un pxel puede
depender de todos los pxeles de la imagen:
R(x,y):= f(A, x, y) 0 127 255
Nivel de gris
Procesamiento Audiovisual 7 Procesamiento Audiovisual 8
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
Frecuencia
0 127 255
0 127 255
Ejemplo 2. La imagen es muy clara. Sobra brillo. Ejemplo 4. Hay mucho contraste, pocos medios tonos.
Frecuencia
Frecuencia
0 127 255
0 127 255
Procesamiento Audiovisual 11 Procesamiento Audiovisual 12
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
2
2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.
Histogramas de color. En imgenes multicanal podemos O, tambin, podemos calcular histogramas conjuntos, en 2
obtener un histograma de cada canal por separado. 3 dimensiones.
Canales R y G Canales G y B Canales R y B
Canal Rojo Canal Verde Canal Azul Estos histogramas aportan informacin sobre los rangos de
colores ms frecuentes en la imagen.
En teora, el histograma es de 256x256 celdas (bins).
Pero, para obtener buenos resultados, mejor usar un
0 127 255 0 127 255 0 127 255 nmero reducido de celdas. Por ejemplo 64x64 32x32.
Procesamiento Audiovisual 13 Procesamiento Audiovisual 14
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
2.2. Operaciones elementales con pxeles. 2.2. Operaciones elementales con pxeles.
Ojo: la suma puede ser mayor que 255...
Sumar una constante: R(x, y):= A(x, y) + a
La operacin debera comprobar el overflow:
Significado: incrementar el brillo de la imagen en la si A(x, y) + a > 255 entonces R(x, y):= 255
cantidad indicada en a. sino R(x, y):= A(x, y) + a
El histograma se desplaza a la derecha en a pxeles.
Esto se debe hacer tambin en las dems operaciones,
comprobando si el valor es <0 >255.
Coloquialmente, un pxel por encima de 255 o por
debajo de 0 se dice que
Ejemplo de imagen
muy saturada
est saturado.
La saturacin supone
a una prdida de
informacin.
+
Procesamiento Audiovisual 17 Procesamiento Audiovisual 18
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
3
2.2. Operaciones elementales con pxeles. 2.2. Operaciones elementales con pxeles.
En imgenes en color, la suma se realiza sobre los Restar una constante: R(x, y):= A(x, y) - a
tres canales (R, G y B) y con el mismo valor.
Significado: decrementar el brillo de la imagen en la
R(x, y).R:= A(x, y).R + a R(x, y).G:= A(x, y).G + a cantidad indicada en a.
R(x, y).B:= A(x, y).B + a El histograma se desplaza a la izquierda en a pxeles.
2.2. Operaciones elementales con pxeles. 2.2. Operaciones elementales con pxeles.
Multiplicar por una constante: R(x, y):= bA(x, y) Tanto en la suma como en la multiplicacin, se aumenta el
nivel de gris de los pxeles, pero de forma distinta.
Significado: aumentar la intensidad de la imagen en b.
En la suma, el parmetro a (entero) indica el nmero de
El histograma se estira hacia la derecha. niveles de gris a aumentar: de -255 a 255.
En el producto, el parmetro b (real) indica el factor a
multiplicar.
b=1 Ningn cambio
b=2 Se duplica el valor de gris. Los px. >127 se saturan.
b=0,5 Se encoge a la mitad el histograma.
Suma Multiplicacin
0+a 0*b
Procesamiento Audiovisual 21 Procesamiento Audiovisual 22
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
f: curva
128
tonal
64
0
4
2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.
Identidad: f(v):= v Suma: f(v):= v + a Resta: f(v):= v - a
En general, podemos definir Ej. Inversa: f(v):= 255 - v
255
255
255
255
192
a una transformacin lineal
192
192
192
genrica de la forma:
128
128
128
f(v):= bv + a
128
64
64
64
a
64
0
0
0
0 64 128 192 255 0 64 128 192 255 0 64 128 192 255
0
0 64 128 192 255
192
cuadrtica, polinomial, exponencial, logartmica,
192
192
escalonada, etc.
128
128
128
0
0
0
Histograma de R
f(v):= (v-m)*255/(M-m) R
192
128
simple regla de 3 m M
0
Histograma de A
5% 5%
5
2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.
La transformacin de histograma puede tomar
255
Elevar a 2, elevar a 1/2, ...
cualquier forma (no necesariamente lineal).
192
Se define la transformacin
Ejemplos.
128
Dos trozos de curva de gama como:
Parbola: c1v2 + c2v + c3 Raz: c1v0.5 + c2 (parbola y raz)
f(v):= 255(v/255)1/GAMA
64
255
255
255
Valor de salida
0
192
192
192
128
128
128
64
64
64
0
0
0
Blanco Negro
192
?
64 128
0
f[i]:= acumulado*255/np
3
finpara
f[255]:= 255
1
0
6
2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.
Imagen de entrada (A) Imagen ecualizada (R) Ejemplos. Ecualizacin del histograma.
inferior superior
128
128
128
64
64
64
0
0
0
7
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
Combinacin de imgenes: utilizar dos o ms Operadores booleanos:
imgenes de entrada para producir una imagen de R(x, y):= A(x,y) AND B(x,y)
salida.
R(x, y):= A(x,y) OR B(x,y)
Entrada: imgenes A y B. El valor del pxel resultante es
funcin de los pxeles de A y B R(x, y):= A(x,y) XOR B(x,y)
Salida: imagen R.
en la misma posicin R(x, y):= NOT A(x,y) AND B(x,y)
En principio, todas las R(x, y):= A(x,y) OR NOT B(x,y)
R(x, y):= f(A(x,y), B(x,y))
imgenes deben ser del ...
mismo tamao
Estos operadores tienen sentido cuando al menos
Posibles operaciones de combinacin: una de las imgenes es binaria.
Booleanas: and, or, xor, not Negro (0) = FALSE
Aritmticas: suma, resta, producto/divisin, media Blanco (1 255) = TRUE
Relacionales: mximo, mnimo
Procesamiento Audiovisual 43 Procesamiento Audiovisual 44
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
2. T2:= A AND C T2
A C
8
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
La imagen binaria (C) se suele denominar mscara. Operaciones aritmticas:
La mscara permite segmentar el objeto de inters. R(x, y):= A(x, y) + B(x, y)
C R R(x, y):= A(x, y) - B(x, y)
R(x, y):= (A(x, y) + B(x, y))/2
R(x, y):= aA(x, y) + (1-a)B(x, y)
!? R(x, y):= A(x, y)B(x, y)c
R R
B B
9
2.4. Combinacin de imgenes.
2.4. Combinacin de imgenes.
Ejemplo 2. Crear un modelo de fondo de una escena, Restar dos imgenes: R(x, y):= A(x, y) - B(x, y)
acumulando varias imgenes. Significado: obtener diferencia entre imgenes.
A A-B
B-A
Modelo de B
Imgenes de fondo
Quickcam [0..255] - [0..255] =
Idea: si adems de la media en cada pxel calculamos [-255..255] La mitad
tambin la varianza, podramos tener un modelo de los pxeles se
gaussiano del fondo (N(,)). saturan a 0
Procesamiento Audiovisual 55 Procesamiento Audiovisual 56
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
Idea: esto se
puede usar para
Dif. crear la mscara...
x16
Cmo?
10
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
Proceso. Ejemplo 3. Deteccin de movimiento en vdeo.
M
1. Obtener el modelo de fondo Dada una secuencia de vdeo, queremos saber si se
M. ha producido alguna modificacin, y en qu zonas de
A
2. Para cada imagen A del la imagen (encuentra las 7 diferencias).
vdeo. Frame 1 Frame 2 Diferencia x2
D
3. Calcular la diferencia: D =
abs(M-A).
U
4. Umbralizar la imagen con
un valor adecuado. U =
umbralizar(D, x). F
5. Sea F el nuevo fondo.
R
6. R:= (F AND NOT U) OR (A
AND U)
Cmo Qu objetos se han movido y en qu direccin?
arreglar eso?
Procesamiento Audiovisual 61 Procesamiento Audiovisual 62
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
11
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
Ejemplo 2. Mezcla y combinacin de imgenes. Solucin. Usar una mscara suave, una imagen en gris: 0
Queremos combinar dos imgenes, por ejemplo, para = transparente, 255 = opaco. Combinar: sumas y productos.
poner una etiqueta descriptiva en una foto. Una imagen
binaria sirve de mscara: 0 = fondo, 1 = etiqueta. M N
A B M
Resultado:
Resultado: R
R:= A(255-N)/255 + BN/255
R:= (A AND NOT M) No me convence...
OR (B AND M) mejor un reborde
Producto de
suave (difuminado)
imgenes
Procesamiento Audiovisual 67 Procesamiento Audiovisual 68
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
La mscara ya
est binarizada
12
2.4. Combinacin de imgenes. 2.5. Transformaciones de color.
Conclusiones: En los puntos anteriores la transformacin era la
misma para todos los canales (R, G y B).
Operaciones de combinacin: a partir de dos o ms
imgenes obtener una nueva imagen. Si es distinta, hablamos de transformacin de color:
R(x, y).R:= f1(A(x,y).R, A(x,y).G, A(x,y).B)
La operacin a aplicar depende de lo que queramos
conseguir. R(x, y).G:= f2(A(x,y).R, A(x,y).G, A(x,y).B)
R(x, y).B:= f3(A(x,y).R, A(x,y).G, A(x,y).B)
Operaciones booleanas: tiles para trabajar con
mscaras de objetos. Posibilidades:
Aplicar las mismas transformaciones que antes (suma,
Operaciones aritmticas: tiles en vdeo, modelos producto, ajuste de histograma, etc.), pero con distintos
acumulados, deteccin de movimiento, transparencias parmetros para cada canal.
difusas, etc. Transformaciones basadas en modelos de color.
En general, cualquier tipo de operacin es posible, ya Cambiar el modelo de color (RGB, HSV, HLS, XYZ,
YUV, etc.) y aplicar la funcin en ese modelo.
sean lineales o no lineales.
Procesamiento Audiovisual 73 Procesamiento Audiovisual 74
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
R
(0,0,0) (vr,vg,vb) (255,255,255)
Transformacin (obviamos (x,y)):
si A<128 entonces
R.R:= vrA/128; R.G:= vgA/128; R.B:= vbA/128
sino
R.R:= vr+(255-vr)(A-128)/128; R.G:= vg+(255-vg)(A-128)/128
Imagen de entrada Grises (media) Grises (precisa) R.B:= vb+(255-vb)(A-128)/128
finsi
Procesamiento Audiovisual 75 Procesamiento Audiovisual 76
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
13
2.5. Transformaciones de color. 2.5. Transformaciones de color.
Ejemplo. Transformacin de color falso. Transformaciones de agregar color (colorear)
Las transformaciones de este tipo son comunes en Idea: usar las operaciones de suma, resta y producto,
imgenes mdicas y de satlite. pero con una constante distinta por cada canal.
En estas aplicaciones, la profundidad del canal puede ser
R.R:= vr+A.R; R.G:= vg+A.G; R.B:= vb+A.B
fcilmente mayor que 1 byte. Al usar slo 256 grises se
pierde informacin. R.R:= frA.R; R.G:= fgA.G; R.B:= fbA.B
(vr, vg, vb) y (fr, fg, fb) indican el tono de color que se
da a la imagen.
Imagen de entrada
balance de blancos.
Las salidas de los fotodetectores de cada canal
(R,G,B) deberan ser acordes a la apreciacin
subjetiva del color por parte del humano.
Esto implica multiplicar cada canal por un factor
adecuado.
Cuestin: qu imagen tiene los colores ms
realistas?
Ejemplos:
Priorizar rojos (medio): fr= 1.2, fg= 0.9, fb= 0.9
Priorizar verdes (mucho): fr= 0.8, fg= 1.6, fb= 0.8
Priorizar amarillos (poco): fr= 1.1, fg= 1.1, fb= 0.8
R.R=
R.R= A.B (A.R+A.B)/2
R.G= A.R R.G=
(A.G+A.R)/2
R.B= A.G
R.B=
(A.G+A.B)/2 Imagen de entrada Ajuste conjunto Ajuste separado
Procesamiento Audiovisual 83 Procesamiento Audiovisual 84
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
14
2.5. Transformaciones de color. 2. Procesamiento global de imgenes.
Conclusiones: Conclusiones:
Las transformaciones globales se pueden realizar Procesamiento global: el valor de un pxel de salida
igual en todos los canales o con valores distintos. depende del pxel (o pxeles) correspondientes de la
En el primer caso, habr un cambio en la intensidad. imagen de entrada.
En el segundo, puede haber tambin un cambio de Operaciones aritmticas, lgicas, etc.
color. Distintas aplicaciones: mejora del histograma,
Balance de blancos: compensar los canales para reduccin de ruido, composicin de imgenes, ajuste
obtener los colores ms realistas posibles. del color, etc.
Veremos ms cuestiones relacionadas con el color Normalmente no aparecen solas, sino combinadas
cuando estudiemos espacios de color. con otros tipos de operaciones.
15
A.2. Procesamiento global en OpenCV. A.2. Procesamiento global en OpenCV.
Inicializar una imagen con un valor constante:
Sumar a una imagen un valor constante:
void cvSet (CvArr* A, CvScalar S, const CvArr* mask=0)
void cvAddS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
si mask(x,y)0 entonces A(x,y):= S
si mask(x,y)0 entonces C(x,y):= A(x,y) + S
Ejemplo. Inicializar a verde:
Ejemplo. Sumar un poco de azul: cvAddS(img, cvScalar(40,0,0), img2);
cvSet(img, cvScalar(0,255,0));
Aumentar el brillo (inplace):
Inicializar una imagen con un valor 0:
cvAddS(img, cvScalarAll(50), img);
void cvSetZero (CvArr* A) / void cvZero (CvArr* A)
Restar a una imagen un valor constante:
A(x,y):= 0
void cvSubS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
Copiar una imagen en otra:
si mask(x,y)0 entonces C(x,y):= A(x,y) S
void cvCopy (const CvArr* A, CvArr* B, const CvArr* mask =0) Ejemplo. Disminuir el brillo:
si mask(x,y)0 entonces B(x,y):= A(x,y) cvSubS(img, cvScalarAll(50), img);
Ejemplo. Copiar un trozo de la imagen img en la imagen img2:
Restar a un valor constante una imagen :
cvSetImageROI(img, cvRect(50,50, 100, 100));
void cvSubRS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
img2= cvCreateImage(cvSize(100, 100), img->depth, img->nChannels);
si mask(x,y)0 entonces C(x,y):= S A(x,y)
cvCopy(img, img2);
Ejemplo. Invertir una imagen (en color o B/N).
cvResetImageROI(img);
cvSubRS(img, cvScalarAll(255), img);
Procesamiento Audiovisual 91 Procesamiento Audiovisual 92
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
16
A.2. Procesamiento global en OpenCV. A.2. Procesamiento global en OpenCV.
Operaciones Binarias Restar dos imgenes:
Sumar dos imgenes: void cvSub (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
si mask(x,y)0 entonces C(x,y):= A(x,y) - B(x,y)
void cvAdd (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
Las imgenes deben tener el mismo tamao (o ROI) y el mismo tipo.
si mask(x,y)0 entonces C(x,y):= A(x,y) + B(x,y)
Igual que antes, tener cuidado con los problemas de saturacin.
Las imgenes deben tener el mismo tamao (o ROI) y el mismo tipo.
Esta operacin tiene ms sentido cuando se usan tipos con signo (16S,
Ojo: recordar los problemas de saturacin. Por ejemplo, para obtener la
16F, 32F).
media de dos imgenes, im1, im2:
cvScale(im1, im1, 0.5, 0);
cvScale(im2, im2, 0.5, 0); // Qu pasa si hacemos primero la suma Diferencia absoluta entre dos imgenes:
cvAdd(im1, im2, imr, 0); // y luego la divisin por 2? void cvAbsDiff (const CvArr* A, const CvArr* B, CvArr* C)
Suma ponderada de dos imgenes: C(x,y):= |A(x,y) - B(x,y)|
void cvAddWeighted(CvArr* A, double a, CvArr* B, double b, double g, CvArr* C) Ms adecuada cuando tenemos imgenes sin signo y solo queremos
C(x,y):= aA(x,y) + bB(x,y) + g medir diferencias absolutas entre pxeles.
Las mismas restricciones que antes.
Es mucho ms adecuada para calcular la media de dos imgenes:
cvAddWeighted(im1, 0.5, im2, 0.5, 0, imr);
17
A.2. Procesamiento global en OpenCV. A.2. Procesamiento global en OpenCV.
Propiedades de un histograma:
Operaciones con histogramas Nmero de dimensiones. Normalmente tendremos 1
En OpenCV se define el tipo CvHistogram y las dimensin (escala de grises), 2 dimensiones (histogramas
operaciones para manejarlo: cvCreateHist, cvReleaseHist, conjuntos de dos canales) o como mucho 3.
cvCalcHist, cvQueryHistValue, cvGetHistValue, Para cada dimensin, nmero de celdas (bins). Normalmente
cvNormalizeHist, cvThreshHist, cvGetMinMaxHistValue. ser una potencia de 2, como 256, 64, 32...
Rango de valores correspondientes a cada celda, en el caso
Tenemos tambin una operacin de ecualizacin del
de haber menos celdas que valores (normalmt. ser uniforme).
histograma: cvEqualizeHist.
Ejemplos. Histograma de 2 dimensiones
Otra cuestin relacionada son las tablas de
transformacin (look-up table, o LUT), para realizar una Histograma de 1 Bin 0 Bin 1
transformacin de curva tonal arbitraria. dimensin y 4 celdas (0-127) (128-255)
18
A.2. Procesamiento global en OpenCV. A.2. Procesamiento global en OpenCV.
Existen otras operaciones interesantes de consulta y Las tablas de transformacin (look-up table, LUT) son
manipulacin de histogramas. tablas que definen funciones discretas de la forma:
Normalizar un histograma: f: [0...255] R
void cvNormalizeHist (CvHistogram* hist, double factor) Esto nos permite construir cualquier curva tonal arbitraria.
Hace que la suma de todas las celdas del histograma sea factor.
En OpenCV, una LUT es una matriz de tipo CvMat:
Puede ser interesante para visualizar o comparar histogramas.
CvMat* lut= cvCreateMat(1, 256, CV_8UC3);
Obtener mximo y mnimo de un histograma: 1 fila y 256 columnas. Tantos canales como la salida (C1, C3).
void cvGetMinMaxHistValue (const CvHistogram* hist, La profundidad puede cambiar (8S, 16U, 32F, ...)
float* minVal, float* maxVal, int* minIdx =0, int* maxIdx =0)
Aplicar una transformacin de tabla LUT:
Dado el histograma, calcula el mnimo (minVal), el mximo
(maxVal), el ndice de la celda mnima (minIdx) y mxima (maxIdx).
CvMat* cvLUT (const CvArr* A, CvArr* B, const CvArr* lut)
Interesante, p.ej., para escalar todas las celdas entre 0 y 1.
B(x,y):= lut(A(x,y))
La imagen A puede tener 1 o varios canales. B y lut deben
Ecualizar el histograma de una imagen: tener el mismo nmero y la misma profundidad.
void cvEqualizeHist (const CvArr* src, CvArr* dst)
La profundidad de entrada, A, debe ser 8 bits (con o sin
Ojo: la imagen debe ser de 1 solo canal y 8U. No se puede usar signo), y la de salida (en B y en lut) puede ser cualquiera.
para hacer una ecualizacin conjunta de RGB.
Procesamiento Audiovisual 109 Procesamiento Audiovisual 110
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.
19