Downsample

Tip

Our webinar Getting your point cloud ready for your application partly covers Downsample.

Introduction

This article introduces a concept of downsampling, explains why it is valuable and demonstrates how to downsample a Zivid point cloud.

Zivid cameras use a sensor with 2.3 MP (1920 x 1200 for Zivid One+ and 1944 x 1200 for Zivid Two) to capture point clouds of a scene. The point cloud consists of XYZ (3D), RGB (color), and SNR data. The generated point cloud consists of 2.3 million points.

Some applications do not require high-density point cloud data, for example, box detection by fitting a plane to the box surface. In addition, this amount of data is often too large for machine vision algorithms to process with the speed required by the application. It is such applications where point cloud downsampling comes into play.

Downsampling in point cloud context is the reduction in spatial resolution while keeping the same 3D representation. It is typically used to transform the data to a more manageable size and thus reduce the storage and processing requirements.

Problem

The size or resolution (density) of the point cloud is too large.

Solution

Downsample the Zivid point cloud to reduce its size and resolution.

Downsample API

Downsampling can be done in-place, which modifies the current point cloud.

Go to source

source

pointCloud.downsample(Zivid::PointCloud::Downsampling::by2x2);
Go to source

source

pointCloud.Downsample(Zivid.NET.PointCloud.Downsampling.By2x2);
Go to source

source

point_cloud.downsample(zivid.PointCloud.Downsampling.by2x2)

It is also possible to get the downsampled point cloud as a new point cloud instance, which does not alter the existing point cloud.

Go to source

source

auto downsampledPointCloud = pointCloud.downsampled(Zivid::PointCloud::Downsampling::by2x2);
Go to source

source

var downsampledPointCloud = pointCloud.Downsampled(Zivid.NET.PointCloud.Downsampling.By2x2);
Go to source

source

downsampled_point_cloud = point_cloud.downsampled(zivid.PointCloud.Downsampling.by2x2)

Zivid SDK supports the following downsampling rates: by2x2, by3x3, and by4x4, with the possibility to perform downsampling multiple times.

Note

Downsample API in Zivid SDK is fast because it is done on the GPU, in parallel, while the point cloud data is still on the GPU memory. Downsample implementations with third-party libraries are likely more time-consuming: CPU computations are much slower in general, and GPU computations require another copy. See Point Cloud Capture Process for more info.

If you are interested in the implementation, check out our downsampling code samples in C++, C#, Python, and MATLAB.

Tip

  • Use Downsample API in combination with transform and normals APIs for performance reasons because GPU performs all these computations while the point cloud data is still on the GPU memory.

  • For the fastest implementation, first, downsample the point cloud, then transform it.

To downsample a point cloud, you can run our code sample.

Sample: downsample.py

python /path/to/downsample.py --zdf-path /path/to/file.zdf

To learn more about how downsampling can be done and why it is not trivial, check out our reference article Downsampling Theory.

Version History

SDK

Changes

2.1.0

Downsampling API is added.