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. Aproximación por microdesplazamientos. Ruido (incluido en Danzante)
 
A los dicho en las pági
 
Lo que se hace con rotaciones con ruido hay qye hacerlo con desplazmaientos (6 en el espacio) hast hacerlo casar.
 
Se hace despues de los giros, en las meras cercanías.
 
 
 
 
 
 
 
mas prrevias 1 a IV añadimos ahora esta información esobre consegior cpmdociones más reales, en particular, los errpres o vinestabilidad en los situaciones de los particulaciones, lo que podemos a similar a un ruido, es decir, errores en una supuesta transmisión desde un estado ideal perfecro a lo que sucede en este mundo traidor.
 
Por ello añadimos valores aleatorios diferentes (distribución normal o gaussiana) de disviación típica arbitraria a cada una de las varibles espaciales (x,y,z) de cada articulación de uno de los esuqletos que aproximamos, por ejemplo, el incógnita.
 
Como no podemos saber si el ruido añadido hace imposible o no alcanzar una cercanía (distancia) prefijada, recorrimos a dos controles o cota:
1. Una , por distancia máxima entre esqueletos (la anterior).
2. Por salto ángulo de búsqueda.
3. Número de saltos (sólo incluida para evitar bucles infinitos debido a no alcanzar una de las anteriores).
.
Renunciamos a una cuarta (ensayada sin resultados aceptables): por estabilidad y horizontalidad de la curva de acercamiento al mínimo.
 
la primera  actúa bien intentando acercarse hasta que la distancia se hace menor que una cota arbitraria (por ejemplo 1mmm de distancia media). pero una ruido puede generar una bola alrededor de l la incógnita que al hace inalcanzable.
 
La segunda actúa intentando conseguir ángulos de búsqueda (comienzan en 10º a 60º) mayores que los incrementales (1º a .1º) , y se van dividiendo por 2 cada vez que rebasamos (distancia aumenta en lugar de disminuir) el mínimo.
 
Algunos resultados iniciales esperanzadores: 
 
Dist: Ini= 526 65,0º | 22,0º Busca=04 mm| 19,0º | 10,0º
Res: 1 0.625 1
-0,461318731249129;     0,302114926409592;    -1,04073711832618;    0,337317338716168
0,0425926704654612;    0,263927007480558;    0,922730686160967;   0,277662528912147
-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723


Dist: Ini= 523 64,0º | 21,0º Busca=06 mm| 19,0º | 09,0º
Res: 1 0.9375 1
-0,461318731249129;    0,302114926409592;     -1,04073711832618;     0,337317338716168
-0,0263146674039252;  0,196898912078596;     0,941998675746143;    0,270512202301853

-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723


Dist: Ini= 526 65,0º | 22,0º Busca=01 mm| 19,0º | 10,0º
Res: 1 0.46875 0.1
-0,461318731249129;0,302114926409592;-1,04073711832618;0,337317338716168
-0,0227739039554768;0,201054394046745;0,944434323024267;0,259041096019179

-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723

 
Sin ruido
 Dist: Ini= 540 41,0º | 11,0º Busca=90 mm| 23,0º | 04,0º
Res: 1 0.078125 0.1
-0,461318731249129;0,302114926409592;-1,04073711832618;0,337317338716168
-0,0373218077656522;0,0998736170711611;0,845187141299383;0,523728020503477

-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723

 
Con ruido DT=10
 Dist: Ini= 560 46,0º | 12,0º Busca=91 mm| 24,0º | 04,0º
Res: 1 0.078125 0.1
-0,461318731249129;0,302114926409592;-1,04073711832618;0,337317338716168
-0,0393779674692616;0,100574872036143;0,875845205999347;0,470350131200989

-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723

 
Ruido 10 Dos veces sucesivas


Dist: Ini= 557 45,0º | 12,0º Busca=91 mm| 25,0º | 04,0º
Res: 1 0.0390625 0.01
-0,461318731249129;0,302114926409592;-1,04073711832618;0,337317338716168
-0,0382162344030577;0,0999769813898108;0,870839528433735;0,479773528175164

-0,39167701072271;0,256506972848058;-0,883625085741485148,037088356723
Lo mismo pero con incremnetal=.01 grados sexa

Figura debajo

A simple vista se ve la pobre convergencia

Dist: Ini= 210 126,0º | 06,0º Busca=01 mm| 104,0º | 00,0º
Res: 1 0.15625 0.1
-0,378224760284999;-0,0291025243106742;1,7611586811461;0,0786926626946378
0,847921494706488;-0,51658333962585;-0,0824792107766373;0,0858368908184747

