[Jderobot] ¿Bug en progeo?

Roberto Calvo rocapal en gsyc.urjc.es
Vie Sep 6 13:59:44 CEST 2013


El vie, 06-09-2013 a las 13:51 +0200, Eduardo Perdices escribió:
> Hola,
> 
> yo lo tenía implementado en mi código con la versión antigua, habría que 
> adaptarlo:

Genial. Me encargo yo de meterlo en la nueva versión.

> 
> void
> Kinematics::pixel2Optical(TPinHoleCamera * camera, HPoint2D * p)
> {
>      float aux;
>      int height;
> 
>      height = camera->rows;
> 
>      aux = p->x;
>      p->x = height-1-p->y;
>      p->y = aux;
> }
> 
> void
> Kinematics::optical2Pixel(TPinHoleCamera * camera, HPoint2D * p)
> {
>      float aux;
>      int height;
> 
>      height = camera->rows;
> 
>      aux = p->y;
>      p->y = height-1-p->x;
>      p->x = aux;
> }
> 
> Saludos.
> 
> El 06/09/13 13:42, Roberto Calvo escribió:
> > Genial Edu, era justo eso :-)
> >
> > He estado mirando y veo que no hay nada de graphic2optical y viceversa
> > en las librerías, asi que lo voy a meter dentro de Progeo.
> >
> > Gracias por la explicación!
> >
> > El jue, 05-09-2013 a las 20:30 +0200, Eduardo Perdices escribió:
> >> Hola,
> >>
> >> si miras los cálculos que se hacen en el project son estos:
> >>
> >>      a = RT*in;
> >>      out = K*a.head(3);
> >>      out(0) = out(0)/out(2);
> >>      out(1) = out(1)/out(2);
> >>      out(2) = 1.0;
> >>
> >> En tu caso "a" valdría (0,0,800) y out saldría (159.5*800, 119.5*800,
> >> 800), que al dividir por 800 te saldría el número bien.
> >>
> >> Después como tenemos lo de pasar de coordinadas ópticas a coordenadas
> >> gráficas se hace esto:
> >>
> >>      double aux = out(0);
> >>      out(0) = out(1);
> >>      out(1) = this->rows-1-aux;
> >>
> >> Y aquí out valdría (119.5, rows  - 1 - 159.5), si en tu caso tienes el
> >> 240, te sale el resultado que has puesto. La cosa es que después de
> >> hacer un project tienes que hacer la operación inversa, pasar de nuevo
> >> de coordenadas gráficas a coordenadas ópticas y de nuevo te saldrá el
> >> (159.9, 119.5).
> >>
> >> Al hacer un backproject es lo contrario, primero hacer el cambio de
> >> coordenadas y luego llamas a backproject. Esto se hace así porque en
> >> progeo los valores en 2D que se toman como entrada y salida tienen
> >> como sistema de coordenadas el sistema x-y típico de las gráficas,
> >> algo así:
> >>
> >> /\
> >> |
> >> | X
> >> |     Y
> >> ----------->
> >>
> >> y no el sistema que se utiliza en la mayoría de imágenes que es así:
> >>
> >>       X
> >> ------------->
> >> |
> >> |
> >> |  Y
> >> |
> >> \/
> >>
> >> Yo particularmente creo que habría que trabajar directamente con
> >> coordenadas ópticas, puesto que es lo que se hace en la mayoría de los
> >> sitios, pero ahora mismo Progeo funciona como digo. Viene esto mejor
> >> explicado aquí:
> >>
> >> http://jderobot.org/Manual-4.3#Progeo_Library
> >>
> >> Saludos.
> >>
> >> El 05/09/13 19:21, Roberto Calvo escribió:
> >>
> >>> Hola,
> >>>
> >>> Os quiero comentar un comportamiento que me estoy encontrando con
> >>> Progeo, a ver si a alguno más os ha pasado o es un bug de la librería.
> >>>
> >>> Parto de la siguiente configuración de la cámara de Progeo:
> >>>
> >>> Camera:
> >>>
> >>>       Position: (X,Y,Z,H)=(0,0,0,0,0,0,0,0)
> >>>       Focus of Attention: (x,y,z,h)=(0,0,0,0,0,0,0,0)
> >>>
> >>>       Focus DistanceX(vertical): 272,2 mm
> >>>       Focus DistanceY(horizontal): 272,2 mm
> >>>       Skew: 65,75091
> >>>       Optical Center: (x,y)=(159,5 , 119,5)
> >>>
> >>> K Matrix:
> >>> 272.171       0   159.5
> >>>        0 272.171   119.5
> >>>        0       0       1
> >>>
> >>> R&T Matrix:
> >>> 1 0 0 0
> >>> 0 1 0 0
> >>> 0 0 1 0
> >>> 0 0 0 1
> >>>
> >>>
> >>> Hasta aquí parece estar todo bien. También funciona bien el hecho de
> >>> usar cualquier pixel, pasar a punto 3D y ese mismo punto 3D o cualquiera
> >>> de su recta hacer al project y que vuelta a dar el mismo pixel.
> >>>
> >>> El caso es que estoy teniendo problemas con el centro óptico.
> >>> Teóricamente cualquier punto 3D que sea del estilo (0, 0, Z) debería
> >>> hacer el project al centro óptico que se corresponde con el centro de la
> >>> imágen. El centro óptico es (159.5,119.5).
> >>>
> >>> Sin embargo al hacer el project del punto 3D (0,0,800) me devuelve el
> >>> píxel (119.5, 79.5). No sé si se me está escapando algo, o es fruto de
> >>> algún bug o problema de memoria.
> >>>
> >>> ¿Alguien más está trabajando con la librería de Progeo nueva?
> >>>
> >>>
> >> _______________________________________________
> >> Jde-developers mailing list
> >> Jde-developers en gsyc.es
> >> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> 

-- 
Roberto Calvo Palomino        | Robotics Lab (GSyC) 
R&D Android Mobile Engineer   | Universidad Rey Juan Carlos

Twitter: @rocapal 
Linkedin: http://www.linkedin.com/in/rocapal



More information about the Jde-developers mailing list