Está en la página 1de 19

Resumen

PROCESAMIENTO
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 IPL y OpenCV.

Procesamiento
(c) Gins Garca Audiovisual
Mateos, http://dis.um.es/profesores/ginesgm 1 Procesamiento Audiovisual 2
Temade
Dept. 2. Informtica
Procesamiento global de imgenes.
y Sistemas, Universidad de Murcia Tema 2. Procesamiento global de imgenes.

2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.


Pregunta: Cul es la base terica del procesamiento Principales tipos de
de imgenes? Qu operaciones aplicar? procesamientos de imgenes:
Recordatorio: una imagen digital no es ms que una Operaciones de procesamiento
matriz, o array bidimensional, de nmeros! global: cada pxel es tratado de
forma independiente, ya sea con
90 67 68 75 78 una o con varias imgenes.
92 87 73 78 82
Filtros y convoluciones: se
63 102 89 76 98
considera la vecindad local
45 83 109 80 130
de los pxeles.
39 69 92 115 154
Transformaciones geomtri-
Podemos aplicar las mismas operaciones que sobre cas: se modifica el tamao
cualquier nmero: sumar, restar, multiplicar, dividir, y forma de las matrices.
aplicar and, or, mximo, mnimo, integrales, derivadas... Transformaciones lineales:
Cada operacin tendr un significado propio. Fourier, wavelets, etc.
Procesamiento Audiovisual 3 Procesamiento Audiovisual 4
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.


