Esempio n. 1
0
Point2d Camera::worldToPixel(const Point3d& world) const
{
	// all code based on OpenCV cvProjectPoints2 function
	double X, Y, Z, x, y, z;
    double r2, r4, r6, a1, a2, a3, cdist;
    double xd, yd, fx, fy, cx , cy;

	// world frame
	X = world.x;
	Y = world.y;
	Z = 0;

	// camera frame
    x = _R(0, 0)*X + _R(0, 1)*Y + _R(0, 2)*Z + _t(0, 0);
    y = _R(1, 0)*X + _R(1, 1)*Y + _R(1, 2)*Z + _t(1, 0);
    z = _R(2, 0)*X + _R(2, 1)*Y + _R(2, 2)*Z + _t(2, 0);

	// image frame
    z = z ? 1./z : 1;
    x *= z; 
	y *= z;

	fx = _A(0, 0);
	fy = _A(1, 1);
    cx = _A(0, 2);
	cy = _A(1, 2);

    r2 = x*x + y*y;
    r4 = r2*r2;
    r6 = r4*r2;
    a1 = 2*x*y;
    a2 = r2 + 2*x*x;
    a3 = r2 + 2*y*y;
    cdist = 1 + _k(0, 0)*r2 + _k(1, 0)*r4 + _k(4, 0)*r6;
    xd = x*cdist + _k(2, 0)*a1 + _k(3, 0)*a2;
    yd = y*cdist + _k(2, 0)*a3 + _k(3, 0)*a1;

	return Point2d(xd*fx + cx, yd*fy + cy);
}