mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 03:42:50 +08:00
Make transform_points_screen's with_xyflip configurable
Summary: We'll need non-flipped screen coords in splatter. Reviewed By: bottler Differential Revision: D36337027 fbshipit-source-id: 897f88e8854bab215d2d0e502b25d15526ee86f1
This commit is contained in:
parent
61e2b87019
commit
4372001981
@ -323,7 +323,7 @@ class CamerasBase(TensorProperties):
|
||||
return world_to_ndc_transform.transform_points(points, eps=eps)
|
||||
|
||||
def transform_points_screen(
|
||||
self, points, eps: Optional[float] = None, **kwargs
|
||||
self, points, eps: Optional[float] = None, with_xyflip: bool = True, **kwargs
|
||||
) -> torch.Tensor:
|
||||
"""
|
||||
Transforms points from PyTorch3D world/camera space to screen space.
|
||||
@ -341,6 +341,11 @@ class CamerasBase(TensorProperties):
|
||||
stabilizes gradients since it leads to avoiding division
|
||||
by excessively low numbers for points close to the
|
||||
camera plane.
|
||||
with_xyflip: If True, flip x and y directions. In world/camera/ndc coords,
|
||||
+x points to the left and +y up. If with_xyflip is true, in screen
|
||||
coords +x points right, and +y down, following the usual RGB image
|
||||
convention. Warning: do not set to False unless you know what you're
|
||||
doing!
|
||||
|
||||
Returns
|
||||
new_points: transformed points with the same shape as the input.
|
||||
@ -348,7 +353,7 @@ class CamerasBase(TensorProperties):
|
||||
points_ndc = self.transform_points_ndc(points, eps=eps, **kwargs)
|
||||
image_size = kwargs.get("image_size", self.get_image_size())
|
||||
return get_ndc_to_screen_transform(
|
||||
self, with_xyflip=True, image_size=image_size
|
||||
self, with_xyflip=with_xyflip, image_size=image_size
|
||||
).transform_points(points_ndc, eps=eps)
|
||||
|
||||
def clone(self):
|
||||
|
@ -204,6 +204,9 @@ class TestPixels(TestCaseMixin, unittest.TestCase):
|
||||
for cameras in (data.camera_ndc, data.camera_screen):
|
||||
ndc_points = cameras.transform_points_ndc(points)
|
||||
screen_points = cameras.transform_points_screen(points)
|
||||
screen_points_without_xyflip = cameras.transform_points_screen(
|
||||
points, with_xyflip=False
|
||||
)
|
||||
camera_points = cameras.transform_points(points)
|
||||
for batch_idx in range(2):
|
||||
# NDC space agrees with the original
|
||||
@ -214,6 +217,13 @@ class TestPixels(TestCaseMixin, unittest.TestCase):
|
||||
torch.tensor([data.x + 0.5, data.y + 0.5, 1.0]),
|
||||
atol=1e-5,
|
||||
)
|
||||
# Screen coords without xyflip should have x, y that negate the non-
|
||||
# flipped values, and unchanged z.
|
||||
self.assertClose(
|
||||
screen_points_without_xyflip[batch_idx][0],
|
||||
torch.tensor([-(data.x + 0.5), -(data.y + 0.5), 1.0]),
|
||||
atol=1e-5,
|
||||
)
|
||||
# Second point in screen space is the center of the screen
|
||||
self.assertClose(
|
||||
screen_points[batch_idx][1],
|
||||
|
Loading…
x
Reference in New Issue
Block a user