A Dataset for Event-Based Scene Flow Estimation with Independent Moving Objects

PAPER GITHUB DOWNLOAD

ABSTRACT

Scene flow represents the 3D cartesian motion of points in the world and can be used for applications such as: navigation in dynamic environments, human-robot interaction or non-rigid motion analysis, among others. Despite the potential benefits of event cameras for motion estimation tasks due to their high temporal resolution and low-latency, not many works have yet addressed their use for scene flow estimation. Progress may be limited by the unconventional data adding complexity to established processing pipelines, but also due to the lack of event camera datasets with scene flow ground truth. With the aim of filling this gap, we present E-MOTION: a large and versatile dataset recorded with high-resolution event cameras suitable for depth, optical flow and scene flow estimation. Moreover, it features a number of independent moving objects for which ground truth poses and segmentation masks are also available. We release a total of 43 sequences with dense ground truth maps and poses at 200 Hz.

CITATION

@inproceedings{rodriguez2026emotion,
 title={E-MOTION: A Dataset for Event-Based Scene Flow Estimation with Independent Moving Objects},
 author={Gutierrez Rodriguez, Ivan and Moreau, Julien and Bartolozzi, Chiara and Glover, Arren},
 booktitle={European Conference on Computer Vision},
 year={2026},
 organization={Springer}
}

LICENSE

This dataset is provided under the ODbL v1.0 license. This means that the data can be freely shared, modified, and used, provided that proper credit is given and any redistributed or publicly used modified database is kept open under the same license.

CONTACT

igrodriguez@utc.fr

Data is provided in HDF5 files. Each sequence is composed of two files: events.h5 containing the event streams of both cameras and gt.h5 containing all ground truth maps and poses. Both files contain all calibration and rectification information. Please use the menus below to explore the HDF5 groups, attributes, and datasets in each of them.

Event data is compressed using Blosc2 with the ZSTD codec.

events.h5

disparity_to_depth

float32

[4x4]

Q matrix to recover depth from disparity images (see OpenCV docs).

left

sensor_resolution

int32

[2]

Camera sensor resolution. The format is \( [h \: w] \).

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the left camera (see OpenCV docs).

dist_coeffs

float32

[4]

Distortion parameters of the left camera. We use a radial-tangential distortion model with 2 parameters for each type of distortion. The format of the vector is \( [k_1 \: k_2 \: p_1 \: p_2] \) (see OpenCV docs).

extrinsics

float32

[4x4]

Transformation matrix \({}^LT_R\) from left camera \(L\) to right camera \(R\). It transforms points in the \(R\) coordinate frame into the \(L\) coordinate frame.

events

duration

uint64

[1]

Sequence duration in microseconds.

num_events

uint64

[1]

Number of events recorded with the left camera.

t_offset

uint64

[1]

Time offset in microseconds that must be added to the timestamps of the events to have them in the same clock as the ground truth (similar to DSEC).

ms_to_idx

uint64

[Nms]

Mapping from milliseconds to event indices (similar to DSEC).

t

uint32

[Nev]

Timestamps of the events in microseconds.

x

uint16

[Nev]

Column indices of the events.

y

uint16

[Nev]

Row indices of the events.

p

uint8

[Nev]

Polarities of the events.

rect

R

float32

[3x3]

Rotation matrix from the rectified left camera \(R_L\) to the left camera \(L\). It transforms points in the \(L\) coordinate frame into the \(R_L\) coordinate frame.

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the rectified left camera (see OpenCV docs).

right

sensor_resolution

int32

[2]

Camera sensor resolution. The format is \( [h \: w] \).

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the right camera (see OpenCV docs).

dist_coeffs

float32

[4]

Distortion parameters of the right camera. We use a radial-tangential distortion model with 2 parameters for each type of distortion. The format of the vector is \( [k_1 \: k_2 \: p_1 \: p_2] \) (see OpenCV docs).

extrinsics

float32

[4x4]

Transformation matrix \({}^RT_L\) from right camera \(R\) to left camera \(L\). It transforms points in the \(L\) coordinate frame into the \(R\) coordinate frame.

events

duration

uint64

[1]

Sequence duration in microseconds.

num_events

uint64

[1]

Number of events recorded with the right camera.

t_offset

uint64

[1]

Time offset in microseconds that must be added to the timestamps of the events to have them in the same clock as the ground truth (similar to DSEC).

ms_to_idx

uint64

[Nms]

Mapping from milliseconds to event indices (similar to DSEC).

t

uint32

[Nev]

Timestamps of the events in microseconds.

x

uint16

[Nev]

Column indices of the events.

y

uint16

[Nev]

Row indices of the events.

p

uint8

[Nev]

Polarities of the events.

rect

R

float32

[3x3]

Rotation matrix from the rectified right camera \(R_R\) to the right camera \(R\). It transforms points in the \(R\) coordinate frame into the \(R_R\) coordinate frame.

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the rectified right camera (see OpenCV docs).

gt.h5

disparity_to_depth

float32

[4x4]

Q matrix to recover depth from disparity images (see OpenCV docs).

num_images

int32

[1]

Number of ground truth samples in the sequence.

num_imos

int32

[1]

Number of independent moving objects in the sequence.

time_stamps

float64

[Nim]

Timestamps of the ground truth samples in the sequence in seconds.

