[Jderobot] ¿Bug en progeo?

Roberto Calvo rocapal en gsyc.urjc.es
Lun Sep 9 14:11:57 CEST 2013


El vie, 06-09-2013 a las 13:59 +0200, Roberto Calvo escribió:
> 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.

Listo. Están añadidas dentro de Progeo:

  void pixel2optical (Eigen::Vector3d &point);
  void optical2pixel (Eigen::Vector3d &point);

> 
> > 
> > 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