Esta página está en construcción: perdonen los errores, repeticiones y temas inacabados.
 
This page is being developed: I am sorry for errors, duplications  and unfinished subjects.
 
 
Proyecto Danzante. Optimización. JCISER (incluido en Danzante)
 
Veamos este criterio en su desarrollo anunciado en Esquema general de la aplicacion.JCISER. y sus etapas.
 
    Criterio de optimización
1. Minimizar la función JR Σi || R(qi - cq ) + t - (pi - cp ) || 2   mediante δJ / δR = 0, es decir, vamos variando la matriz R de modo que disminuya continuamente J  hasta que se haga menor que una cota arbitraria.
1- Optimización. En tiempo real .
 
    Datos:
1. Una pareja de esqueletos provinentes de las dos cámaras en igual posición relativa
2. La matriz R obtenida en la calibración.
3. Las longitudes de huesos (Longitudes de los huesos VIII.JCISER)
4. Las posiciones de ya optimizada en la pareja anterior.
    Incógnitas
1. Las posiciones de las articulaciones o nudos de un esqueleto promedio de la pareja.
    Criterio de optimización
1. Minimizar la función  J0 ({ pi*})  Σi ε Sa   wiA|| pi* -  pi || 2 + wiB|| pi*  -  (Rqi + t ) || 2   con la condición
                                                          Σi,j ε Sa   ( || pi* -  pj ||   - Li,j ) 2 = 0
llamando
 
m i =  ( || pi* -  pj* ||   - Li,j ) 2   y   M = Σi,j ε Sa  m i     y         j0i =  wiA|| pi* -  pi || 2 + wiB|| pi*  -  (Rqi + t ) || 2
 
podemos expresarlo como:
 
Queremos minimizar  J0   Σi ε Sa   j0i     con     M = 0
     Método
Vamos a construir y minimizar la función auxiliar:
 
J1(X) Σ wiA|| pi* -  pi || 2 + wiB|| pi*  -  (Rqi + t ) || 2   +   λ Σi,j ( || pi* -  pj* ||  - Li,j  ) 2  
 
 o sea   J1(X) =  J0    +   λ M
 
con la pareja incógnita  X = [ { pi*},  λ ]  siendo actualizada mediante la iteración:
 
a.   ▼J2 (X)  ∙  d  =  - ▼J (X)     mediante el par de ecuaciones       H dp + λ ΛT  =  bp     ,      Λ dp  =  bλ
 
b.     X <  - X + τ d     con d optimizado      { pi*}new= { pi*} +  dp                 
           
                                                    (suponemos que d es dp ; o más bien el valor final de los dp de cada iteración)
 
Empleando dos expresiones, dependientes una de las distancias entre longitudes de huesos conocidas (calibración) y las de las óptimas:

bλ =   - ( Σi,j ε Sa ( || pi* -  pj* ||   - Li,j ) 2 ) }          bλ =  - M

 Λ =  { δ/ δ p*i ( Σi,j ε Sa   ( || pi* -  pj*  ||   - Li,j ) 2  )  }         o sea        Λ =  {  δ/ δ p*i M)

y otras de la distancia entre las posiciones de la óptima y una de las estimadas (la más fiable, con wi  mayor) :

           bp =  - { δ/ δ p*i Σ wiA || pi* -  pi || 2 + wiB || pi*  -  (Rqi + t ) || 2 }       o sea       bp =  { -   δ/ δ p*i  Σj0 )

H es diagonal:  hi = δ2/ δ (p*i)2 ( wiA|| pi* -  pi || 2 + wiB|| pi* -  (Rqi + t ) || 2 )     o sea   hi =  δ2/ δ p*i2  j0i  

Los coeficientes en las primeras expresiones se calculan mediante

 vi=  sAi,m  / ( sAi,m +  sBi,m )         vi=  sBi,m / ( sAi,m +  sBi,m )

 wi=  (kAi  viA ) 4  / (  (kAi  viA ) 4  +  (kBi  viB ) 4   )         wi=  (kBi  viB ) 4  /  ( (kAi  viA ) 4  +  (kBi  viB ) 4   )   

siendo s las distancias aparentes, en pantalla, para la articulación i en ambos esqueletos;

 kA , kB = 1 - kcoeficientes empíricos elegidos (iguales) con k tracked =0.786  (explicar)

Eficientemente operamos así:

 λ = ( ΛH -1 bp  - bλ  ) / ( ΛH -1ΛT )    y     dp = H -1 ( bp  - ΛT λ )  