left

sensor_resolution

int32

[2]

Camera sensor resolution. The format is \( [h \: w] \).

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the left camera (see OpenCV docs).

dist_coeffs

float32

[4]

Distortion parameters of the left camera. We use a radial-tangential distortion model with 2 parameters for each type of distortion. The format of the vector is \( [k_1 \: k_2 \: p_1 \: p_2] \) (see OpenCV docs).

extrinsics

float32

[4x4]

Transformation matrix \({}^LT_R\) from left camera \(L\) to right camera \(R\). It transforms points in the \(R\) coordinate frame into the \(L\) coordinate frame.

depth

uint16

[NimxHxW]

Ground truth depth maps for the left camera. Depth values are in cm.

optical_flow

int16

[NimxHxWx2]

Ground truth optical flow maps for the left camera. Optical flow vectors are in px/s.

scene_flow

int16

[NimxHxWx3]

Ground truth scene flow maps for the left camera. Scene flow vectors are in cm/s.

pose

float64

[Nimx7]

Pose of the left camera. Format: \([x \: y \: z \: q_w \: q_x \: q_y \: q_z]\).

rect

R

float32

[3x3]

Rotation matrix from the rectified left camera \(R_L\) to the left camera \(L\). It transforms points in the \(L\) coordinate frame into the \(R_L\) coordinate frame.

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the rectified left camera (see OpenCV docs).

depth

uint16

[NimxHxW]

Ground truth depth maps for the rectified left camera. Depth values are in cm.

optical_flow

int16

[NimxHxWx2]

Ground truth optical flow maps for the rectified left camera. Optical flow vectors are in px/s.

scene_flow

int16

[NimxHxWx3]

Ground truth scene flow maps for the rectified left camera. Scene flow vectors are in cm/s.

right

sensor_resolution

int32

[2]

Camera sensor resolution. The format is \( [h \: w] \).

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the right camera (see OpenCV docs).

dist_coeffs

float32

[4]

Distortion parameters of the right camera. We use a radial-tangential distortion model with 2 parameters for each type of distortion. The format of the vector is \( [k_1 \: k_2 \: p_1 \: p_2] \) (see OpenCV docs).

extrinsics

float32

[4x4]

Transformation matrix \({}^RT_L\) from right camera \(R\) to left camera \(L\). It transforms points in the \(L\) coordinate frame into the \(R\) coordinate frame.

depth

uint16

[NimxHxW]

Ground truth depth maps for the right camera. Depth values are in cm.

optical_flow

int16

[NimxHxWx2]

Ground truth optical flow maps for the right camera. Optical flow vectors are in px/s.

scene_flow

int16

[NimxHxWx3]

Ground truth scene flow maps for the right camera. Scene flow vectors are in cm/s.

pose

float64

[Nimx7]

Pose of the right camera. Format: \([x \: y \: z \: q_w \: q_x \: q_y \: q_z]\).

rect

R

float32

[3x3]

Rotation matrix from the rectified right camera \(R_R\) to the right camera \(R\). It transforms points in the \(R\) coordinate frame into the \(R_R\) coordinate frame.

camera_matrix

float32

[3x3]

Camera matrix with intrinsic parameters of the rectified right camera (see OpenCV docs).

depth

uint16

[NimxHxW]

Ground truth depth maps for the rectified right camera. Depth values are in cm.

optical_flow

int16

[NimxHxWx2]

Ground truth optical flow maps for the rectified right camera. Optical flow vectors are in px/s.

scene_flow

int16

[NimxHxWx3]

Ground truth scene flow maps for the rectified right camera. Scene flow vectors are in cm/s.

imo_i ( i \(\in\) [0, Nimos - 1] )

name

str

[NA]

Name of the independent moving object (IMO).

pose

float64

[Nimx7]

Pose of the IMO with respect to the left camera. Format: \([x \: y \: z \: q_w \: q_x \: q_y \: q_z]\).

left

mask

uint8

[NimxHxW]

Segmentation masks of the IMO in the left camera.

rect

mask

uint8

[NimxHxW]

Segmentation masks of the IMO in the rectified left camera.

right

mask

uint8

[NimxHxW]

Segmentation masks of the IMO in the right camera.

rect

mask

uint8

[NimxHxW]

Segmentation masks of the IMO in the rectified right camera.

ATTRIBUTES

Name    Type    [Shape]    Description

DATASETS

Name    Type    [Shape]    Description

DRONE

drone_static

drone_slow_1

drone_slow_2

drone_normal_1

drone_normal_2

drone_fast_1

drone_fast_2

looping_static

looping_moving

two_drones_1

two_drones_2

square_traj_drone

YCB

bleach_cleanser_static

bleach_cleanser

mustard_bottle_static

mustard_bottle

chips_can_static

chips_can

cracker_box_static

cracker_box

pitcher_static

mult_static_1

mult_1

mult_static_2

mult_2

SCENE

transl_slow_1

transl_slow_2

transl_normal_1

transl_normal_2

transl_fast_1

rot_slow_1

rot_slow_2

rot_normal_1

rot_normal_2

rot_fast_1

rand_slow_1

rand_slow_2

rand_normal_1

rand_normal_2

rand_fast_1

rand_fast_2

square_traj_1

square_traj_2