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 of shape (N, X, Y, Z) to be downsampled
  • 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]],
<BLANKLINE>
         [[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]],
<BLANKLINE>
         [[2, 0],
          [2, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]],
<BLANKLINE>
         [[1, 1],
          [1, 1]],
<BLANKLINE>
         [[2, 2],
          [0, 0]],
<BLANKLINE>
         [[2, 2],
          [0, 0]]],
<BLANKLINE>
<BLANKLINE>
        [[[0, 0],
          [0, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]],
<BLANKLINE>
         [[0, 0],
          [0, 0]]]])
kaolin.ops.voxelgrid.extract_surface(voxelgrids)

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
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]],
<BLANKLINE>
        [[ True,  True,  True],
         [ True, False,  True],
         [ True,  True,  True]],
<BLANKLINE>
        [[ 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]],
<BLANKLINE>
         [[False, False, False, False, False],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True],
          [False,  True,  True,  True,  True]],
<BLANKLINE>
         [[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]],
<BLANKLINE>
         [[ True,  True],
          [False, False]]]])
>>> project_odms(odms, votes=2)
tensor([[[[True, True],
          [True, True]],
<BLANKLINE>
         [[True, True],
          [True, True]]]])