Operaciones de procesamiento global: Supongamos una imagen de entrada A y una
Aritmticas: sumar, restar, multiplicar, mximo, etc. imagen resultado R.
Unarias: una sola imagen y un valor constante. Una operacin global (pxel a pxel) se puede
Binarias: con dos imgenes.
expresar como una funcin:
Booleanas: and, or, not, etc.
Unarias: una sola imagen y una constante. El valor del pxel resultante es
Binarias: con dos imgenes. R(x,y):= f(A(x,y)) funcin de (y slo de) el pxel
Otras transformaciones generales: correspondiente de entrada.
Transformaciones de histograma.
Transformaciones de color. Ejemplo. Invertir. R(x,y):= 255 A(x,y)
Binarizacin, etc.
Cada operacin tendr un significado, utilidad y Imagen Imagen
A R
aplicaciones especficos.
Procesamiento Audiovisual 5 Procesamiento Audiovisual 6
Tema 2. Procesamiento global de imgenes. 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(f 1(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.

2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.


Los histogramas son una herramienta importante en
Algoritmo. Clculo de un histograma. anlisis de imgenes: es buena la calidad de una
imagen?, sobra luz?, falta contraste?
Entrada. A: imagen de max X x maxY Ayudan a decidir cul es el procesamiento ms
Salida. Histograma: array [0,...,255] de entero adecuado para mejorar la calidad de una imagen...
Algoritmo: Tanto cualitativamente (qu operacin aplicar),
Histograma[]:= 0 Como cuantitativamente (en qu cantidad).
En principio, una buena
para y:= 1, ..., maxY hacer
Frecuencia

imagen debe producir un


para x:= 1, ..., maxX hacer histograma ms o menos
Histograma[A(x,y)]:= Histograma[A(x,y)]+1 uniforme y repartido en
todo el rango de valores.
0 127 255
Nivel de gris
Procesamiento Audiovisual 9 Procesamiento Audiovisual 10
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.1. Tipos de operaciones. Histogramas. 2.1. Tipos de operaciones. Histogramas.


Ejemplo 1. La imagen es muy oscura. Falta luz. Ejemplo 3. La imagen tiene poco contraste.
Frecuencia

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.1. Tipos de operaciones. Histogramas. 2.2. Operaciones elementales con pxeles.


Uso de histogramas para mejorar la calidad de las imgenes.
Ejemplo. El A: imagen de entrada.
histograma R: imagen resultante (del mismo tamao que A).
indica tonos
muy oscuros.
Operaciones unarias:
Sumar una constante: R(x, y):= A(x, y) + a
Restar una constante: R(x, y):= A(x, y) - a
Multiplicar por una constante: R(x, y):= bA(x, y)
Solucin.
Aplicar un Dividir por una constante: R(x, y):= A(x, y)/b
operador Transformacin lineal genrica: R(x, y):= bA(x, y)+a
que estire
el histograma. Transformacin de gama: R(x, y):= A(x, y)c
Cualquier funcin NN: R(x, y):= f(A(x,y))
Procesamiento Audiovisual 15 Procesamiento Audiovisual 16
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.

Qu ocurre si se suma un valor distinto a cada canal?


Procesamiento Audiovisual 19 Procesamiento Audiovisual 20
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

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 izquierda. 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.

2.2. Operaciones elementales con pxeles. 2.3. Transformaciones del histograma.


Las transformaciones elementales se pueden ver
Dividir por una constante: R(x, y):= A(x, y) / b
como funciones f: N N.
= Multiplicar por 1/b ... obviamente! Interpretacin: para cada valor de gris de entrada
El histograma se encoge. hay un valor de salida.
255
Valor de salida
192

f: curva
128

tonal
64
0

0 64 128 192 255


Valor de entrada

Se puede usar cualquier funcin f.


La transformacin hace que se modifique el histograma.
Procesamiento Audiovisual 23 Procesamiento Audiovisual 24
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

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

Multiplicar 2: f(v):=2v Dividir 2: f(v):= v/2 Por 3: f(v):= 3v


Pero la transformacin tambin puede ser no lineal:
255
255
255

192
cuadrtica, polinomial, exponencial, logartmica,
192
192

escalonada, etc.
128
128
128

Cmo decidir cul es la transformacin ms


64
64

adecuada? Usar el histograma.


64

0
0
0

0 64 128 192 255 0 64 128 192 255 0 64 128 192 255


Procesamiento Audiovisual 25 Procesamiento Audiovisual 26
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


Normalmente, interesa estirar el histograma, para Ejemplo. m= 86, M= 214
A
conseguir que aparezca todo el rango de valores. R(x,y):= (A(x,y)-86)*1,99
Idea: definir una transformacin lineal tal que el
Ojo: no
histograma resultante vaya de 0 a 255. Para imgenes en Histograma de A
necesaria-
color, se aplica la
Ajuste lineal o estiramiento (stretch) del histograma: misma funcin a los
mente el
mximo
Buscar el valor mnimo del histograma: m tres canales (R,G,B)
Buscar el valor mximo: M
255

Histograma de R
f(v):= (v-m)*255/(M-m) R
192
128

Nota: Esto es una


64

simple regla de 3 m M
0

0 64 128 192 255

Procesamiento Audiovisual 27 Procesamiento Audiovisual 28


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


Cuidado: un simple pxel con valor muy alto o muy bajo Ms ejemplos de estiramiento lineal del histograma.
puede hacer que el ajuste del histograma sea muy malo.
Por ejemplo, si hay un pxel con valor 0 y otro con 255, la
transformacin sera la identidad (la imagen no cambia).
Solucin: en lugar de mnimo y mximo, ajustar usando dos
percentiles del histograma (p. ej. 10%-90%, 5%-95%).

Histograma de A

5% 5%

Procesamiento Audiovisual 29 Procesamiento Audiovisual 30


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

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: c 1v2 + c2v + c3 Raz: c 1v0.5 + c2 (parbola y raz)
f(v):= 255(v/255)1/GAMA

64
255
255
255
Valor de salida

0
192
192
192

0 64 128 192 255

128
128
128

64
64
64

0
0
0

0 64 128 192 255 0 64 128 192 255 0 64 128 192 255


Valor de entrada Valor de entrada Valor de entrada
Resultado: oscurecer Resultado: aclarar Resultado: aclarar
los medios tonos. los medios tonos. tonos oscuros y
Gama 0,5 Gama 0,75 Gama 1 Gama 2 Gama 4
oscurecer los claros.
Procesamiento Audiovisual 31 Procesamiento Audiovisual 32
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


La diferencia entre diferentes dispositivos Otra transformacin habitual es la ecualizacin del
(televisores, cmaras, escneres) se modela con histograma (del latn aequalis = igual).
una transformacin de gama. Ecualizacin del histograma: es una transformacin
Si el comportamiento del dispositivo fuera definida de forma que el histograma resultante se
perfectamente lineal, Gama = 1. reparte uniformemente en todo el rango de grises.
255

Blanco Negro
192

?
64 128
0

0 64 128 192 255

0 127 255 0 127 255


Dnde est el 50% de gris? Es la escala lineal?
En este caso se usa una funcin escalonada:
Dnde estara si tomramos una foto? f: array [0..255] de byte
Procesamiento Audiovisual 33 Procesamiento Audiovisual 34
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


Cmo definir f para conseguir la ecualizacin? Algoritmo. Clculo de la funcin de ecualizacin del
Idea: suponer que a la salida hay 5 niveles de gris. histograma.
20%
Entrada. Histograma: array [0,...,255] de entero
20% 20% np: entero (nmero total de pxeles = m x*my)
20% Salida. f: array [0,...,255] de byte
20% para todo pxel (x,y) de R hacer
R(x,y):= f[A(x,y)] Algoritmo:
f[0]:= 0 La funcin de ecualizacin es
0 127 255
acumulado:= Histograma[0] la integral del histograma,
para i:= 1, ..., 254 hacer escalada por el factor 255/np.
4

f[i]:= acumulado*255/np
3

acumulado:= acumulado + Histograma[i]


2

finpara
f[255]:= 255
1
0

0 64 128 192 255 0 1 2 3 4


Procesamiento Audiovisual 35 Procesamiento Audiovisual 36
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

6
2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.
Imagen de entrada (A) Imagen ecualizada (R) Ejemplos. Ecualizacin del histograma.

Cada canal (R,G,B)


es ecualizado por
separado

Histograma de A Funcin f Histograma de R

Cuidado, en algunos casos los resultados pueden ser


artificiosos.
Procesamiento Audiovisual 37 Procesamiento Audiovisual 38
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


Inciso: ecualizacin local del histograma. Umbralizacin de imgenes. En algunas
Tanto la ecualizacin como el estiramiento se pueden aplicaciones puede ser interesante convertir la imagen
aplicar localmente. en binaria, o recortar cierto rango de valores.
Para cada pxel (x, y) de la imagen, calcular el Las funciones tienen las siguientes formas:
histograma de una regin vecina de tamao nxn.

255
255
255

Aplicar la transformacin correspondiente a (x, y).


Valor de salida

Umbral Umbral Umbral

192
192
192

inferior superior

128
128
128

64
64
64

0
0
0

0 64 128 192 255 0 64 128 192 255 0 64 128 192 255


Valor de entrada Valor de entrada Valor de entrada
Umbralizar la Cortar un rango y Seleccionar un
imagen con valor cte. mantener el resto rango
Procesamiento Audiovisual 39 Procesamiento Audiovisual 40
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.3. Transformaciones del histograma. 2.3. Transformaciones del histograma.


Las funciones sern del estilo: Ejemplo 2. Segmentacin de objetos.
f(v):= si v > umbral1 entonces g(v)
sino h(v)
Transformacin de binarizacin (saturar a 0 255).
f(v):= si v < umbral entonces 0 sino 255
Ejemplo 1. La binarizacin se suele aplicar en OCR.
Imagen de entrada Umbralizar, u = 42 Umbralizar, u = 180
La separacin del objeto del
fondo se llama segmentacin.
La umbralizacin se puede
usar para segmentar...
Imagen de entrada Umbral = 160 Umbral = 215 ... aunque por s sola no suele
(256 grises) funcionar muy bien. Cortar rango (192, 255)
Procesamiento Audiovisual 41 Procesamiento Audiovisual 42
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

7
2.3. Transformaciones del histograma. 2.4. Combinacin de imgenes.
Conclusiones: Combinacin de imgenes: utilizar dos o ms
Una transformacin elemental se puede ver desde imgenes de entrada para producir una imagen de
distintas perspectivas: salida.
Como una funcin unidimensional: f: N N Entrada: imgenes A y B. El valor del pxel resultante es
funcin de los pxeles de A y B
Como una curva tonal. Salida: imagen R. en la misma posicin
Como una modificacin del histograma.
La caracterstica fundamental es que cada pxel se En principio, todas las
R(x, y):= f(A(x,y), B(x,y))
imgenes deben ser del
trata independientemente de los dems.
mismo tamao
Los histogramas son tiles para encontrar la Posibles operaciones de combinacin:
transformacin adecuada.
Booleanas: and, or, xor, not
En imgenes RGB, aplicamos la misma operacin a Aritmticas: suma, resta, producto/divisin, media
los 3 canales para que se mantenga el color.
Relacionales: mximo, mnimo
Procesamiento Audiovisual 43 Procesamiento Audiovisual 44
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Ejemplos. Operadores booleanos.
Operadores booleanos:
R(x, y):= A(x,y) AND B(x,y) Imagen de Imagen de
R(x, y):= A(x,y) OR B(x,y) entrada entrada
R(x, y):= A(x,y) XOR B(x,y) A B
R(x, y):= NOT A(x,y) AND B(x,y)
R(x, y):= A(x,y) OR NOT B(x,y)
... A AND B A OR B A XOR B
Estos operadores tienen sentido cuando al menos
una de las imgenes es binaria.
Negro (0) = FALSE
Blanco (1 255) = TRUE

Procesamiento Audiovisual 45 Procesamiento Audiovisual 46


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


En imgenes Imgenes de entrada.
A RGB AND B RGB
A Gris AND B Gris

no binarias no
tienen mucho A B C
sentido...
Cmo se
interpretan?

Las operaciones binarias aparecen en anlisis de imgenes,


y tambin para trabajar con mscaras y recortes de
objetos.
Cmo conseguir el montaje de la pgina anterior?

R:= (B AND NOT C) OR (A AND C)

Procesamiento Audiovisual 47 Procesamiento Audiovisual 48


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

8
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
1. T1:= B AND NOT C T1
La imagen binaria (C) se suele denominar mscara.
B NOT C
La mscara permite segmentar el objeto de inters.
C R

2. T2:= A AND C T2
A C
!?

3. R:= T1 OR T2 R Cuestiones:
T1 T2 Cmo crear la mscara de forma automtica?
La zona del pelo no se mezcla bien con el fondo.
Cmo evitar este problema?
Procesamiento Audiovisual 49 Procesamiento Audiovisual 50
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes.


2.4. Combinacin de imgenes.
Sumar dos imgenes: R(x, y):= A(x, y) + B(x, y)
Operaciones aritmticas:
Significado: mezclar las dos imgenes.
R(x, y):= A(x, y) + B(x, y)
A
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
R(x, y):= A(x, y)B(x, y)c

B
Se usan en generacin y anlisis de imgenes.
Cuidado con los problemas de saturacin.
En imgenes binarias son equivalentes (en su
mayora) a los operadores booleanos. Ojo: [0..255] + [0..255] = [0..510]

Procesamiento Audiovisual 51 Procesamiento Audiovisual 52


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Para evitar la saturacin se puede usar la media. De forma similar, se puede definir la media ponderada.
Media de 2 imgenes: R(x, y):= (A(x,y)+B(x,y))/2 Media ponderada: R(x,y):= aA(x,y) + (1-a)B(x,y)
A a = 0,25 a = 0,5 a = 0,75

B
La media ponderada se puede
usar para crear una transicin
suave entre imgenes (o vdeos).
Significado: las imgenes son
semitransparentes (al 50%).
Procesamiento Audiovisual 53 Procesamiento Audiovisual 54
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

9
2.4. Combinacin de imgenes.
La media de imgenes se puede usar para acumular
2.4. Combinacin de imgenes.
imgenes de un vdeo. Ejemplo 2. Crear un modelo de fondo de una escena,
Ejemplo 1. Combinar imgenes con mucho ruido de una acumulando varias imgenes.
escena, para obtener una mezcla con menos ruido.

Modelo de
Imgenes de fondo
Quickcam
Imgenes
Imagen Idea: si adems de la media en cada pxel calculamos
capturadas
acumulada tambin la varianza, podramos tener un modelo
de TV
gaussiano del fondo (N(,)).
Procesamiento Audiovisual 55 Procesamiento Audiovisual 56
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Restar dos imgenes: R(x, y):= A(x, y) - B(x, y) Restar dos imgenes, manteniendo el rango de
Significado: obtener diferencia entre imgenes. salida: R(x, y):= (A(x, y) - B(x, y))/2 + 128
A A-B A (A-B)*

B-A (B-A)*
B B

[0..255] - [0..255] =
[-255..255] La mitad
de los pxeles se
saturan a 0
Procesamiento Audiovisual 57 Procesamiento Audiovisual 58
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Muchas veces lo que interesa es conocer la diferencia Aplicaciones de la diferencia: encontrar variaciones
entre las imgenes. Solucin: tomar valor absoluto de entre imgenes que, en principio, deberan ser
la resta.
parecidas.
Diferencia: R(x, y):= abs(A(x, y) - B(x, y))
Ejemplo 1. Analizar la prdida de informacin al
A R comprimir una imagen. Por ejemplo, con JPEG.
Dif.
x16

? Son muy
distintas...
B
Pxel negro: las dos imgenes son
Dif.
iguales en ese pxel.
x16
Cuando ms clara es una zona, ms
se diferencian las imgenes.
Procesamiento Audiovisual 59 Procesamiento Audiovisual 60
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

10
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
Ejemplo 2. Segmentacin del fondo de una escena. Proceso.
M
Tenemos un fondo (imagen media) y una nueva imagen. 1. Obtener el modelo de fondo
M.
Modelo de fondo Frame 1 Frame 2 A
2. Para cada imagen A del
vdeo.
D
3. Calcular la diferencia: D =
abs(M-A).
U
4. Umbralizar la imagen con
un valor adecuado. U =
umbralizar(D, x). F
Idea: esto se
puede usar para 5. Sea F el nuevo fondo.
R
crear la mscara... 6. R:= (F AND NOT U) OR (A
Cmo? AND U)
Cmo
arreglar eso?
Procesamiento Audiovisual x2 61 x2 Procesamiento Audiovisual 62
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Ejemplo 3. Deteccin de movimiento en vdeo. Producto imgenes: R(x, y):= A(x, y)B(x, y)/255
Dada una secuencia de vdeo, queremos saber si se
ha producido alguna modificacin, y en qu zonas de A AB
la imagen (encuentra las 7 diferencias).
Frame 1 Frame 2 Diferencia x2

B Necesario escalar el resultado


(dividir por 255).
Efecto de mezcla, similar a la
suma, pero conceptualmente
ms prximo a un AND...
Qu objetos se han movido y en qu direccin?
Procesamiento Audiovisual 63 Procesamiento Audiovisual 64
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Divisin imgenes: R(x, y):= 255A(x, y)/B(x, y) Ejemplo 1. Realizar una transformacin de intensidad
distinta para cada pxel.
A A/B
A B1 B2

B
Tambin es necesario escalar A*B1 A*B2
el resultado (multiplicar por
255).
Cul es interpretacin del
resultado?

Procesamiento Audiovisual 65 Procesamiento Audiovisual 66


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

11
2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.
Estos mismos tipos de imgenes se pueden usar para Ejemplo 2. Mezcla y combinacin de imgenes.
hacer sumas, restas, divisiones, etc. Queremos combinar dos imgenes, por ejemplo, para
poner una etiqueta descriptiva en una foto. Una imagen
Ejemplo. R(x, y):= A(x, y)B(x, y)/128 binaria sirve de mscara: 0 = fondo, 1 = etiqueta.
Si B(x, y) = 128 el pxel de A no cambia.
A B M
Si B(x, y) < 128 el pxel se oscurece.
Si B(x, y) > 128 el pxel se aclara.

El producto es tambin la base en la idea de mscara


o seleccin difusa. Resultado: R
Idea: una imagen se compone de distintos elementos o R:= (A AND NOT M) No me convence...
capas, que tienen definido cierto nivel de OR (B AND M) mejor un reborde
transparencia. suave (difuminado)
Procesamiento Audiovisual 67 Procesamiento Audiovisual 68
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Solucin. Usar una mscara suave, una imagen en gris: 0 Indicaciones sobre el ejemplo 2.
= transparente, 255 = opaco. Combinar: sumas y productos. La mascara suave es la idea del canal alfa.
M N RGB RGBA, donde el canal A indica el grado de
opacidad de un pxel (0= transparente, 255= opaco).
Uso: definimos imgenes, con sus canales alfa, y las
componemos poniendo unas sobre otras.
La composicin de imgenes con canal alfa es
bsicamente una media ponderada como hemos visto.
Resultado: En el modo binario, muchas herramientas incorporan las
R:= A(255-N)/255 + BN/255 ideas de mscara, seleccin, regin de inters (cuando
es rectangular) o canal de inters (en multicanal).
No necesitamos trabajar con operaciones booleanas,
Producto de aunque implcitamente es lo que hay subyacente.
imgenes
Procesamiento Audiovisual 69 Procesamiento Audiovisual 70
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.4. Combinacin de imgenes. 2.4. Combinacin de imgenes.


Otras operaciones no lineales Ejemplo. Una alternativa para crear modelos de fondo
Mnimo de 2 imgenes. R(x, y):= min(A(x, y), B(x, y)) es usar mximos y mnimos. En lugar de tener media y
varianza, tenemos mximo y mnimo del fondo en
A B R cada pxel.
Fondo mnimo Fondo mximo

Mximo de 2 imgenes. R(x, y):= max(A(x, y), B(x, y))


A B R
Dada una imagen nueva, para cada pxel, comprobar si
su valor est entre el mximo y el mnimo. Si lo est:
fondo; si no lo est: objeto.
Procesamiento Audiovisual 71 Procesamiento Audiovisual 72
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

12
2.4. Combinacin de imgenes.
2.4. Combinacin de imgenes.
Con esto tenemos otra forma de hacer la segmentacin
de los objetos. Conclusiones:
Modelo de fondo Frame 1 Frame 2 Operaciones de combinacin: a partir de dos o ms
imgenes obtener una nueva imagen.
La operacin a aplicar depende de lo que queramos
conseguir.
Operaciones booleanas: tiles para trabajar con
mscaras de objetos.
La mscara ya
Operaciones aritmticas: tiles en vdeo, modelos
est binarizada
acumulados, deteccin de movimiento, transparencias
difusas, etc.
En general, cualquier tipo de operacin es posible, ya
sean lineales o no lineales.
Procesamiento Audiovisual 73 Procesamiento Audiovisual 74
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.5. Transformaciones de color. 2.5. Transformaciones de color.


En los puntos anteriores la transformacin era la Conversin color escala de grises
misma para todos los canales (R, G y B).
Conversin sencilla:
Si es distinta, hablamos de transformacin de color: Pero, de
R(x, y):= (A(x,y).R + A(x,y).G + A(x,y).B)/3 dnde salen
R(x, y).R:= f1(A(x,y).R, A(x,y).G, A(x,y).B)
Conversin precisa: esos pesos?
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) R(x, y):= 0.21A(x,y).R + 0.72A(x,y).G + 0.07A(x,y).B
Posibilidades:
Aplicar las mismas transformaciones que antes (suma,
producto, ajuste de histograma, etc.), pero con distintos
parmetros para cada canal.
Transformaciones basadas en modelos de color.
Cambiar el modelo de color (RGB, HSV, HLS, XYZ,
YUV, etc.) y aplicar la funcin en ese modelo.
Imagen de entrada Grises (media) Grises (precisa)
Procesamiento Audiovisual 75 Procesamiento Audiovisual 76
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.5. Transformaciones de color. 2.5. Transformaciones de color.


Transformacin escala de grises escala de color Ejemplo. Transformacin a sepia.
Idea: dada un imagen en gris, producir una imagen en
escala de cierto color dado.
Sea A una imagen en grises y un color objetivo (vr, vg, vb).
La escala se puede descomponer en dos partes:
A

R Imagen de entrada Escala de grises Escala de sepias


(0,0,0) (vr,vg,vb) (255,255,255)
Transformacin (obviamos (x,y)): Cmo conseguir
si A<128 entonces que el punto
R.R:= vrA/128; R.G:= vgA/128; R.B:= vbA/128 intermedio sea un
sino valor cualquiera
R.R:= vr+(255-vr)(A-128)/128; R.G:= vg+(255-vg)(A-128)/128 (distinto de 128)?
R.B:= vb+(255-vb)(A-128)/128
finsi Escala de (30,255,0) Escala de (0,255,255)
Procesamiento Audiovisual 77 Procesamiento Audiovisual 78
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

13
2.5. Transformaciones de color. 2.5. Transformaciones de color.
Transformacin de color falso Ejemplo. Transformacin de color falso.
Las transformaciones de este tipo son comunes en
Es una transformacin de la misma familia, cuyo objetivo es
imgenes mdicas y de satlite.
hacer ms visibles las pequeas variaciones del nivel de
gris. En estas aplicaciones, la profundidad del canal puede ser
fcilmente mayor que 1 byte. Al usar slo 256 grises se
Se define una paleta de salida adecuada y una
pierde informacin.
transformacin de cada valor de gris en la paleta.

R= 255 0 0 255
G= 255 255 0 0
B= 0 0 255 255
Imagen de entrada Imagen con color falso
Procesamiento Audiovisual 79 Procesamiento Audiovisual 80
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.5. Transformaciones de color. 2.5. Transformaciones de color.


Transformaciones de agregar color (colorear) Transformaciones de agregar color (colorear)

Sumar (-10, 40, -10) Multipl. (1.4, 1.15, 1)


Idea: usar las operaciones de suma, resta y producto,

Multipl. (1.4, 0.9, 0.9) Imagen de entrada


pero con una constante distinta por cada canal.
R.R:= vr+A.R; R.G:= vg+A.G; R.B:= vb+A.B
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

Sumar (-20, 8, 60)

Procesamiento Audiovisual 81 Procesamiento Audiovisual 82


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2.5. Transformaciones de color. 2.5. Transformaciones de color.


Tambin es posible mezclar y cambiar los canales,
Estas transformaciones estn relacionadas con el con transformaciones como las siguientes.
balance de blancos.
Imagen de entrada

Las salidas de los fotodetectores de cada canal


(R,G,B) deberan ser acordes a la apreciacin R.R= A.G
subjetiva del color por parte del humano. R.G= A.B
Esto implica multiplicar cada canal por un factor R.B= A.R
adecuado.
Cuestin: qu imagen tiene los colores ms
realistas? R.R=
Ejemplos: R.R= A.B (A.R+A.B)/2
Priorizar rojos (medio): fr= 1.2, fg= 0.9, fb= 0.9 R.G= A.R R.G=
Priorizar verdes (mucho): fr= 0.8, fg= 1.6, fb= 0.8 (A.G+A.R)/2
R.B= A.G
Priorizar amarillos (poco): fr= 1.1, fg= 1.1, fb= 0.8 R.B=
(A.G+A.B)/2
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.5. Transformaciones de color.
Finalmente, recordar que las operaciones de ajuste y Conclusiones:
ecualizacin del histograma se pueden aplicar
conjuntamente (usando el histograma de gris) o por Las transformaciones globales se pueden realizar
separado (usando el histograma de cada canal). igual en todos los canales o con valores distintos.
La diferencia es que mientras el primero mantiene los En el primer caso, habr un cambio en la intensidad.
colores (cambia la intensidad) el segundo no los mantiene. En el segundo, puede haber tambin un cambio de
Los colores parecen color.
poco realistas Balance de blancos: compensar los canales para
obtener los colores ms realistas posibles.
Veremos ms cuestiones relacionadas con el color
cuando estudiemos espacios de color.

Imagen de entrada Ajuste conjunto Ajuste separado


Procesamiento Audiovisual 85 Procesamiento Audiovisual 86
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

2. Procesamiento global de imgenes.


Conclusiones: Anexo A.2.
Procesamiento global: el valor de un pxel de salida Procesamiento global en IPL y
depende del pxel (o pxeles) correspondientes de la OpenCV.
imagen de entrada.
Operaciones aritmticas, lgicas, no lineales, etc. Operaciones unarias
Distintas aplicaciones: mejora del contraste, Operaciones binarias
reduccin de ruido, composicin de imgenes, ajuste Operaciones con histogramas
del color, etc.
Ejercicios
Los histogramas son una herramienta interesante en
este tipo de operaciones.
Normalmente no aparecen solas, sino combinadas
con otros procesamientos.
Procesamiento Audiovisual 87 Procesamiento Audiovisual 88
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Operaciones de procesamiento global: Recordar: un Es importante observar las restricciones impuestas sobre
Tipos: unarias, binarias, histogramas. CvArr puede ser las imgenes admitidas en cada funcin.
un IplImage En otro caso ocurrir un error (se produce una excepcin).
void cvUnaria (const CvArr* A, ..., CvArr* B, ...)
void cvBinaria (const CvArr* A, const CvArr* B,.., CvArr* C, ...) Normalmente:
Todas las imgenes deben ser del mismo tipo: profundidad y
Las funciones reciben una (unarias) o dos (binarias) nmero de canales.
imgenes de entrada, y producen una de salida. Todas ellas Todas las imgenes deben tener el mismo tamao. Si se
deben estar creadas, tambin la imagen de salida. utilizan ROI, el tamao del ROI debe ser el mismo en todas.
La mayora de las funciones admite modo inplace: una Algunas funciones requieren imgenes con 1 solo canal.
imagen de entrada se puede usar tambin para guardar el Opcionalmente, algunas admiten el uso de una mscara
resultado. (mask), que ser otra imagen, de 8 bits y con un 1 canal. Un
Muchas de las operaciones trabajan con ROI, COI y mask valor 0 significa que el pxel no se procesa, y 0 s se procesa.
No operan sobre toda la imagen sino slo sobre una Ver la documentacin para cada funcin.
parte concreta (rectngulo, canal o mscara de inters).
Procesamiento Audiovisual 89 Procesamiento Audiovisual 90
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

15
A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Inicializar una imagen con un valor constante:
Operaciones unarias: void cvSet (CvArr* A, CvScalar S, const CvArr* mask=0)
cvSet, cvSetZero, cvCopy, cvAddS, cvSubS, cvSubRS, si mask(x,y)0 entonces A(x,y):= S
cvAbsDiffS, cvAbs, cvScale, cvConvert, cvConvertScale, Ejemplo. Inicializar a verde:
cvConvertScaleAbs, cvAndS, cvOrS, cvXorS, cvNot, cvCmpS, cvSet(img, cvScalar(0,255,0));
cvThreshold, cvAdaptiveThreshold, cvMaxS, cvMinS, cvPow, Inicializar una imagen con un valor 0:
cvLog void cvSetZero (CvArr* A) / void cvZero (CvArr* A)
Operaciones binarias: A(x,y):= 0
cvAdd, cvSub , cvAbsDiff, cvMul, cvDiv, cvAnd, cvOr, cvXor, Copiar una imagen en otra:
cvCmp, cvMax, cvMin void cvCopy (const CvArr* A, CvArr* B, const CvArr* mask =0)
Operaciones con histogramas: si mask(x,y)0 entonces B(x,y):= A(x,y)
Ejemplo. Copiar un trozo de imagen en otra imagen:
cvCreateHist, cvReleaseHist, cvCalcHist, cvQueryHistValue,
cvSetImageROI(img, cvRect(50,50, 100, 100));
cvGetHistValue, cvNormalizeHist, cvThreshHist,
img2= cvCreateImage(cvSize(100, 100), img->depth, img->nChannels);
cvGetMinMaxHistValue, cvLUT
cvCopy(img, img2);
cvResetImageROI(img);
Procesamiento Audiovisual 91 Procesamiento Audiovisual 92
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV.


A.2. Procesamiento global en IPL y OpenCV.
Valor absoluto de diferencia entre una imagen y un valor constante:
Sumar a una imagen un valor constante:
void cvAbsDiffS (const CvArr* A , CvArr* C, CvScalar S)
void cvAddS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
C(x,y):= |A(x,y) S|
si mask(x,y)0 entonces C(x,y):= A(x,y) + S Ejemplo. cvAbsDiffS(img, img2, cvScalar(40,128,150));
Ejemplo. Sumar un poco de azul: cvAddS(img, cvScalar(40,0,0), img2);
Valor absoluto de una imagen:
Aumentar el brillo (inplace):
void cvAbs (const CvArr* A, CvArr* C)
cvAddS(img, cvScalarAll(50), img);
C(x,y):= |A(x,y)|
Restar a una imagen un valor constante:
Tiene sentido cuando la profundidad son nmeros con signo
void cvSubS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
Producto/divisin de una imagen por una constante:
si mask(x,y)0 entonces C(x,y):= A(x,y) S
void cvScale (const CvArr* A, CvArr* B, double scale=1, double shift=0)
Ejemplo. Disminuir el brillo:
cvSubS(img, cvScalarAll(50), img); B(x,y):= A(x,y) * scale + shift (igual para todos los canales)
Restar a un valor constante una imagen : Se puede hacer cualquier transformacin lineal.
void cvSubRS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0) La funcin permite hacer conversiones entre imgenes con distintos
valores de profundidad (de 8 bits a 16, o a reales de 32 bits, etc).
si mask(x,y)0 entonces C(x,y):= S A(x,y)
Tiene sinnimos, como cvConvertScale. Ver tambin cvConvertScaleAbs.
Ejemplo. Invertir una imagen (en color o B/N).
Ejemplo. Ajuste del contraste: cvConvertScale(img, img2, 1.6, -50);
cvSubRS(img, cvScalarAll(255), img);
Procesamiento Audiovisual 93 Procesamiento Audiovisual 94
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Comparacin entre una imagen y un valor constante:
Y lgico entre una imagen y un valor constante (a nivel de bits): void cvCmpS (const CvArr* A, double S, CvArr* C, int cmp_op)
void cvAndS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0)
C(x,y):= A(x,y) op S, con op {=, >, <, >=, <=}
si mask(x,y)0 entonces C(x,y):= A(x,y) AND S
cmp_op indica el modo de comparacin: CV_CMP_EQ (igual),
O lgico entre una imagen y un valor constante (a nivel de bits):
CV_CMP_GT (mayor que), CV_CMP_GE (mayor o igual), etc.
void cvOrS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0) El resultado es una imagen binaria, con 0 255 (todos los bits a 1).
si mask(x,y)0 entonces C(x,y):= A(x,y) OR S Ver tambin la funcin cvInRangeS(img, scalar1, scalar2, res).
O exclusivo entre una imagen y un valor constante (a nivel de bits): Umbralizacin/binarizacin de una imagen:
void cvXorS (const CvArr* A, CvScalar S, CvArr* C, const CvArr* mask=0) void cvThreshold (const CvArr* src, CvArr* dst, double threshold,
si mask(x,y)0 entonces C(x,y):= A(x,y) XOR S double maxValue, int thresholdType)
Negacin lgica de una imagen (a nivel de bits): Umbraliza la imagen segn el mtodo dado en thresholdType. y el
umbral es threshold.
void cvNot (const CvArr* A, CvArr* C)
P.ej., CV_THRESH_BINARY para binarizar:
C(x,y):= NOT A(x,y)
C(x,y):= si A(x,y) > threshold entonces maxValue sino 0
Ejemplo. Vale para invertir una imagen: cvNot(img, img);
La umbralizacin se hace con un valor constante. Para un mtodo ms
Pero, para qu valen las otras operaciones booleanas con constantes? avanzado ver cvAdaptiveThreshold. El umbral se calcula para cada
pxel, usando una vecindad local (adaptativo).

