Seguimiento de rasgos usando el filtro de Kalman. Ejemplo.

Transcripción

Seguimiento de rasgos usando el filtro de Kalman. Ejemplo.
Seguimiento de rasgos usando el
filtro de Kalman. Ejemplo.
Rafael Molina y Luis David Alvarez Corral
Dpto. Ciencias de la Computación e IA
Universidad de Granada
Rafael Molina y Luis D.
Alvarez
Seguimiento de rasgos usando el
filtro de Kalman
1
Contenidos
! Seguimiento basado en el filtro de Kalman
"
"
"
Filtro de Kalman aplicado al seguimiento
Parámetros a estimar
Asociación de rasgos
! Bibliografía
I. Seguimiento basado en el filtro de Kalman
I.1 Filtro de Kalman aplicado al siguimiento
El filtro de Kalman es, como ya sabemos, un algoritmo recursivo
que estima la posición y la incertidumbre de un rasgo en
movimiento en la imagen siguiente.
Es importante tener en cuenta que vamos a determinar: dónde
buscar el rasgo y su incertidumbre. Supondremos que en cada
imagen somos capaces de detectar rápidamente los rasgos de
interés.
Tenemos imágenes en los instantes tk=t0+k∆T, donde ∆T se
supone pequeño.
Modelo del sistema
El sistema físico se modeliza por un vector de estados s, llamado
simplemente el estado, y un conjunto de ecuaciones llamado el
modelo del sistema.
El tiempo de observación tiene la forma tk=t0+k∆T, k=0,1..., ∆T es
el intervalo de muestreo y sk el estado s(tk).
Vamos a suponer que ∆T es pequeño y que por tanto podemos
utilizar un modelo del sistema lineal.
Estado:
sk=(xk yk vxk vyk )t
posición en el instante k : (xk yk)
velocidad en el instante k : (vxk vyk)
Modelo del sistema:
sk=φk-1 sk-1 + ξk-1
 xk   1
  
 yk   0
 vx  = 0
 ky  
v  0
 k 
0 1 0   xk −1   ξ1 
  

1 0 1   yk −1   ξ 2 
· x  +  

ξ3
0 1 0 vk −1
 y   
0 0 1   vk −1   ξ 4 
φk-1 : El subíndice k-1 en φ indica que la matriz de transición φ es
(puede ser) una función del tiempo. En este caso no depende del
tiempo, la consideramos constante.
¿Cuál es la interpretación de sk=φk-1 sk-1?
xk= xk-1+vxk-1
yk= yk-1+vyk-1
vxk = vxk-1
vyk = vyk-1
En un instante k la posición es posición en el instante k-1 más
undesplazamiento (velocidad por tiempo, con t=1).
ξk-1 : Es un vector aleatorio gaussiano blanco de media cero y
matriz de covarianza Qk , y modeliza el ruido aditivo.
σ Q 2
0
0
0 


2
 0 σQ
0
0 
Qk = 

2
0
0
σ
0
Q


2
 0
0
0 σ Q 

donde σQ2 es un parámetro
Modelo de medida
El segundo ingrediente en la teoría de la estimación es el modelo
de medida.
Suponemos que en cada instante tk tenemos una observación
ruidosa del vector de estados.
Medida: zk=(zxk zyk) , donde zxk y zyk son las medidas que nos da
un sensor.
Modelo de medida: zk = Hk sk +µk
 xk 
 
x
 z k  1 0 0 0   yk   µ1 
 y  = 
 z  0 1 0 0 · v x  +  µ 
 k   2
 k 
vy 
 k
Hk : La matriz H controla el cambio de la estimación y es (puede
ser) una función del tiempo dependiente. En este caso no
depende del tiempo, la consideramos constante.
¿Cuál es la interpretación de zk=Hk sk?
zxk= xk
zyk= yk
µk-1 : Es un vector aleatorio gaussiano blanco de media cero y
matriz de covarianza Rk , y modeliza el ruido aditivo.
σ R 2
0 

Rk = 
2
 0 σR 
