open3d.t.geometry.Image

class open3d.t.geometry.Image

The Image class stores image with customizable rols, cols, channels, dtype and device.

__init__(*args, **kwargs)

Overloaded function.

  1. __init__(self: open3d.cpu.pybind.t.geometry.Image, rows: int = 0, cols: int = 0, channels: int = 1, dtype: open3d.cpu.pybind.core.Dtype = Float32, device: open3d.cpu.pybind.core.Device = CPU:0) -> None

Row-major storage is used, similar to OpenCV. Use (row, col, channel) indexing order for image creation and accessing. In general, (r, c, ch) are the preferred variable names for consistency, and avoid using width, height, u, v, x, y for coordinates.

  1. __init__(self: open3d.cpu.pybind.t.geometry.Image, tensor: open3d.cpu.pybind.core.Tensor) -> None

Construct from a tensor. The tensor won’t be copied and memory will be shared.

  1. __init__(self: open3d.cpu.pybind.t.geometry.Image, arg0: open3d.cpu.pybind.t.geometry.Image) -> None

Copy constructor

as_tensor(self: open3d.cpu.pybind.t.geometry.Image) → open3d.cpu.pybind.core.Tensor
clear(self)

Clear stored data.

Returns

open3d.t.geometry.Image

clip_transform(self: open3d.cpu.pybind.t.geometry.Image, scale: float, min_value: float, max_value: float, clip_fill: float = 0.0) → open3d.cpu.pybind.t.geometry.Image

Preprocess a image of shape (rows, cols, channels=1), typically used for a depth image. UInt16 and Float32 Dtypes supported. Each pixel will be transformed by x = x / scale x = x < min_value ? clip_fill : x x = x > max_value ? clip_fill : x Use INF, NAN or 0.0 (default) for clip_fill

clone(self: open3d.cpu.pybind.t.geometry.Image) → open3d.cpu.pybind.t.geometry.Image

Returns a copy of the Image on the same device.

colorize_depth(self: open3d.cpu.pybind.t.geometry.Image, scale: float, min_value: float, max_value: float) → open3d.cpu.pybind.t.geometry.Image

Colorize an input depth image (with Dtype UInt16 or Float32). The image values are divided by scale, then clamped within (min_value, max_value) and finally converted to a 3 channel UInt8 RGB image using the Turbo colormap as a lookup table.

cpu(self: open3d.cpu.pybind.t.geometry.Image) → open3d.cpu.pybind.t.geometry.Image

Transfer the image to CPU. If the image is already on CPU, no copy will be performed.

create_normal_map(self: open3d.cpu.pybind.t.geometry.Image, invalid_fill: float = 0.0) → open3d.cpu.pybind.t.geometry.Image

Create a normal map of shape (rows, cols, channels=3) in Float32 from a vertex map of shape (rows, cols, channels=1) in Float32 using cross product of V(r, c+1)-V(r, c) and V(r+1, c)-V(r, c). The input vertex map is expected to be the output of create_vertex_map. You may need to start with a filtered depth image (e.g. with filter_bilateral) to obtain good results.

create_vertex_map(self: open3d.cpu.pybind.t.geometry.Image, intrinsics: open3d.cpu.pybind.core.Tensor, invalid_fill: float = 0.0) → open3d.cpu.pybind.t.geometry.Image

Create a vertex map of shape (rows, cols, channels=3) in Float32 from an image of shape (rows, cols, channels=1) in Float32 using unprojection. The input depth is expected to be the output of clip_transform.

cuda(self: open3d.cpu.pybind.t.geometry.Image, device_id: int = 0) → open3d.cpu.pybind.t.geometry.Image

Transfer the image to a CUDA device. If the image is already on the specified CUDA device, no copy will be performed.

dilate(self: open3d.cpu.pybind.t.geometry.Image, kernel_size: int = 3) → open3d.cpu.pybind.t.geometry.Image

Return a new image after performing morphological dilation. Supported datatypes are UInt8, UInt16 and Float32 with {1, 3, 4} channels. An 8-connected neighborhood is used to create the dilation mask.

filter(self: open3d.cpu.pybind.t.geometry.Image, kernel: open3d.cpu.pybind.core.Tensor) → open3d.cpu.pybind.t.geometry.Image

Return a new image after filtering with the given kernel.

filter_bilateral(self: open3d.cpu.pybind.t.geometry.Image, kernel_size: int = 3, value_sigma: float = 20.0, dist_sigma: float = 10.0) → open3d.cpu.pybind.t.geometry.Image

