kaolin.ops.voxelgrid

API

kaolin.ops.voxelgrid.downsample(voxelgrids, scale)

Downsamples a voxelgrids, given a (down)scaling factor for each dimension.

Note

The voxelgrids output is not thresholded.

Parameters
  • voxelgrids (torch.Tensor) – voxelgrids to be downsampled, of shape \((\text{batch_size}, \text{X}, \text{Y}, \text{Z})\).

  • scale (list or tuple or int) – List or tuple of int of length 3 to scale each dimension down. or an int to scale down for every dimension.

Returns

Downsampled voxelgrids.

Return type

(torch.Tensor)

Example

>>> voxelgrids2 = torch.zeros((1, 4, 4, 4))
>>> voxelgrids2[0, 0] = 1
>>> voxelgrids2[0, 1] = 0.4
>>> voxelgrids2[0, 3] = 0.8
>>> downsample(voxelgrids2, 2)
tensor([[[[0.7000, 0.7000],
          [0.7000, 0.7000]],

         [[0.4000, 0.4000],
          [0.4000, 0.4000]]]])
kaolin.ops.voxelgrid.extract_odms(voxelgrids)

Extracts orthographic depth maps from voxelgrids.

Parameters

voxelgrids (torch.Tensor) – Binary voxelgrids of shape (N, dim, dim, dim) from which odms are extracted.

Returns

Batched ODMs of shape (N, 6, dim, dim) from the 6 primary viewing angles. The face order is z_neg, z_pos, y_neg, y_pos, x_neg, x_pos, denoting the axis and direction we are looking at.

Return type

(torch.LongTensor)

Example

>>> voxelgrids = torch.ones((2, 2, 2, 2))
>>> voxelgrids[0, :, 0, :] = 0 # Set the front face to be zeros
>>> output = extract_odms(voxelgrids)
>>> output
tensor([[[[2, 0],
          [2, 0]],

         [[2, 0],
          [2, 0]],

         [[0, 0],
          [0, 0]],

         [[1, 1],
          [1, 1]],

         [[2, 2],
          [0, 0]],

         [[2, 2],
          [0, 0]]],


        [[[0, 0],
          [0, 0]],

         [[0, 0],
          [0, 0]],

         [[0, 0],
          [0, 0]],

         [[0, 0],
          [0, 0]],

         [[0, 0],
          [0, 0]],

         [[0, 0],
          [0, 0]]]])
kaolin.ops.voxelgrid.extract_surface(voxelgrids, mode='wide')

Removes any internal structure(s) from a voxelgrids.

Parameters
  • voxelgrids (torch.Tensor) – Binary voxelgrids of shape (N, X, Y ,Z) from which to extract surface

  • mode (str) – Either “wide” or “thin”. Each voxel can be seen as a cube in a grid. “wide” mode keeps each filled voxel with at least one vertex in contact with an empty voxel. “thin” mode keeps each filled voxel with at least one face in contact with an empty voxel.

Returns

binary surface voxelgrids tensor

Return type

torch.BoolTensor

Example

>>> voxelgrids = torch.ones((1, 3, 3, 3))
>>> output = extract_surface(voxelgrids)
>>> output[0]
tensor([[[ True,  True,  True],
         [ True,  True,  True],
         [ True,  True,  True]],

        [[ True,  True,  True],
         [ True, False,  True],
         [ True,  True,  True]],

        [[ True,  True,  True],
         [ True,  True,  True],
         [ True,  True,  True]]])
kaolin.ops.voxelgrid.fill(voxelgrids)

Fills the internal structures in a voxelgrids grid. Used to fill holes and ‘solidify’ objects.

Note

This function is not differentiable.

Parameters

voxelgrids (torch.Tensor) – binary voxelgrids of size (N, X, Y, Z) to be filled.

Returns

filled, binary voxelgrids array

Return type

torch.BoolTensor

Example

>>> voxelgrids = torch.Tensor(
...              [[[[0., 0., 0., 0., 0.],
...                 [0., 1., 1., 1., 1.],
...                 [0., 1., 1., 1., 1.],
...                 [0., 1., 1., 1., 1.]],
...                [[0., 0., 0., 0., 0.],
...                 [0., 1., 1., 1., 1.],
...                 [0., 1., 0., 0., 1.],
...                 [0., 1., 1., 1., 1.]],
...                [[0., 0., 0., 0., 0.],
...                 [0., 1., 1., 1., 1.],
...                 [0., 1., 1., 1., 1.],
...                 [0., 1., 1., 1., 1.]]]])
>>> fill(voxelgrids)
tensor([[[[False, False, False, False, False],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True]],

         [[False, False, False, False, False],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True]],

         [[False, False, False, False, False],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True]]]])
kaolin.ops.voxelgrid.project_odms(odms, voxelgrids=None, votes=1)

Projects orthographic depth map onto voxelgrids.

Note

If no voxelgrids is provided, we project onto a completely filled grids.

Parameters
  • odms (torch.Tensor) – Batched ODMs of shape (N, 6, dim, dim) from the 6 primary viewing angles. The face order is z_neg, z_pos, y_neg, y_pos, x_neg, x_pos, denoting the axis and direction we are looking at.

  • voxelgrids (torch.Tensor) – Binary voxelgrids onto which ODMs are projected.

  • votes (int) – int from range(0, 7). Votes needed to substract a voxel to 0.

Returns

Updated binary voxel grid.

Return type

(torch.BoolTensor)

Example

>>> odms = torch.zeros((1, 6, 2, 2))  # empty odms
>>> odms[0, 1, 1, 1] = 2  # Change z_pos surface
>>> project_odms(odms)
tensor([[[[ True,  True],
          [ True,  True]],

         [[ True,  True],
          [False, False]]]])
>>> project_odms(odms, votes=2)
tensor([[[[True, True],
          [True, True]],

         [[True, True],
          [True, True]]]])