donde σR2 es un parámetro
Tenemos un punto que se mueve y se realizan observaciones
ruidosas de su posición en cada instante. Notemos que en casos
reales dichas observaciones ruidosas tienen que ser localizadas
utilizando, por ejemplo un detector de rasgos
Queremos estimar las posiciones reales usando el filtro de Kalman
Ecuaciones del filtro de Kalman
Tenemos un estimador sk-1 y su matriz de covarianzas Pk-1.
Primero calculamos, antes de que llegue la observación zk,
Pk ' = φ k −1 Pk −1φ k −1 + Q k −1
t
después la ganancia
(
K k = Pk ' H k H k Pk ' H k + R k
t
t
)
−1
a continuación el estimador del estado k óptimo (aquí metemos la
observación)
s k = φ k −1 s k −1 + K k ( z k − H k φ k −1 s k −1 )
y por último la matriz de covarianzas de este estimador
(
Pk = Pk '− Pk ' H k H k Pk ' H k + R k
t
t
)
−1
H k Pk ' = Pk '− K k H k Pk '
= (I − K k )Pk ' (I − K k ) − K k R k K k = (I − K k H k )Pk '
t
t
Tenemos un objeto que deseamos seguir.
El problema es que el sensor (estimador, etc) que nos da la
posición del objeto en cada instante no es muy preciso.
Este proceso lo simulamos en el ejemplo
detectando la posición del punto en cada
instante, y añadiéndole un error aleatorio
basado en un máximo dado como
parámetro.
r = Rand(1) Є (0, 1.0)
zxk
zyk
pmr=2 (nº entero dado como parámetro)
r*(pmr+1)*2 = r*3*2 Є (0, 6.0)
[0, 6.0] – (pmr+1) = (0, 6.0) – 3 Є (-3.0, 3.0)
fix redondea al entero más cercano hacia 0
fix(-3.0,3.0) = -2, -1, 0, 1, 2
ruido_x=fix(((rand(1)*(pmr+1))*2)-(pmr+1))
ruido_y=fix(((rand(1)*(pmr+1))*2)-(pmr+1))
Implementación
!
% Implementacion del FILTRO DE KALMAN ***************************
!
!
!
!
!
!
!
!
!
!
!
%
% Parametros:
% vx0
% vy0
% varR
% varQ
% pixMaxRuido
% rutaSec -> directorio en el que esta contenida la secuencia (sin \ al final) [ruta absoluta]
% nombreSec -> nombre que tienen los ficheros de la secuencia (hasta justo antes del numero y sin .bmp)
% nFrames
%
!
function [ ] = FiltroKalman(vx_0,vy_0,varR,varQ,pixMaxRuido,rutaSec,nombreSec,nFrames)
!
!
!
!
!
!
!
!
!
% Constantes prefijadas (H de k // A de k-1)
H_k=[1 0 0 0;
0 1 0 0]; % Matriz H que controla el cambio de la estimacion z_k
A_k1=[1 0 1 0;
0 1 0 1;
0 0 1 0;
0 0 0 1]; % Matriz phi que relaciona un estado con el siguiente
I=eye(4); % Matriz identidad de tamaño 4x4
Hk
Ak-1= φk-1
% Pseudovariables (R de k-1 // Q de k-1)
!
!
!
R_k=eye(2)*varR; % Matriz de covarianza R (2x2)
!
Q_k1=eye(4)*varQ; % Matriz de covarianza Q (4x4)
!
!
!
!
!
!
!
!
!
!
!
Rk : µk
Qk-1 : ξk-1
% Valores iniciales ( P_0 // S_0)
vx_k=vx_0; % suponemos velocidad en x constante
vy_k=vy_0; % suponemos velocidad en y constante
[x_k y_k zx_k zy_k]=ObtencionObservaciones03(rutaSec,nombreSec,1,pixMaxRuido);
% medida real en el frame k=1 (inicialmente)
S_pk=[x_k y_k vx_k vy_k]';
P_k=[1 0 0 0;
0 1 0 0;
0 0 1 0;
0 0 0 1];
sk
Pk
!
!
% Iteramos <==> KALMAN
!
!
k=2; % iteracion
while(k<nFrames)
!
!
!
% Actualizamos el estado k con el k-1
S_pk1=S_pk;
P_k1=P_k;
!
!
!
% 1ª ecuacion del filtro
P_pk = ( A_k1 * P_k1 * A_k1' ) + Q_k1;
Pk ' = φk −1 Pk −1φk −1 + Qk −1
t
!
!
!
% 2ª ecuacion del filtro
K_k = P_pk * H_k' * inv( (H_k * P_pk * H_k') + R_k );
(
K k = Pk ' H k H k Pk ' H k + Rk
t
t
)
−1
!
!
!
!
!
!
!
!
% Llega la observacion z_k
[x_k y_k zx_k zy_k]=
ObtencionObservaciones(rutaSec,nombreSec,k,pixMaxRuido);
z_k=[zx_k zy_k]';
s k = φ k −1 s k −1
% 3ª ecuacion del filtro
S_pk = (A_k1 * S_pk1) + (K_k * (z_k - (H_k * A_k1 * S_pk1)));
+ K k ( z k − H k φ k −1 s k −1 )
% 4ª ecuacion del filtro
P_k = (I - (K_k * H_k)) * P_pk;
Pk = (I − K k H k )Pk '
!
!
!
!
!
% Pasamos a calcular el siguiente estado
k=k+1;
!
!
end % while(i<nFrames)
Secuencia: obstáculos
Frames: 58
vx≈5 pix/frame
vy≈5 pix/frame
Estrella roja = real
Cruz verde = sensor
Círculo azul = Kalman
Secuencia: círculos
Frames: 105
vx≈5 pix/frame
vy≈5 pix/frame
Estrella roja = real
Cruz verde = sensor
Círculo azul = Kalman
¿Qué hacemos para representar la incertidumbre?.
Por simplicidad, representaremos los elementos diagonales de la
matriz de covarianzas Pk como semiejes sobre el punto que
estamos siguiendo.
Varianza
dirección de las
y
Un ejemplo bidimensional
Varianza
dirección de las
x
Punto en
seguimiento
I.2 Parámetros a estimar
Es necesario tener estimadores, tanto de la matriz de
covarianza del modelo como del sistema, así como un estimador
inicial de la matriz de covarianzas de estados.
Sin embargo, lo más importante es tener un estimador de la
matriz de ganancia Kk. Por la forma de esta matriz, si Rk es
mucho menor que Qk el estimador será más dependiente del
modelo de las observaciones que del sistema. Mientras que en
caso contrario, la estimación depende más del sistema que de
la observación.
Es, por tanto, el peso relativo de estas matrices lo que
condiciona la estimación.
I.3 Asociación de rasgos
No es una tarea fácil. El método más
simple es el llamado de agrupaciones
pequeñas y objetivos que no se
solapan.
Figura a. En la imagen siguiente
seleccionamos la medida
correspondiente al objeto detectado
que se encuentra en la zona de
predicción.
+m1
•p1
•p2
+m2
a
•p2
•p1
+m1
+m2
El método falla en la situación de la
figura b.
b
II. Bibliografía
•Trucco, E. y Verri, A., (1998), ‘Introductory
Techniques for 3-D Computer Vision’, Prentice Hall.

Documentos relacionados