28 const Eigen::Matrix3d& camera1_intrinsic_inverse,
29 const Eigen::Matrix3d& camera2_intrinsic,
30 const Eigen::Matrix3d& trans_camera1_to_camera2,
31 Eigen::Vector2d* point_out) {
32 Eigen::Vector3d pt = point.homogeneous();
33 Eigen::Vector3d camera2_3d =
34 static_cast<Eigen::Matrix<double, 3, 1, 0, 3, 1>
>(
35 trans_camera1_to_camera2 * camera1_intrinsic_inverse * pt);
37 double z = camera2_3d(2);
39 *point_out = (camera2_intrinsic * camera2_3d / z).head(2);
48 const Eigen::Matrix4d& extrinsic,
49 Eigen::Vector2d* up_left,
50 Eigen::Vector2d* low_right) {
55 Eigen::Matrix3d f2t_rotation = extrinsic.topLeftCorner(3, 3);
56 Eigen::Matrix<double, 4, 2> points;
57 points << 0.0, 0.0,
static_cast<double>(f_width), 0.0,
58 static_cast<double>(f_width),
static_cast<double>(f_height), 0.0,
59 static_cast<double>(f_height);
60 Eigen::Vector2d pt_min(std::numeric_limits<double>::max(),
61 std::numeric_limits<double>::max());
62 Eigen::Vector2d pt_max(-std::numeric_limits<double>::max(),
63 -std::numeric_limits<double>::max());
64 Eigen::Matrix3d from_camera_intrinsic_inverse =
66 for (
int i = 0; i < 4; ++i) {
67 Eigen::Vector2d point_out;
69 points.block<1, 2>(i, 0), from_camera_intrinsic_inverse,
73 pt_min = pt_min.cwiseMin(point_out);
74 pt_max = pt_max.cwiseMax(point_out);
77 (*up_left) = pt_min.cwiseMax(Eigen::Vector2d(0, 0));
78 (*low_right) = pt_max.cwiseMin(Eigen::Vector2d(to_width, to_height));
79 if ((up_left->array() < low_right->array()).all()) {
bool PointCamera1ToCamera2(const Eigen::Vector2d &point, const Eigen::Matrix3d &camera1_intrinsic_inverse, const Eigen::Matrix3d &camera2_intrinsic, const Eigen::Matrix3d &trans_camera1_to_camera2, Eigen::Vector2d *point_out)