-0,209944132619806;-0,0161541624584477;0,977579922161755174,997758298157

 
Con esas articulaciones converge tomando 30º a priori, Sin ruido
  Con ruido
Es decir, el ruido 'desconcierta' al buscador, incluso con una desviación típica media de 10 mm (20, 50 10 en x,y,z). Vamos a limitar el número de puntos en la búsqueda (en concreto, para el cálculo de distancia en línea recta, cuerdas) para ver si la búsqueda es más segura y r´pida.
 
En efecto, cuando reducimos puntos a hombros  codos y cabeza, converge. Son más fiables, lo que revalida lo citado en Comparación con  ISTDK. Además se reduce  el número de operaciones y de ahí, el tiempo de cálculo. Otro caso en que las articulaciones de manos y muñecas (y cabeza) desorientan al buscador (primer caso).
 
Cuando reducimos a cabeza, hombros y codos, se converge, y se converge rápido (2º caso y figura).
 Dist: Ini= 187 03,0º | 14,0º Busca=188 mm| 27,0º | 27,0º
Resultados: Cota_distan: ángulo salto: 0.05859375 salto increm: 0.1 ruido: 10  Pasos: 30
Incog eje:  0,274408469698147;   -0,0657865204295606; 0,959360268870716
Estim eje: -0,0336506864508215; -0,0843953912138723; 0,995863971254732
Incog angle:176,211378407309
Estim angle:176,211378407309


Dist: Ini= 197  114,0º | 120,0º Busca=06 mm| 84,0º | 85,0º
Resultados: Cota_distan: ángulo salto: 0.05859375 salto increm: 0.1 ruido: 10 Pasos: 88
Incog eje:  0,274408469698147; -0,0657865204295606; 0,959360268870716
Estim eje: -0,917311824354365; 0,397842914449204;  -0,0161255177352645
Incog angle:176,211378407309
Estim angle:176,211378407309
 

 
Incluso ruido=40 (desvtip =40mmm, todas las coordenadas de todas las articulaciones), quedando eso sí a más distancia media mayor 2 cm. En la figura siguiente se aprecia ya una separcion entre buscador e incognita (amarillo y verde) lógica porque ya no son iguales.
 
 Dist: Ini= 312 103,0º | 111,0º  Busca=20 mm| 78,0º | 79,0º
Resultados: Cota_distan: 1  ángulo salto:30 a  0.00732421875   salto increm: 0.01 ruido: 40  Pasos: 55
Incog eje:-0,882628910705969;0,457500643856379;-0,10797854813338
Estim eje:0,236555283722422;-0,810783158686658;-0,535417843682007
Incog angle:145,73800197824
Estim angle:145,73800197824

 Dist: Ini= 313 103,0º | 111,0º Busca=32 mm| 77,0º | 80,0º
Resultados: Cota_distan: 1  ángulo salto: 0.00732421875  salto increm: 0.01 ruido: 50  Pasos: 49
Incog eje:-0,882628910705969;0,457500643856379;-0,10797854813338
Estim eje:0,681137103849455;-0,657116393342618;-0,322878137011422
Incog angle:145,73800197824
Estim angle:145,73800197824

Incluso 100 mm
 
 Dist: Ini= 311 106,0º | 113,0º Busca=55 mm| 83,0º | 87,0º
Resultados: Cota_distan: 1ángulo salto: 0.00732421875salto increm: 0.01ruido: 100 Pasos: 39
Incog eje:-0,882628910705969;0,457500643856379;-0,10797854813338
Estim eje:0,714329646402739;-0,635036032847364;-0,294044883063146
Incog angle:145,73800197824
Estim angle:145,73800197824

 
Incluso 140 mm y segumos probabdo
Dist: Ini= 319 113,0º | 119,0º Busca=60 mm| 92,0º | 96,0º
Resultados: Cota_distan: 1   ángulo salto: 0.00732421875  salto increm: 0.01   ruido: 140  Pasos: 63
Incog eje:-0,882628910705969;0,457500643856379;-0,10797854813338
Estim eje:0,20296046229761;-0,866059415230191;-0,456889636602845
Incog angle:145,73800197824
Estim angle:145,73800197824

 
 
Curiosamente, la distancia ´menor a la que se llega es aproximadamnte la mitad de la derciacaion típica impuest al esqueleto incógnita
 
