class_docstr: Class that represents a Pinhole Camera model.
  
  Args:
      intrinsics: tensor with shape :math:`(B, 4, 4)`
        containing the full 4x4 camera calibration matrix.
      extrinsics: tensor with shape :math:`(B, 4, 4)`
        containing the full 4x4 rotation-translation matrix.
      height: tensor with shape :math:`(B)` containing the image height.
      width: tensor with shape :math:`(B)` containing the image width.
  
  .. note::
      We assume that the class attributes are in batch form in order to take
      advantage of PyTorch parallelism to boost computing performance.
class_docstr_tok: ["Class","that","represents","a","Pinhole","Camera","model",".","Args",":","intrinsics",":","tensor","with","shape",":","math",":","`","(","B",",","4",",","4",")","`","containing","the","full","4x4","camera","calibration","matrix",".","extrinsics",":","tensor","with","shape",":","math",":","`","(","B",",","4",",","4",")","`","containing","the","full","4x4","rotation-translation","matrix",".","height",":","tensor","with","shape",":","math",":","`","(","B",")","`","containing","the","image","height",".","width",":","tensor","with","shape",":","math",":","`","(","B",")","`","containing","the","image","width",".","..","note",":",":","We","assume","that","the","class","attributes","are","in","batch","form","in","order","to","take","advantage","of","PyTorch","parallelism","to","boost","computing","performance","."]
docstr: Project a 3d point in world coordinates onto the 2d camera plane.
  
  Args:
      point3d: tensor containing the 3d points to be projected
          to the camera plane. The shape of the tensor can be :math:`(*, 3)`.
  
  Returns:
      tensor of (u, v) cam coordinates with shape :math:`(*, 2)`.
  
  Example:
      >>> _ = torch.manual_seed(0)
      >>> X = torch.rand(1, 3)
      >>> K = torch.eye(4)[None]
      >>> E = torch.eye(4)[None]
      >>> h = torch.ones(1)
      >>> w = torch.ones(1)
      >>> pinhole = kornia.geometry.camera.PinholeCamera(K, E, h, w)
      >>> pinhole.project(X)
      tensor([[5.6088, 8.6827]])
docstr_tok: ["Project","a","3d","point","in","world","coordinates","onto","the","2d","camera","plane",".","Args",":","point3d",":","tensor","containing","the","3d","points","to","be","projected","to","the","camera","plane",".","The","shape","of","the","tensor","can","be",":","math",":","`","(","*",",","3",")","`",".","Returns",":","tensor","of","(","u",",","v",")","cam","coordinates","with","shape",":","math",":","`","(","*",",","2",")","`",".","Example",":",">",">",">","_","=","torch.manual_seed","(","0",")",">",">",">","X","=","torch.rand","(","1",",","3",")",">",">",">","K","=","torch.eye","(","4",")","[","None","]",">",">",">","E","=","torch.eye","(","4",")","[","None","]",">",">",">","h","=","torch.ones","(","1",")",">",">",">","w","=","torch.ones","(","1",")",">",">",">","pinhole","=","kornia.geometry.camera.PinholeCamera","(","K",",","E",",","h",",","w",")",">",">",">","pinhole.project","(","X",")","tensor","(","[","[","5.6088",",","8.6827","]","]",")"]
code: def project(self, point_3d: Tensor) -> Tensor:
      r"""Project a 3d point in world coordinates onto the 2d camera plane.
  
      Args:
          point3d: tensor containing the 3d points to be projected
              to the camera plane. The shape of the tensor can be :math:`(*, 3)`.
  
      Returns:
          tensor of (u, v) cam coordinates with shape :math:`(*, 2)`.
  
      Example:
          >>> _ = torch.manual_seed(0)
          >>> X = torch.rand(1, 3)
          >>> K = torch.eye(4)[None]
          >>> E = torch.eye(4)[None]
          >>> h = torch.ones(1)
          >>> w = torch.ones(1)
          >>> pinhole = kornia.geometry.camera.PinholeCamera(K, E, h, w)
          >>> pinhole.project(X)
          tensor([[5.6088, 8.6827]])
      """
      P = self.intrinsics @ self.extrinsics
      return convert_points_from_homogeneous(
          transform_points(P, point_3d)
      )
  
imports: from typing import Iterable, List, Union
  import torch
  from kornia.core import Device, Tensor, eye, stack, zeros
  from kornia.core.check import KORNIA_CHECK_SAME_DEVICE
  from kornia.geometry.conversions import convert_points_from_homogeneous, convert_points_to_homogeneous
  from kornia.geometry.linalg import inverse_transformation, transform_points
  from kornia.utils.helpers import _torch_inverse_cast
label_desc: Use image node_id 28 for calling the PinholeCamera obj's underlying member method code with example usage: obj.project(point_3d) and returns: convert_points_from_homogeneous