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, copy=False, scale=None, offset=0.0)

    Returns an Image with the specified Dtype.

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

  • 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.

  • scale (Optional[float], 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 (float, optional, default=0.0) – Optional shift value. Default 0.

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.