Procesamiento Audiovisual 95 Procesamiento Audiovisual 96


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

16
A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Mximo entre una imagen y un valor constante:
void cvMaxS (const CvArr* A, double scalar, CvArr* C) (est mal en la ayuda) Operaciones Binarias
C(x,y):= max {A(x,y), S} Sumar dos imgenes:
Las imgenes deben ser de un solo canal. void cvAdd (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
Mnimo entre una imagen y un valor constante: si mask(x,y)0 entonces C(x,y):= A(x,y) + B(x,y)
void cvMinS (const CvArr* A, double scalar, CvArr* C) (est mal en la ayuda) Las imgenes deben tener el mismo tamao (o ROI) y el mismo tipo.
C(x,y):= min {A(x,y), S} Ojo: recordar los problemas de saturacin. Por ejemplo, para obtener la
Las imgenes deben ser de un solo canal. media de dos imgenes, im1, im2:
cvScale(im1, im1, .5, 0);
Potencia, exponencial y logaritmo de los pxeles de una imagen:
cvScale(im2, im2, .5, 0); // Qu pasa si hacemos primero la suma
void cvPow (const CvArr* A, CvArr* C, double p) C(x,y):= A(x,y) p cvAdd(im1, im2, imr, 0); // y luego la divisin por 2?
void cvExp (const CvArr* A, CvArr* C) C(x,y):= e A(x,y) Restar dos imgenes:
void cvLog (const CvArr* A, CvArr* C) C(x,y):= log e |A(x,y)|
void cvSub (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
Para evitar saturacin y prdida de informacin, es conveniente
transformar las profundidad a reales de 32 o 64 bits. si mask(x,y)0 entonces C(x,y):= A(x,y) - B(x,y)
Ejemplo. Transformacin de gamma: Las imgenes deben tener el mismo tamao (o ROI) y el mismo tipo.
cvConvertScale(img, imr, 1./255, 0); // imr es de profundidad 32F Igual que antes, tener cuidado con los problemas de saturacin. Es ms
cvPow(imr, imr, gamma); adecuado usar enteros con signo.
cvConvertScale(imr, img, 255., 0);
Procesamiento Audiovisual 97 Procesamiento Audiovisual 98
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Diferencia absoluta entre dos imgenes: Y lgico, a nivel de bits, entre dos imgenes:
void cvAbsDiff (const CvArr* A, const CvArr* B, CvArr* C) void cvAnd (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
C(x,y):= |A(x,y) - B(x,y)| si mask(x,y)0 entonces C(x,y):= A(x,y) AND B(x,y)
Mejor en imgenes sin signo y cuando solo queremos medir diferencias. Tambin funciona con nmeros reales, pero para qu puede valer?
Multiplicar dos imgenes: Para que tenga sentido, al menos alguna de las dos imgenes debera
ser binaria (0/255).
void cvMul (const CvArr* A, const CvArr* B, CvArr* C, double scale=1)
C(x,y):= A(x,y)*B(x,y)*scale
El valor scale permite evitar problemas de saturacin. O lgico, a nivel de bits, entre dos imgenes:
Ejemplo: multiplicar dos imgenes de 8 bits: void cvOr (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
cvMul(im1, im2, imr, 1./255); si mask(x,y)0 entonces C(x,y):= A(x,y) OR B(x,y)
Dividir dos imgenes:
void cvDiv (const CvArr* A, const CvArr* B, CvArr* C, double scale=1) O exclusivo, a nivel de bits, entre dos imgenes:
C(x,y):= scale*A(x,y)/B(x,y) void cvXor (const CvArr* A, const CvArr* B, CvArr* C, const CvArr* mask=0)
A puede ser nulo, en cuyo caso se supone que todos los pxeles son 1. si mask(x,y)0 entonces C(x,y):= A(x,y) XOR B(x,y)
Igual que antes, tener cuidado con los problemas de saturacin. Es ms
adecuado usar enteros con signo.

Procesamiento Audiovisual 99 Procesamiento Audiovisual 100


Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Comparacin de dos imgenes: Observar el estilo de programacin usando estas funciones.
void cvCmp (const CvArr* A, const CvArr* B, CvArr* C, int cmp_op) Por ejemplo, queremos implementar la operacin:
C(x,y):= A(x,y) op B(x,y), con op {=, >, <, >=, <=} R(x,y):= A(x,y)(255-N(x,y))/255 + B(x,y)N(x,y)/255
Los mismos modos de comparacin que cvCmpS. void Combina (const CvArr* A, const CvArr* B, const CvArr* N, CvArr* R);
La imagen de salida es binaria 0/255. Las imgenes deben tener 1 canal.
Implementacin 1. Implementacin 2.
Ver tambin la funcin cvInRange(img, imMin, imMax, imRes).
cvMul(B, N, B, 1./255); for (int y=0; y<A->height; y++)
Mximo de dos imgenes: for (int x= 0; x<A->width; x++) {
cvNot(N, N); char Axy[3], Bxy[3], Nxy[3], Rxy[3];
void cvMax (const CvArr* A, const CvArr* B, CvArr* C)
C(x,y):= max {A(x,y), B(x,y)}
cvMul(A, N, A, 1./255); iplGetPixel(A, x, y, Axy);
cvAdd(A, B, R); iplGetPixel(B, x, y, Bxy);
Las imgenes deben tener 1 solo canal. iplGetPixel(N, x, y, Nxy);
Mnimo de dos imgenes: for (int k= 0; k<3; k++)
void cvMin (const CvArr* A, const CvArr* B, CvArr* C) Esto es ms sencillo y Rxy[k]= Axy[k]*(255-Nxy[k])/255.0 +
eficiente, porque las opera- Bxy[k]*Nxy[k]/255.0;
C(x,y):= min {A(x,y), B(x,y)}
iplSetPixel(R, x, y, Rxy);
Las imgenes deben tener 1 solo canal. ciones estn optimizadas
}
Aunque no del todo correcto, Esto es menos eficiente y
modifica sus parmetros de menos recomendable
Procesamiento Audiovisual 101 entrada A, B y N... Procesamiento Audiovisual 102
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

17
A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Operaciones con histogramas Propiedades de un histograma:
Nmero de dimensiones. Normalmente tendremos 1
Los histogramas se manejan de formas diferentes en IPL y
dimensin (escala de grises), 2 dimensiones (histogramas
en OpenCV. conjuntos de dos canales) o como mucho 3.
Utilizaremos los histogramas de OpenCV. Para cada dimensin, nmero de celdas (bins). Normalmente
IPL define algunas operaciones no disponibles en OpenCV ser una potencia de 2, como 256, 64, 32...
(iplContrastStretch y iplHistoEqualize) Deberemos Rango de valores correspondientes a cada celda, en el caso
definrnoslas nosotros. de haber menos celdas que valores (normalmt. ser uniforme).
En OpenCV se define el tipo CvHistogram y las Ejemplos. Histograma de 2 dimensiones
operaciones para manejarlo: cvCreateHist, cvReleaseHist, Histograma de 1 Bin 0 Bin 1
cvCalcHist, cvQueryHistValue, cvGetHistValue, dimensin y 4 celdas (0-127) (128-255)
cvNormalizeHist, cvThreshHist, cvGetMinMaxHistValue. Bin 0 (0-85)
Bin 0 Bin 1 Bin 2 Bin 3
Una cuestin relacionada son las tablas de (0-63) (64-127) (128-191) (192-255) Bin 1 (86-170)
transformacin (look-up table, o LUT).
Bin 2 (171-255)
Procesamiento Audiovisual 103 Procesamiento Audiovisual 104
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Crear un histograma: Ejemplo. Crear un histograma con 2 dimensiones y 32 celdas en cada
dimensin:
CvHistogram* cvCreateHist (int cDims, int* dims, int type,
CvHistogram* hist2;
float** ranges=0, int uniform=1) int celdas[2]= {32, 32};
cDims: nmero de dimensiones del histograma. hist= cvCreateHist(2, celdas, CV_HIST_ARRAY);
dims: nmero de celdas en cada dimensin.
type: tipo, usar siempre CV_HIST_ARRAY. Liberar la memoria ocupada por un histograma:
uniform: poner a 1 para que el rango de valores en cada celda sea void cvReleaseHist (CvHistogram** hist)
uniforme. Calcular el histograma de una imagen:
ranges: rango asociado a cada celda de cada dimensin. Para void cvCalcHist (IplImage** img, CvHistogram* hist,
histogramas uniformes, es un array de pares (rmin, rmax) y las celdas
se reparten uniformemente este rango. Si la imagen es de 8 bits y el int doNotClear=0, const CvArr* mask=0)
rango es (0, ..., 255), se puede poner simplemente ranges=NULL. img: array de imgenes de 1 canal. Deben haber tantas como
Ejemplo. Crear un histograma con 1 dimensin y 256 celdas: nmero de dimensiones del histograma.
doNotClear: si se pone a TRUE, no borra el contenido anterior de
CvHistogram* hist1;
las celdas. Estos permite obtener histogramas acumulados de
int celdas= 256; varias imgenes.
hist= cvCreateHist(1, &celdas, CV_HIST_ARRAY); mask: mscara sobre la que se calcular el histograma.
Procesamiento Audiovisual 105 Procesamiento Audiovisual 106
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Esta forma tan particular de calcular el histograma, hace que sea Una vez calculado... consultar las celdas del histograma:
necesario separar los canales de una imagen. float cvQueryHistValue_1D (CvHistogram*hist, int idx0)
Ejemplo 1. Calcular el histograma unidimensional del nivel de gris: Para el caso de histogramas unidimensionales.
IplImage *gris= cvCreateImage(cvGetSize(img), 8, 1); // Ver abajo Realmente no es una funcin sino un macro.
cvCvtColor(img, gris, CV_RGB2GRAY); float cvQueryHistValue_2D (CvHistogram*hist, int idx0, int idx1)
cvCalcHist(&gris, hist1, 0); Para el caso de histogramas bidimensionales.
Ejemplo 2. Calcular el histograma bidimensional de los canales R y G: De forma similar para histogramas 3D y ND.
IplImage *planos[3]; Obtener un puntero a una celda del histograma:
planos[0]= cvCreateImage(cvGetSize(img), 8, 1); float * cvGetHistValue_1D (CvHistogram*hist, int idx0)
planos[1]= cvCreateImage(cvGetSize(img), 8, 1); Para el caso de histogramas unidimensionales.
planos[2]= cvCreateImage(cvGetSize(img), 8, 1); Devuelve un puntero. Esta funcin ser til si lo que queremos es
cvCvtPixToPlane(src, planos+0, planos+1, planos+2, 0); poder modificar a mano el valor de las celdas.
cvCalcHist(planos, hist2, 0); float * cvGetHistValue_2D (CvHistogram*hist, int idx0, int idx1)
Pero, qu porras pasa con la funcin cvGetSize? Sustituir por: Para el caso de histogramas bidimensionales.
#define ggmGetSize(A) cvSize((A)->width, (A)->height) De forma similar para histogramas 3D y ND.
Procesamiento Audiovisual 107 Procesamiento Audiovisual 108
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

18
A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y 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_8UC1);
Umbralizar un histograma: 1 fila y 256 columnas.
void cvThreshHist (CvHistogram* hist, double thresh)
La profundidad puede cambiar (8S, 16U, 32F, ...)
Borra todas las celdas con valor menor que thresh.
Aplicar una transformacin de tabla LUT:
Obtener mximo y mnimo de un histograma: CvMat* cvLUT (const CvArr* A, CvArr* B, const CvArr* lut)
void cvGetMinMaxHistValue (const CvHistogram* hist,
B(x,y):= lut(A(x,y))
float* minVal, float* maxVal, int* minIdx =0, int* maxIdx =0)
La imagen puede tener varios canales, pero la transformacin
Dado el histograma, calcula el mnimo (minVal), el mximo ser la misma en todos ellos.
(maxVal), el ndice de la celda mnima (minIdx) y mxima (maxIdx).
La profundidad de entrada debe ser 8 bits (con o sin signo), y
Puede ser interesante, por ejemplo, para escalar todas las celdas a la de salida (en B y en lut) puede ser cualquiera.
valores entre 0 y 1.
Procesamiento Audiovisual 109 Procesamiento Audiovisual 110
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

A.2. Procesamiento global en IPL y OpenCV. A.2. Procesamiento global en IPL y OpenCV.
Ejemplo. Aplicar una ecualizacin del histograma de una Ejercicios.
imagen img, usando CvHist y LUT: 1. Implementar sendas operaciones para obtener el mximo y
el mnimo de dos imgenes, que trabajen con imgenes de 1
3 canales.
cvCvtColor(img, gris, CV_RGB2GRAY); 2. Escribir una funcin que realice una transformacin de
int celdas= 256; curva tonal arbitraria. Debe recibir como entrada un array de
CvHistogram* hist1= cvCreateHist(1, &celdas, CV_HIST_ARRAY); 256 bytes (la curva).
cvCalcHist(&gris, hist1, 0); 3. Implementar las operaciones de colorear una imagen, en los
cvNormalizeHist(hist1, 256.0); modos de suma o producto.
CvMat *lut= cvCreateMat(1, 255, CV_8UC1);
float acum= 0.0; 4. Escribir un programa que realice la transformacin de color
for (int i= 0; i<255; i++) {
falso, dada una imagen en escala de grises.
cvSet1D(lut, i, cvScalarAll(acum)); 5. Escribir una operacin de ecualizacin del histograma, que
acum+= cvQueryHistValue_1D(hist1, i); funcione de manera independiente por cada canal.
} 6. Implementar la transformacin de estiramiento lineal del
cvSet1D(lut, 255, cvScalarAll(255)); histograma, que permita especificar los percentiles mnimo y
cvLUT(img, imgres, lut); mximo.
7. Escribir dos operaciones para mostrar el histograma de una
imagen, de un canal slo o de dos canales conjuntos. El
resultado debe ser una imagen (IplImage).
Procesamiento Audiovisual 111 Procesamiento Audiovisual 112
Tema 2. Procesamiento global de imgenes. Tema 2. Procesamiento global de imgenes.

19