La rutina queda por ahora así:
 
            ____________________________________________________________________________________________

       '¡salto_incremental

       'Intento con RUIDO Esto dunciona perfectamente sin ruido, converge rápido

       Public Function reune_por_microaproximaciones_paso_controlado(ByVal pseudoskel_orig() As Point4D, _

                     ByVal pseudoskel_incog() As Point4D, _

                     angulo_salto As Double, cota_distan As Double, salto_incremental As Double) As Double

             'Dim veces As Integer = 0

             Dim pseudoskel0_1 = pseudoskel_orig

             Dim distas, distas0 As Double     '10 metros

             distas = 1000

             veces = 1

             cuaternion_estimacion_total = Quaternion.Identity

             parado = 0

 

             MatrizBusqueda1 = contruye_mat_giro(salto_incremental, 0) : CuaterIncre1 = quat_de_matriz(MatrizBusqueda1)

             MatrizBusqueda2 = contruye_mat_giro(salto_incremental, 1) : CuaterIncre2 = quat_de_matriz(MatrizBusqueda2)

             MatrizBusqueda3 = contruye_mat_giro(salto_incremental, 2) : CuaterIncre3 = quat_de_matriz(MatrizBusqueda3)

otor_angulo:

             MatrizBusqueda1 = contruye_mat_giro(angulo_salto, 0) : CuaterBusca1 = quat_de_matriz(MatrizBusqueda1)

             MatrizBusqueda2 = contruye_mat_giro(angulo_salto, 1) : CuaterBusca2 = quat_de_matriz(MatrizBusqueda2)

             MatrizBusqueda3 = contruye_mat_giro(angulo_salto, 2) : CuaterBusca3 = quat_de_matriz(MatrizBusqueda3)

             Dim quater_sal As Quaternion

             '            Case 23             ' <‒-

             quater_sal = CuaterBusca1 : quater_sal.Invert() : quater_salto(1) = quater_sal

             '                          Case 25      ' ‒->  = Key.Right

             quater_sal = CuaterBusca1 : quater_salto(2) = quater_sal

             '                          Case 26             ' v

             quater_sal = CuaterBusca2 : quater_sal.Invert() : quater_salto(3) = quater_sal

             '                   Case 24             ' ^

             quater_sal = CuaterBusca2 : quater_salto(4) = quater_sal

             '                          Case 20             'PgDn

             'pòr ahora

             quater_sal = CuaterBusca3 : quater_sal.Invert() : quater_salto(5) = quater_sal

             '                          Case 19      'PgUp

             quater_sal = CuaterBusca3 : quater_salto(6) = quater_sal

             'Public quater_salto(6) As Quaternion

             'SI HAY RUIODO, HABRÁ QUE ^PONER OTRAS DETENCIONES AUTOMATICAS

             'Por estabilidad de valores por encima de la cota de fin

             While distas > cota_distan And veces < 1000 And parado = 0 'Then   ''milimetros

                    'elige la mejor

                    quater_sal = elige_el_mayor_gradiente_incremental(pseudoskel0_1, pseudoskel_incog)

                    'pseudoskel0_1 = realiza_una_microaproximacion(pseudoskel0_1, quater, pseudoskel_incog)

                    pseudoskel0_1 = realiza_una_microaproximacion_opciones(pseudoskel0_1, quater_sal, pseudoskel_incog, 1, 1)

                    cuaternion_estimacion_total = cuaternion_estimacion_total * quater_sal

                    distas0 = distas

                    distas = 1000 * distancia_pseudoskel(pseudoskel0_1, pseudoskel_incog)

                    veces = veces + 1

                    'retoco angulillo? si sobrepaso minimo

                    If distas >= distas0 Then

                           'peligroso

                           angulo_salto = angulo_salto / 2

                           If angulo_salto >= salto_incremental Then GoTo otor_angulo

                           Exit While

                    End If

             End While

 

             Dim dif_cuater = cuaternion_estimacion_total - cuaternion_incognita

             dif_cuater.ToString()

             'If informa = 1 Then presenta_cuaternion(cuaternion_estimacion_total)

             adosa_texto("Res:" + cuaternion_incognita.ToString() + cuaternion_estimacion_total.ToString())

             Call informar(matriz_ventana.TextBox10.Text)

             Return distas

       End Function

  

 
____________________________________________________________________________________________
 
 
Nos preguntábamos ¿qué nos queda? 
 
1. Esqueletos completos
2, Variar la distancia, es decir su tipo. (incluso distancias entre cuaterniones y matrices)
3. Añadir orígenes diferentes a cada imagen (translación diferente para cada uno, situación que se presenta con dos cámaras.
4. Operar con dos cámaras reales, diferentes y simultáneas.
5. Promediar los operadores estimados sobre varios esqueletos (¿1 segundo, 30 imágenes?).
 
 

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