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.
 
 
Reunir imágenes. Estrategias V. Simulación Aproximación por micropasos II (incluido en Danzante)
 
Ante el éxito de este acercamiento puntual, desarrollado en Aproximación por micropasos I, abordamos el siguiente paso, que es, naturalmente, dejar que un sencillo algoritmo decida cuál es la dirección, espacial, circular, que nos acerca más deprisa al esqueleto incógnita. La cosa es simple: probamos con las seis y elegimos la mayor, es decir, la que disminuye más deprisa la distancia (por ahora lineal) a ese objetivo.
 
Por el momento se trata de visualizar y comprender lo que está pasando, un proceso convenientemente lento. Más adelante, suprimimos la representación y establecemos una política de pasos grandes, decreciendo cuando nos acercamos al objetivo.
 
En el siguiente vídeo se contempla el proceso, y se comenta.
 
Reunión de dos esqueletos de la misma persona en dos cámaras. Algoritmo automático por microsaltos-clip0003.avi
 
 
 
 
 
El algoritmo es simple. Se basa en
0. Disponemos ya de un esqueleto de partida con el que inicializamos el móvil.
0'. Elegimos el ángulo diferencial de los cuaterniones elementales (6) de giros.
1. Elegir esqueleto incógnita.
      2. Determinar el acercamiento óptimo (más rápido)
      3. Girar (transformar) el esqueleto móvil con el cuaternión y matriz correspondientes a esa dirección.
4. Continuar con el ciclo 2-3 hasta llegar a una distancia aceptable, arbitrariamente elegida.

______________________________________________________________________________________________________________________________

       Public Function reune_por_microaproximaciones(ByVal pseudoskel_orig() As Point4D, ByVal pseudoskel_incog() As Point4D) As Double

             Dim veces As Integer = 0

             Dim pseudoskel0_1 = pseudoskel_orig

             Dim distas As Double = 1000       '10 metros

             While distas > 1 And veces < 1000  '8cm

                    'elige la mejor

                    Dim quater = elige_el_mayor_gradiente(pseudoskel0_1, pseudoskel_incog)

                    pseudoskel0_1 = realiza_una_microaproximacion(pseudoskel0_1, quater, pseudoskel_incog)

                    distas = 100 * distancia_pseudoskel(pseudoskel0_1, pseudoskel_incog)

                    veces = veces + 1

             End While

             Return distas

       End Function

______________________________________________________________________________________________________________________________

 

Esta función encuentra la dirección del acercamiento óptimo:

 

______________________________________________________________________________________________________________________________

       Public Function elige_el_mayor_gradiente(ByVal pseudoskel0_1() As Point4D, _

                                         ByVal pseudoskel_incognita() As Point4D) As Quaternion

             '6 direcciones: 1

             'VA BIEN

             Dim matriz_inter As Matrix3D, cuaternion_inter As Quaternion

             Dim distas, distas0 As Double: Dim distancias(6) As Double:       Dim quater_grad(6) As Quaternion

             If pseudoskel0_1 Is Nothing Or pseudoskel_incognita Is Nothing Then _

                                 adosa_texto("Esqueleto actual o Incognita no seleccionados")

 

             call inicializa microsaltos(salto)   'sólo al cambiar el salto

 

             Dim quater As Quaternion: distas = 100 * distancia_pseudoskel(pseudoskel0_1, pseudoskel_incognita): distancias(0) = distas

 

             Dim pseudoskel_prueba(20) As Point4D

             For qq = 1 To 6

                    matriz_inter = Matrix3D.Identity '.Rotate(quaternion3dimen)

                    matriz_inter.Rotate(quater_grad(qq))

                    'no se debe modificar pskel 0_1

                    pseudoskel_prueba = transforma_pseudoesqueleto(pseudoskel0_1, 2, matriz_inter, quater_grad(qq), 0)

                    distas = 100 * distancia_pseudoskel(pseudoskel_prueba, pseudoskel_incognita)

                    distancias(qq) = distancias(0) - distas 'incremento ha de ser grande

             Next

 

             Dim incre_max As Double = -10000

             Dim caso_max As Byte

             For qq = 1 To 6

                    If distancias(qq) > incre_max Then incre_max = distancias(qq) : caso_max = qq

             Next

              '¡'ya se sabe cual es la buena

             Return quater_grad(caso_max)

        End Function

______________________________________________________________________________________________________________________________

 

sub inicializa microsaltos(salto)

           'esto puede hacerse antes, al inicializar,  no repetir cada vez  

          ', hay que repetir tambian al cambiar el tamaño de salto

                   '            Case 23             ' <‒-  ←

             quater = CuaterBusca1:  quater.Invert():  quater_grad(1) = quater

             quater = CuaterBusca1:              quater_grad(2) = quater

             quater = CuaterBusca2:              quater.Invert():              quater_grad(3) = quater

             quater = CuaterBusca2:              quater_grad(4) = quater

             quater = CuaterBusca3:              quater.Invert():              quater_grad(5) = quater

             quater = CuaterBusca3:              quater_grad(6) = quater:

end sub

 

'....⌠⌡┌ ┐└ ┘∩∫ↄↃ₍₎

______________________________________________________________________________________________________________________________

 
 
¿Qué nos queda? 
 
1. Añadir un cierto ruido (variaciones aleatorias a algunas articulaciones
2. Reducir el salto al final y aumentarlo al principio, para llegar más deprisa a la aproximación óptima.
3. Variar esa cota  de calidad
4, Variar la distancia, es decir su tipo.
5. Añadir orígenes diferentes a cada imagen (translación diferente para cada uno, situación que se presenta con dos cámaras.
6. Operar con dos cámaras reales, diferentes y simultáneas.
 
 

 
Vuelta al Principio    Última actualización: viernes, 18 de septiembre de 2015    Visitantes: contador de visitas