Spaces:
Running
on
Zero
Running
on
Zero
File size: 952 Bytes
1ea89dd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import torch
def coords_grid(b, h, w, homogeneous=False, device=None, noisy=False):
pixel_coords_x = torch.linspace(0.5, w - 0.5, w, device=device)
pixel_coords_y = torch.linspace(0.5, h - 0.5, h, device=device)
if noisy: # \pm 0.5px noise
pixel_coords_x += torch.rand_like(pixel_coords_x) - 0.5
pixel_coords_y += torch.rand_like(pixel_coords_y) - 0.5
stacks = [pixel_coords_x.repeat(h, 1), pixel_coords_y.repeat(w, 1).t()]
if homogeneous:
ones = torch.ones_like(stacks[0]) # [H, W]
stacks.append(ones)
grid = torch.stack(stacks, dim=0).float() # [2, H, W] or [3, H, W]
grid = grid[None].repeat(b, 1, 1, 1) # [B, 2, H, W] or [B, 3, H, W]
if device is not None:
grid = grid.to(device)
return grid
def normalize_coords(coords, h, w):
c = torch.tensor([(w - 1) / 2.0, (h - 1) / 2.0], device=coords.device).view(
1, 2, 1, 1
)
return (coords - c) / c
|