Al acabar por haberse alcanzado un mínimo bajo la cota elegida, tenemos ya los valores de las  posiciones de las articulaciones optimizadas, pi* optimizados que hemos ido actualizando en el proceso de minimización. Véase el Algoritmo
de esta iteración.
 
Como comentarios generales para aclarar los conceptos y los procedimientos prácticos recordamos:
 
Notación
1. Matrices se representan aquí mediante mayúsculas. Sus transpuestas mediante T superíndice. Inversas con superíndice -1
2. Vectores con minúsculas en negrita. Números con minúsculas normales.
3. ||  ||  es módulo o longitud del segmento o vector;  p son articulaciones en una cámara, q en la otra,  {  }  es conjunto, ▼ es el signo de gradiente, subíndice i significa numero de articulación
4.  * significa optimizado; suponemos que en principio tomamos pi* como lo hicimos en la etapa 1, es decir, como promedio simple: pi* = ( pi  + Rqi + t ) / 2. Asimismo representa el esqueleto cambiante sintetizado, variable en cada etapa.
Iteración
5. hay que determinar (elegir) los valores iniciales para la iteración: pi* será el promedio simple citado,
6. dp se suma a  pi*, de modo que es un vector similar a pi*, con 20 desplazamientos en cada una de las 3 direcciones del espacio, 60 componentes.
Derivadas
Podemos derivar a lo bruto (incrementos de función divididos por incremento de variable) o analíticamente, aplicando las leyes de la derivada de funciones compuestas:    f '=df(x)/dx;    df2(x)/dx=2ff ';  d2f (x)/dx2 =2f f ''+2 f '2
9. Así que cuando tenemos derivadas de sumas, debemos sumar y luego derivar, y no invertir ese orden, porque una variación de una pi* pudiera afectar a más de un sumando (por ejemplo, la variación de una única articulación afectará a las longitudes de uno, dos o tres huesos, como apuntábamos en 7.
 
10. Derivada segunda se escribe aquí como δ2/ δ p*i2
11. Todas estas derivadas, primeras o segundas, corresponden al mismo incremento, ya que pertenecen a una misma iteración.
 
Campo Escalar
3. A diferencia del campo en la calibración., que era una distancia entre esqueletos de igual forma, esqueleto rígido podemos decir, en la optimización tenemos una función distancia compleja. entre esqueletos, pero no rígidos, porque cada articulación ha de sufrir una desplazamiento (vector en el espacio) diferente del de los demás, de modo que disminuya n las distancias al par de esqueletos que vamos a componer o sintetizar en el óptimo; y simultáneamente han de mantenerse las longitudes de los huesos obtenidas en la calibración, tomadas como valores verdaderas, lo que se ha de conseguir mediante la función J1.
4. El algoritmo de acercamiento por lo tanto será más complejo. En un lugar de un sólo ciclo de acercamiento, en la que cada etapa supone la variación de 3 elementos de giro global (de todo el esqueleto) independientes, lo que permite acercamientos individuales que pueden alternarse libremente e ir acumulándose en una matriz R, tal como se realiza en en la Calibración, en la Optimización contamos con una función a minimizar, J1, que debemos evaluar en cada etapa. Y cada etapa será modificar por desplazamiento una de las articulaciones, y evaluar la repercusión en J1, que toma en cuenta todo el esqueleto, es decir todas las articulaciones.
5. Podríamos trabajar en un círculo vicioso si atendemos primero a J0 (distancia de esqueleto óptimo a los dos originales y luego a M (longitudes de huesos constantes) sin lograr un acercamiento global porque ambas funciones son en cierto modo opuestas (mejorar una supone empeorar la  otra).
Por ello contamos con J1, que atiende simultáneamente a ambos requerimientos, s3egún el método descrito más arriba.
7. Nos queda entonces decidir el orden de actualización de cda articulaciones, el cual, pensamos influirá probablemente en la velocidad de convergencia del algoritmo (¿quizá en la convergencia misma --si sí o si no-- ?)
7'. El número   λ  es el mismo para todos las retoque que se hagan juntos.
8. Las derivadas a anular (o minimizar) se consiguen variando una a una las componentes del parámetro variable de las que depende, sea este una matriz o un vector, comprobando qué incrementos bajan el valor de la función y eligiendo los mejores. En todos estos casos el parámetro variable es pi* , un vector o mejor, una conjunto de posiciones (puntos) en el espacio. De modo que los incrementos individuales (números) a probar son 6, 3 coordenadas en dos sentidos opuestos. direcciones, de los que elegimos uno, como se hacía al reunir dos esqueletos en la calibración.
8'. Sólo que es la citada calibración un desplazamiento afectaba a todos loas articulaciones simultáneamente, mientras que en este caso, hay que elegir esa direccio entre 6 para cada una de las articulaciones p* por separado, sucesivamente, en un orden todavía no considerado.
5'. El orden natural en cuanto a M, es el numérico actual del esqueleto, porque parte de un de una posicion fija, la 0, y se va propagando por los sucesivos 5 miembros0: clumna, brazos, piernas.
8". Y además el valor de la función era una cantidad inmediata, la distancia entre dos esqueletos, mientras que en esta optimización, tenemos dos funciones, J0 y M a evaluar escalonadamente (según el método) y considerar.
8'". Así elegimos un desplazamiento* 20 puntos = 60 incrementos individuales. Como la función J y M son sumas, una mejora en un punto mejora (disminuye) ambas expresiones. El problema es que la modificación de un punto puede repercutir en los unidos a él en el esqueleto, modificando M, medida de 'errores' en longitudes de hueso. Por ello es necesaria una búsqueda de los mejores valores en la matriz de incrementos H y  vectores de incrementos, bp, y Λ
9. pero tras probar lo anterior, que no va porque lambda es siempre negatico, probamos un dp cole completo, proporcionado (dios nos asista) por los cálcyulos de mas arriba.
Cada iteracion propondrá un dp completo y luego se trata de escalarlo, porque el dp corresponde a un tamaño, el incremental. De modo que lo escalamos con un parámetro llamado 'salto' que iremos reducinedo progresivamente, en la mejor tradicion de Mr. Newton.
Matrices y vectores
M1. Contamos con los siguientes números (reales) en este método: wa,wb, λ , M, bλ, J1, J0 ; con los siguientes vectores (fila):  j0i , Λ , bp, Dp; y con la matriz diagonal H . De los numeros  wa,wb, λ  no tienen dimensión (son tantos por uno), los demás sí, representan distancias. Los  j0i , Λ , bp, son vectores (arrays) de números; Dp de vectores3D (puntos), como los esqueletos. 
M2. La dimensión de todos los vectores es 20 (numero de articulaciones). Las de la matriz diagonal (20x20).
M3. El producto matricial  ΛH -1 se simplifica por ser H diagonal: el elemento de la matriz inversa es simplemente 1/Hjj, y el elemento Pij de la matriz producto es pues Λij / Hjj.
M4. Recordamos que el producto de una matriz Mn,n por un vector Vn, es un número este orden: M .V siendo V columna.
M5. Y en este orden V.M es otro vector: V ha de ser fila y el resultado es también un vector fila .
M6. El resultado  λ = ( Λ . H-1 .bp  - bλ  ) / ( Λ.H-1 . ΛT ) es el cociente de dos números reales, una diferencia de reales en el numerador y
 un producto de matrices igual a un real en el denominador. La diferencia de reales exige que minuendo es real:  Λ . H-1 . bp . Y como H es diagonal, el producto matricial  ΛH -1 se simplifica: el elemento de la matriz inversa es simplemente 1/Hjj, Y el producto del vector Λ por H ha de ser un vector que multiplicado por el vector bp he de dar un numero.
M7. Suponiendo que multiplicamos empezando por derecha (vamos multiplicando el último por el anterior, y así sucesivamente.
luego el primer producto H-1 .bp  ha de situar bp como vector columna, para que se obtenga otro vector columna
que multiplicado a su vez por  Λ situado como vector fila nos dé un numero real como resultado.
de modo que si tomamos todos los vectores como filas, bp debería estar transpuesto. Λ . H-1 .bpT
y si tomamos todos los vectores como columnas, entonces sería Λ  el transpuesto.  ΛT . H-1 .bp
ahora, como el denominador ha de ser un número,  ΛT ha de ser columna, luego los vectores en la notación del articulo son Vectores fila.
la notación correcta de  λ  sería, por lo tanto.
     λ = ( Λ . H-1 .bpT  - bλ  ) / ( Λ.H-1 . ΛT )
el producto H-1 .bpT es el vector columna bpi / hii 
el producto H-1 .ΛT es el vector columna Λi / hii 
M8. En  dp = H-1 ( bp - ΛT λ )  tenemos un vector como resultado, de modo que todos los elementos son vectores si son sumandos; y los productos han de ser vectores por matrices o numeros.
luego lo correcto es, considerando siempre que los vectores normales son fila y los transpuestos columna:
        dp =  ( bp - Λ λ ). H-1:   o sea   cada componente i, dp1=bpi -λ.Λi' / hi
 
  
Veamos aquí Optimización. Algoritmo.
 
 

 
Vuelta al Principio    Última actualización: viernes, 26 de agosto de 2016    Visitantes:contador de visitas