mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-12-14 19:36:23 +08:00
screen cameras lose -1
Summary: All the renderers in PyTorch3D (pointclouds including pulsar, meshes, raysampling) use align_corners=False style. NDC space goes between the edges of the outer pixels. For a non square image with W>H, the vertical NDC space goes from -1 to 1 and the horizontal from -W/H to W/H. However it was recently pointed out that functionality which deals with screen space inside the camera classes is inconsistent with this. It unintentionally uses align_corners=True. This fixes that. This would change behaviour of the following: - If you create a camera in screen coordinates, i.e. setting in_ndc=False, then anything you do with the camera which touches NDC space may be affected, including trying to use renderers. The transform_points_screen function will not be affected... - If you call the function “transform_points_screen” on a camera defined in NDC space results will be different. I have illustrated in the diff how to get the old results from the new results but this probably isn’t the right long-term solution.. Reviewed By: gkioxari Differential Revision: D32536305 fbshipit-source-id: 377325a9137282971dcb7ca11a6cba3fc700c9ce
This commit is contained in:
committed by
Facebook GitHub Bot
parent
cff4876131
commit
bf3bc6f8e3
@@ -16,10 +16,11 @@ This is the system that has its origin on the image plane and the `Z`-axis perpe
|
||||
This is the normalized coordinate system that confines in a volume the rendered part of the object/scene. Also known as view volume. For square images, under the PyTorch3D convention, `(+1, +1, znear)` is the top left near corner, and `(-1, -1, zfar)` is the bottom right far corner of the volume. For non-square images, the side of the volume in `XY` with the smallest length ranges from `[-1, 1]` while the larger side from `[-s, s]`, where `s` is the aspect ratio and `s > 1` (larger divided by smaller side).
|
||||
The transformation from view to NDC happens after applying the camera projection matrix (`P`).
|
||||
* **Screen coordinate system**
|
||||
This is another representation of the view volume with the `XY` coordinates defined in pixel space instead of a normalized space.
|
||||
This is another representation of the view volume with the `XY` coordinates defined in pixel space instead of a normalized space. (0,0) is the top left corner of the top left pixel
|
||||
and (W,H) is the bottom right corner of the bottom right pixel.
|
||||
|
||||
An illustration of the 4 coordinate systems is shown below
|
||||

|
||||

|
||||
|
||||
## Defining Cameras in PyTorch3D
|
||||
|
||||
@@ -83,8 +84,8 @@ cameras_ndc = PerspectiveCameras(focal_length=fcl_ndc, principal_point=prp_ndc)
|
||||
|
||||
# Screen space camera
|
||||
image_size = ((128, 256),) # (h, w)
|
||||
fcl_screen = (76.2,) # fcl_ndc * (min(image_size) - 1) / 2
|
||||
prp_screen = ((114.8, 31.75), ) # (w - 1) / 2 - px_ndc * (min(image_size) - 1) / 2, (h - 1) / 2 - py_ndc * (min(image_size) - 1) / 2
|
||||
fcl_screen = (76.8,) # fcl_ndc * min(image_size) / 2
|
||||
prp_screen = ((115.2, 48), ) # w / 2 - px_ndc * min(image_size) / 2, h / 2 - py_ndc * min(image_size) / 2
|
||||
cameras_screen = PerspectiveCameras(focal_length=fcl_screen, principal_point=prp_screen, in_ndc=False, image_size=image_size)
|
||||
```
|
||||
|
||||
@@ -92,9 +93,9 @@ The relationship between screen and NDC specifications of a camera's `focal_leng
|
||||
The transformation of x and y coordinates between screen and NDC is exactly the same as for px and py.
|
||||
|
||||
```
|
||||
fx_ndc = fx_screen * 2.0 / (s - 1)
|
||||
fy_ndc = fy_screen * 2.0 / (s - 1)
|
||||
fx_ndc = fx_screen * 2.0 / s
|
||||
fy_ndc = fy_screen * 2.0 / s
|
||||
|
||||
px_ndc = - (px_screen - (image_width - 1) / 2.0) * 2.0 / (s - 1)
|
||||
py_ndc = - (py_screen - (image_height - 1) / 2.0) * 2.0 / (s - 1)
|
||||
px_ndc = - (px_screen - image_width / 2.0) * 2.0 / s
|
||||
py_ndc = - (py_screen - image_height / 2.0) * 2.0 / s
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user