Return a new image after bilateral filtering.Note: CPU (IPP) and CUDA (NPP) versions are inconsistent: CPU uses a round kernel (radius = floor(kernel_size / 2)), while CUDA uses a square kernel (width = kernel_size). Make sure to tune parameters accordingly.

filter_gaussian(self: open3d.cpu.pybind.t.geometry.Image, kernel_size: int = 3, sigma: float = 1.0) → open3d.cpu.pybind.t.geometry.Image

Return a new image after Gaussian filtering. Possible kernel_size: odd numbers >= 3 are supported.

filter_sobel(self: open3d.cpu.pybind.t.geometry.Image, kernel_size: int = 3) → Tuple[open3d.cpu.pybind.t.geometry.Image, open3d.cpu.pybind.t.geometry.Image]

Return a pair of new gradient images (dx, dy) after Sobel filtering. Possible kernel_size: 3 and 5.

static from_legacy(image_legacy: open3d.cpu.pybind.geometry.Image, device: open3d.cpu.pybind.core.Device = CPU:0) → open3d.cpu.pybind.t.geometry.Image

Create a Image from a legacy Open3D Image.

get_max_bound(self)

Compute max 2D coordinates for the data ({rows, cols}).

Returns

open3d.core.Tensor

get_min_bound(self)

Compute min 2D coordinates for the data (always {0, 0}).

Returns

open3d.core.Tensor

is_empty(self)

Is any data stored?

Returns

bool

linear_transform(self, scale=1.0, offset=0.0)

Function to linearly transform pixel intensities in place: image = scale * image + offset.

Parameters
  • scale (float, optional, default=1.0) – First multiply image pixel values with this factor. This should be positive for unsigned dtypes.

  • offset (float, optional, default=0.0) – Then add this factor to all image pixel values.

Returns

open3d.t.geometry.Image

pyrdown(self: open3d.cpu.pybind.t.geometry.Image) → open3d.cpu.pybind.t.geometry.Image

Return a new downsampled image with pyramid downsampling formed by a chained Gaussian filter (kernel_size = 5, sigma = 1.0) and a resize (ratio = 0.5) operation.

resize(self: open3d.cpu.pybind.t.geometry.Image, sampling_rate: float = 0.5, interp_type: open3d.cpu.pybind.t.geometry.InterpType = <InterpType.Nearest: 0>) → open3d.cpu.pybind.t.geometry.Image

Return a new image after resizing with specified interpolation type. Downsample if sampling rate is < 1. Upsample if sampling rate > 1. Aspect ratio is always kept.

rgb_to_gray(self: open3d.cpu.pybind.t.geometry.Image) → open3d.cpu.pybind.t.geometry.Image

Converts a 3-channel RGB image to a new 1-channel Grayscale image by I = 0.299 * R + 0.587 * G + 0.114 * B.

to(*args, **kwargs)

Overloaded function.

  1. to(self, device, copy=False)

    Transfer the Image to a specified device. A new image is always created if copy is true, else it is avoided when the original image is already on the target device.

Parameters
  • device (open3d.core.Device) –

  • copy (bool, optional, default=False) – If true, a new tensor is always created; if false, the copy is avoided when the original tensor already has the targeted dtype.

Returns

open3d.t.geometry.Image

  1. to(self, dtype, scale=None, offset=0.0, copy=False)

    Returns an Image with the specified Dtype.

Parameters
  • dtype (open3d.core.Dtype) – The targeted dtype to convert to.

  • scale (bool, optional, default=None) – Optional scale value. This is 1./255 for UInt8 -> Float{32,64}, 1./65535 for UInt16 -> Float{32,64} and 1 otherwise

  • offset (Optional[float], optional, default=0.0) – Optional shift value. Default 0.

  • copy (float, optional, default=False) – If true, a new tensor is always created; if false, the copy is avoided when the original tensor already has the targeted dtype.

Returns

open3d.t.geometry.Image

to_legacy(self)

Convert to legacy Image type.

Returns

open3d.geometry.Image

property channels

Get the number of channels of the image.

property columns

Get the number of columns of the image.

property device

Get the device of the image.

property dtype

Get dtype of the image

property is_cpu

Returns true if the geometry is on CPU.

property is_cuda

Returns true if the geometry is on CUDA.

property rows

Get the number of rows of the image.