ReconstructMe SDK  2.6.43-0
Real-time 3D reconstruction engine
Options Bindings

Lists all available option bind methods. More...

reme_error_t reme_context_bind_reconstruction_options (reme_context_t c, reme_options_t o)
 Access the reconstruction options. More...
 
reme_error_t reme_context_bind_opencl_info (reme_context_t c, reme_options_t o)
 Access platform OpenCL information. More...
 
reme_error_t reme_context_bind_error_info (reme_context_t c, reme_options_t o)
 Access current error state. More...
 
reme_error_t reme_license_bind_hardware_hashes (reme_context_t c, reme_license_t l, reme_options_t o)
 Access hardware hashes for generating single user licenses bound to specific hardware. More...
 
reme_error_t reme_sensor_bind_camera_options (reme_context_t c, reme_sensor_t s, reme_options_t o)
 Access the sensor specific options that affect how the camera is opened. More...
 
reme_error_t reme_sensor_bind_capture_options (reme_context_t c, reme_sensor_t s, reme_options_t o)
 Access the sensor specific capture options with their current values. More...
 
reme_error_t reme_sensor_bind_render_options (reme_context_t c, reme_sensor_t s, reme_options_t o)
 Access the sensor specific render options. More...
 
reme_error_t reme_recorder_bind_file_options (reme_context_t c, reme_recorder_t r, reme_options_t o)
 Access the recorder specific file options. More...
 
reme_error_t reme_calibrator_bind_options (reme_context_t c, reme_calibrator_t cb, reme_options_t o)
 Access the calibration options. More...
 
reme_error_t reme_calibrator_bind_intrinsics (reme_context_t c, reme_calibrator_t cb, reme_options_t o)
 Access the calibration results. More...
 
reme_error_t reme_surface_bind_generation_options (reme_context_t c, reme_surface_t s, reme_options_t o)
 Access the surface generation options. More...
 
reme_error_t reme_surface_bind_poisson_options (reme_context_t c, reme_surface_t s, reme_options_t o)
 Access the poisson reconstruction options. More...
 
reme_error_t reme_surface_bind_decimation_options (reme_context_t c, reme_surface_t s, reme_options_t o)
 Access the surface decimation options. More...
 
reme_error_t reme_surface_bind_remesh_options (reme_context_t c, reme_surface_t s, reme_options_t o)
 Access the surface remeshing options. More...
 
reme_error_t reme_surface_bind_cleanup_options (reme_context_t c, reme_surface_t s, reme_options_t o)
 Access the surface cleanup options. More...
 
reme_error_t reme_marker_detector_bind_options (reme_context_t c, reme_marker_detector_t md, reme_options_t o)
 Access the marker detection options. More...
 

Detailed Description

Lists all available option bind methods.

This page lists all known methods that bind reme_options_t to specific option sets.

Function Documentation

◆ reme_context_bind_reconstruction_options()

reme_error_t reme_context_bind_reconstruction_options ( reme_context_t  c,
reme_options_t  o 
)

Access the reconstruction options.

The reconstruction options define the behaviour of the reconstruction process. Note that some options can be set during run-time and others require re-compilation by invoking reme_context_compile. The protocol buffer specification documents when a re-compilation is necessary.

Associated Protocol Buffers Specification
package LibReconstructMe;
// Collection of settings that define the behaviour of the reconstruction.
message reconstruction_settings {
// Device number to carry out computations.
// Use -1 to signal auto-choose.
optional int32 device_id = 1 [default = -1];
// -------------------------------------------------------------------------
// Reconstruction volume settings type
message volume_settings {
// Minimum corner point type
message min_3f {
required float x = 1 [default = -500];
required float y = 2 [default = -500];
required float z = 3 [default = -500];
}
// Maximum corner point type
message max_3f {
required float x = 1 [default = 500];
required float y = 2 [default = 500];
required float z = 3 [default = 500];
}
// Volume resolution type
message res_3i {
required int32 x = 1 [default = 256];
required int32 y = 2 [default = 256];
required int32 z = 3 [default = 256];
}
// Minimum extension point of the volume in world space.
// A re-compilation the OpenCL code is required for changes to take effect.
optional min_3f minimum_corner = 1;
// Maximum extension point of the volume in world space.
// A re-compilation the OpenCL code is required for changes to take effect.
optional max_3f maximum_corner = 2;
// The volume is divided into small cuboids called voxels.
// The number of voxels per dimension can differ, but must be divisable by
// 128. 128 is the minimum resolution per dimension.
// A re-compilation the OpenCL code is required for changes to take effect.
optional res_3i resolution = 3;
// This option enables the volume to move when a boundary was crossed
// The boundary is defined by a factor from 1 .. 0.
//
// 1: 0.5: 1:
// +-------------------+ +-------------------+ +-------------------+
// | | | | | |
// | | | +--------+ | | |
// | | | | | | | |
// | | | | | | | |
// | + | | | | | | |
// | | | | | | | |
// | | | +--------+ | | |
// | | | | | |
// +-------------------+ +-------------------+ +-------------------+
optional float trigger_boundary_scaling = 4 [default = 0.5];
}
// Volume setup
optional volume_settings volume = 2;
// -------------------------------------------------------------------------
// Point normals settings type
message normal_settings {
// Instead of calculation point normals through pixel neighbors,
// fit a parametric plane through the neighborhood.
// A re-compilation the OpenCL code is required for changes to take effect.
optional bool pca_normals = 1 [default = false];
// When pca_normals is enabled, this defines the neighborhood size.
// A re-compilation the OpenCL code is required for changes to take effect.
optional int32 half_kernel_size = 2 [default = 3];
};
// Point normals setup
optional normal_settings point_normals = 3;
// -------------------------------------------------------------------------
// Depthmap upsampling filter.
// Closes holes in depthmaps using a color image.
message depth_upsampling_settings {
// Enables or disables eroding of depthmaps.
optional bool enabled = 1 [default = false];
// The half size of depth contour erosion kernel size in pixel.
optional int32 half_kernel_size = 2 [default = 2];
// The half size of the Gaussian bilateral filter window in pixel space
optional float sigma_pixel = 3 [default = 5.0];
// The half size of the Gaussian bilateral filter window in color space
optional float sigma_color = 4 [default = 15.0];
};
// Depthmap upsampling settings.
optional depth_upsampling_settings depthmap_upsampling = 4;
// Depthmap erode settings type.
// Inaccuracies of depthmaps can occur at sharp depth steps. Through erosion
// sharp edges are eliminated.
message depth_erode_settings {
// Enables or disables eroding of depthmaps.
optional bool enabled = 1 [default = false];
// The half size of depth contour erosion kernel size in pixel.
optional int32 half_kernel_size = 2 [default = 2];
// The threshold for detecting sharp edges in the depth map.
optional int32 minimum_depth_step = 3 [default = 30];
};
// Depthmap erosion setup
optional depth_erode_settings depthmap_erosion = 5;
// Color-map erosion settings type.
// Inaccuracies of colorization can occur at sharp depth steps. Through colors are
// invalidated at such sharp edges.
message color_erode_settings {
// Enables or disables eroding of color-maps.
optional bool enabled = 1 [default = false];
// The half size of color contour erosion kernel size in pixel.
optional int32 half_kernel_size = 4 [default = 2];
// The threshold for detecting sharp edges in the depth map.
optional int32 minimum_depth_step = 3 [default = 30];
};
// Color-map erosion setup
optional color_erode_settings colormap_erosion = 6;
// -------------------------------------------------------------------------
// Depthmap bilateral filter settings type.
// Smoothes the depthmap while preserving sharp depthmap edges.
message bilateral_filter_settings {
// Enables or disables smoothing of depthmaps
optional bool enabled = 1 [default = true];
// The half size of bilateral filter kernel size in pixel.
optional int32 half_kernel_size = 2 [default = 3];
// The half size of the Gaussian bilateral filter window in pixel space
optional float sigma_pixel = 3 [default = 9.0];
// The half size of the Gaussian bilateral filter window in depth space
optional float sigma_depth = 4 [default = 30.0];
};
// Depthmap smoothing setup
optional bilateral_filter_settings depthmap_smoothing = 7;
// -------------------------------------------------------------------------
// Data integration settings type.
// Defines how adding data to the volume is carried out
message integration_settings {
// Defines the minimum thickness of objects in the volume.
// Lower values allow you to scan thinner objects. Settings this value
// too low results in reconstruction holes and incorrect tracking.
// A re-compilation the OpenCL code is required for changes to take effect.
optional float truncation = 1 [default = 20];
// Each volume voxel smoothes data from the last integrations.
// The maximum weight can be thought of as an moving average threshold.
// Once reached the voxel starts to forget older values.
// A re-compilation the OpenCL code is required for changes to take effect.
optional int32 maximum_weight = 2 [default = 32];
/// Maximum depth of points to integrate into the volume
optional float maximum_depth = 3 [default = 1500];
// Only points facing the camera in an angle no more than the given one
// will be considered in integration. Value is in degrees.
optional float maximum_angle = 4 [default = 70];
// Enable support for colors in volume.
optional bool use_colors = 5 [default = false];
// Depth values beyond maximum_depth won't be integrated, but can be used for
// object change detection. If the distance difference at a specific pixel between
// the measured sensor depth and the old object depth is greater than minimum_deletion_distance,
// the object will be erased from the global model.
optional float minimum_deletion_distance = 6 [default = 40.0, deprecated=true];
}
// Integration setup
optional integration_settings data_integration = 8;
// -------------------------------------------------------------------------
// Data extraction settings type.
// Defines how the volume is raytraced to generate synthetic sensor data,
// which is used to align the current raw sensor data with the last camera
// position.
message extraction_settings {
// Step factor of the ray marching algorithm. Specified in terms of
// percent of data_integration.truncation
// A re-compilation the OpenCL code is required for changes to take effect.
optional float step_factor = 1 [default = 0.7];
// Numerical step length of gradient calculation
// Estimating point normals in the volume is carried out using
// numerical differentation. This value value defines the
// the +/- distance of samples around the value to be differentiated.
// Higher values will lead to smoother but maybe inaccurate normals.
// A re-compilation the OpenCL code is required for changes to take effect.
optional float gradient_step_length = 2 [default = 0.1];
// Minimum refinement steps of raytracing in the vicinity of the surface.
// The higher the better is the approximation of the real surface intersection.
optional int32 surface_vicinity_steps = 3 [default = 4];
}
// Raytracing setup
optional extraction_settings data_extraction = 9;
// -------------------------------------------------------------------------
// Camera tracking alignment settings type.
// Defines how tracking the camera position between frames behaves.
message alignment_settings {
// Local search parameters. Local search is fast and succeeds when
// the camera movement between two subsequent frames is small.
message local_search_settings {
// Maximum number of iterations to perform
// A re-compilation the OpenCL code is required for changes to take effect.
optional int32 maximum_iterations = 1 [default = 30];
// Number of data pyramid levels to generate
// A re-compilation the OpenCL code is required for changes to take effect.
optional int32 pyramid_levels = 2 [default = 3];
// Maximum point distance between two points to establish correspondences
// A re-compilation the OpenCL code is required for changes to take effect.
optional float maximum_point_distance = 3 [default = 20];
// Maximum normal angle deviation two points to establish correspondences
// A re-compilation the OpenCL code is required for changes to take effect.
optional float maximum_normal_angle = 4 [default = 30];
// How much weight to apply to the color tracking term. Setting this value to zero will
// disable color tracking. Higher values will give increasingly more weight to the color tracking
// term. Try 0.5 for a start.
optional float color_weight = 5 [default = 0];
// Wether or not to skip the finest pyramid level in matching. This is an performance
// optimization.
optional bool skip_finest_pyramid_level = 6 [default = false];
}
// Global search parameters. Global search is slower than local search but
// succeeds in cases where the camera movement between two subsequent frames large.
message global_search_settings {
// Maximum number of seconds to search for tracking
// A re-compilation the OpenCL code is required for changes to take effect.
optional float maximum_seconds = 1 [default = 0.7];
// Minimum inlier percentage to become a valid hypothesis.
// A re-compilation the OpenCL code is required for changes to take effect.
optional float minimum_inlier_percentage = 3 [default = 0.4];
// When using color tracking this value declares the minimum number of
// feature matches between two images
optional int32 minimum_feature_matches = 4 [default = 25];
}
// Verification of transform estimation.
message verification_settings {
// Maximum allowed average SDF change of voxels when tracking is established
optional float maximum_sdf_change_on_track = 1 [default = 0.08];
// Maximum allowed average SDF change of voxels when no tracking is present
optional float maximum_sdf_change_no_track = 2 [default = 0.08];
};
// Local search parameters
optional local_search_settings local_search = 1;
// Global search parameters
optional global_search_settings global_search = 2;
// Verification settings
optional verification_settings verification = 3;
// Pad missing volume data with sensor data to increase tracking robustness when only portions
// of the volume are visible. Enabling this feature assumes a moving camera and a static scene.
optional bool use_sensor_data_padding = 4 [default = false];
// Anticipates the next position by trying to forecast. Useful to reduce the number of
// local search iterations. Enabling this feature assumes that the camera movement is kinda
// smooth.
optional bool use_position_forecast = 5 [default = true];
}
// Alignment setup
optional alignment_settings camera_tracking = 10;
}
Parameters
cA valid context object
oA valid options binding
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_bust.cpp, example_reconstructmesdk_color_tracking.cpp, example_reconstructmesdk_colorize.cpp, example_reconstructmesdk_csg.cpp, example_reconstructmesdk_marker.cpp, example_reconstructmesdk_options.cpp, example_reconstructmesdk_point_and_shoot_with_colors.cpp, example_reconstructmesdk_remote_reconstruction.cpp, example_reconstructmesdk_scan_tilt.cpp, example_reconstructmesdk_sensor_printing.cpp, and example_reconstructmesdk_volume.cpp.

◆ reme_context_bind_opencl_info()

reme_error_t reme_context_bind_opencl_info ( reme_context_t  c,
reme_options_t  o 
)

Access platform OpenCL information.

Associated Protocol Buffers Specification
package LibOpenCLBridge;
message opencl_info {
// Defines the type of the device
enum device_type {
CPU = 0;
GPU = 1;
}
// Defines a device
message device {
// Product string
optional string name = 1 [default = "Unknown device name"];
// Vendor string
optional string vendor = 2 [default = "Unknown device vendor"];
// Type of device
optional device_type type = 3;
// Global memory size in bytes.
optional int64 global_memory_size = 4;
// Internal ranking of device based on flops.
// Lower numbers are better ranks.
optional int32 rank = 5;
// Platform string. Devices might be found in multiple platforms (i.e using different drivers)
optional string platform_name = 6 [default = "Unknown platform name"];
}
// List of devices.
repeated device devices = 1;
}
Parameters
cA valid context object
oA valid options binding
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_options.cpp.

◆ reme_context_bind_error_info()

reme_error_t reme_context_bind_error_info ( reme_context_t  c,
reme_options_t  o 
)

Access current error state.

Associated Protocol Buffers Specification
// Current error state
message error_info {
// List of error messages in order of arrival.
repeated string messages = 1;
}
Parameters
cA valid context object
oA valid options binding
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_error_handling.cpp.

◆ reme_license_bind_hardware_hashes()

reme_error_t reme_license_bind_hardware_hashes ( reme_context_t  c,
reme_license_t  l,
reme_options_t  o 
)

Access hardware hashes for generating single user licenses bound to specific hardware.

Associated Protocol Buffers Specification
// Hardware hashes
message hardware {
repeated string hashes = 1;
}
Parameters
cA valid context object
lA valid license object
oA valid options binding
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure

◆ reme_sensor_bind_camera_options()

reme_error_t reme_sensor_bind_camera_options ( reme_context_t  c,
reme_sensor_t  s,
reme_options_t  o 
)

Access the sensor specific options that affect how the camera is opened.

Associated Protocol Buffers Specification
Depending on the sensor chosen on create, different specs are needed, since each sensor supports a different set of parameters.

For openni sensors (OpenNI 2.x)

import "rgbdsensor/videostream.proto";
package LibRGBDSensor;
// OpenNI v2.0 sensor configuration
message openni2_sensor_config {
// Default driver model
optional string driver = 1 [default = "openni"];
// Device ID
optional int32 device_id = 2 [default = 0];
// Device URI. Please make sure to have backslashes escaped. A valid URI prototype:
// \\\\?\\usb#vid_1d27&pid_0601&mi_00#7&78d4066&0&0000#{c3b5f022-5a42-1980-1909-ea72095601b1}
optional string device_uri = 6 [default = ""];
optional LibRGBDSensor.videostream depth_stream = 3;
optional LibRGBDSensor.videostream aux_stream = 4;
// Map depth viewpoint to aux viewpoints.
optional bool enable_align_viewpoints = 5 [default = true];
// Sync depth and aux viewpoints in time.
optional bool enable_sync_viewpoints = 7 [default = false];
}

For mskinect sensors

import "rgbdsensor/videostream.proto";
package LibRGBDSensor;
// Kinect sensor configuration based on MSKinect driver
message mskinect_sensor_config {
// Default driver model
optional string driver = 1 [default = "mskinect"];
// Device ID
optional int32 device_id = 2 [default = 0];
optional LibRGBDSensor.videostream depth_stream = 3;
optional LibRGBDSensor.videostream aux_stream = 4;
// Map depth viewpoint to aux viewpoints.
optional bool enable_align_viewpoints = 5 [default = true];
// Enable near mode
optional bool enable_near_mode = 6 [default = true];
}

For librealsense sensors

import "rgbdsensor/videostream.proto";
import "rgbdsensor/librealsense_opts.proto";
package LibRGBDSensor;
// Intel Realsense sensor configuration.
//
// Currently the intrinsics for both, color and depth streams,
// are directly read from the camera itself and therefore changing
// the instrinsic fields in depth_stream and aux_stream does not
// have any effects.
message librealsense_sensor_config {
// Default driver model
optional string driver = 1 [default = "librealsense"];
// Device ID
optional int32 device_id = 2 [default = 0];
// Device URI. Please make sure to have backslashes escaped. A valid URI prototype:
// \\\\?\\usb#vid_1d27&pid_0601&mi_00#7&78d4066&0&0000#{c3b5f022-5a42-1980-1909-ea72095601b1}
optional string device_uri = 6 [default = ""];
optional LibRGBDSensor.videostream depth_stream = 3;
optional LibRGBDSensor.videostream aux_stream = 4;
// Map depth viewpoint to aux viewpoints.
optional bool enable_align_viewpoints = 5 [default = true];
// Sync depth and aux viewpoints in time.
optional bool enable_sync_viewpoints = 7 [default = false];
optional LibRealsenseOpts opts = 8;
// the first 1-2 pixels seem to have random data, ignore these
optional uint32 ignore_first_num_depth_pixels = 9 [default = 2];
}

Where LibRealsenseOpts is explained in the docs of reme_sensor_bind_capture_options

For file sensors

import "rgbdsensor/videostream.proto";
package LibRGBDSensor;
// File sensor configuration. Streams data from files.
message file_sensor_config {
// Default driver model
optional string driver = 1 [default = "file"];
optional LibRGBDSensor.videostream depth_stream = 3;
optional LibRGBDSensor.videostream aux_stream = 4;
optional bool enable_align_viewpoints = 5 [default = false];
optional int32 playback_loops = 6 [default = 1];
optional bool playback_reverse_direction = 7 [default = true];
optional string depth_regex = 8 [default="(\\d+)-depth\\.png"];
optional string aux_regex = 9 [default="(\\d+)-color\\.png"];
}

For external sensors

import "rgbdsensor/videostream.proto";
package LibRGBDSensor;
// External sensor configuration. This sensor mimics a sensor producing empty images of
// the below specified size. Best used, when you want to feed sensor data from a sensor
// that is otherwise not supported.
message external_sensor_config {
// Default driver model
optional string driver = 1 [default = "external"];
optional LibRGBDSensor.videostream depth_stream = 2;
optional LibRGBDSensor.videostream aux_stream = 3;
}

For network sensors

package LibRGBDSensor;
// Network sensor configuration. Captures data from network sensor sources.
message network_sensor_config {
// Default driver name
optional string driver = 1 [default = "network"];
// Device id to capture from. Beginning of streaming service id should
// match this string. If left empty, captures from any streaming service.
optional string device_id = 2 [default = ""];
// Default UDP broadcasting port.
optional int32 discovery_port = 3 [default = 37424];
// Time-out to discover streaming service in milliseconds.
optional int32 timeout_ms = 4 [default = 30000];
}

Common to almost all configurations (exception: network sensor - here the configuration is transmitted by the streaming service) above is the usage of the LibRGBDSensor.videostream

import "rgbdsensor/intrinsics.proto";
package LibRGBDSensor;
// Defines properties of a video stream
message videostream {
// Video stream type
enum stream_type {
STREAM_DEPTH = 1;
STREAM_COLOR = 2;
STREAM_IR = 3;
}
// Type of stream
optional stream_type type = 1 [default = STREAM_DEPTH];
// Enable or disable this stream
optional bool enabled = 2 [default = true];
// Defines the where the stream is c
optional string source = 3 [default = ""];
// Image size description
message image_size_type {
optional int32 width = 1 [default = 640];
optional int32 height = 2 [default = 480];
};
// Defines the initial image size
optional image_size_type image_size = 4;
// Unit description
enum units_type {
// No units
UNIT_UNKNOWN = 0;
// Unit is milli-meter
UNIT_1MM = 1;
// Unit is 0.1 milli-meter
UNIT_100UM = 2;
// Unit is 0.01 milli-meter
UNIT_10UM = 3;
}
// Depth dimension
optional units_type units = 5 [default = UNIT_UNKNOWN];
// scale factor for depth data
optional float scale_depth_to_mm = 9 [default = 1];
// Mirror image
optional bool mirror_enabled = 6 [default = false];
// Target FPS
optional int32 fps = 7 [default = 30];
// Stream intrinsics
optional LibRGBDSensor.intrinsics intrinsics = 8;
}

The referenced LibRGBDSensor.intrinsics has the following layout

package LibRGBDSensor;
// Camera intrinsics
message intrinsics {
// Image size this intrinsics applies to.
optional int32 width = 1 [default = 640];
optional int32 height = 2 [default = 480];
// Camera matrix
optional double fx = 3 [default = 571.26];
optional double fy = 4 [default = 571.26];
optional double cx = 5 [default = 320];
optional double cy = 6 [default = 240];
// Radial distortion coefficients
// Set to zero to disable certain calculations
optional double k1 = 7 [default = 0];
optional double k2 = 8 [default = 0];
optional double k3 = 9 [default = 0];
// Tangential distortion coefficients
// Set to zero to disable certain calculations
optional double p1 = 10 [default = 0];
optional double p2 = 11 [default = 0];
}
Note
When radial or tangential distortion parameters are not equal zero a distortion correction will be performed.
Changing camera options take effect on the next call to reme_sensor_open.
Parameters
cA valid context object
sA valid sensor object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_calibration.cpp, example_reconstructmesdk_color_tracking.cpp, example_reconstructmesdk_colorize.cpp, example_reconstructmesdk_csg.cpp, example_reconstructmesdk_point_and_shoot_with_colors.cpp, example_reconstructmesdk_recorder.cpp, example_reconstructmesdk_sensor.cpp, and example_reconstructmesdk_sensor_external.cpp.

◆ reme_sensor_bind_capture_options()

reme_error_t reme_sensor_bind_capture_options ( reme_context_t  c,
reme_sensor_t  s,
reme_options_t  o 
)

Access the sensor specific capture options with their current values.

Associated Protocol Buffers Specification

Depending on the sensor chosen on create, different specs are needed, since each sensor supports a different set of parameters.

For openni sensors

import "rgbdsensor/basic_frame_support.proto";
package LibRGBDSensor;
// OpenNI sensor capture parameter description
message openni2_sensor_capture_parameter {
// Frame specific information. Read-only.
optional LibRGBDSensor.basic_frame_support frame_info = 1;
// Infrared raw intensity multiplier. Read-Write.
optional int32 ir_alpha = 2 [default = 4];
// Enable or disable auto-exposure
optional bool auto_exposure = 3 [default = true];
// Enable or Auto-white balabnce
optional bool auto_white_balance = 4 [default = true];
// Set exposure time
optional float exposure_time = 5 [default = 0];
// Enable IR projector. Read-Write. Only supported for devices compatible with Carmine 1.08 / 1.09
optional bool enable_ir_projector = 6 [default = true];
}

For mskinect sensors

import "rgbdsensor/basic_frame_support.proto";
package LibRGBDSensor;
// Microsoft Kinect for Windows capture parameter description
message mskinect_sensor_capture_parameter {
// Frame specific information. Read-only.
optional LibRGBDSensor.basic_frame_support frame_info = 1;
// Enable IR projector. Read-Write.
optional bool enable_ir_projector = 2 [default = true];
// Infrared raw intensity multiplier. Read-Write.
optional int32 ir_alpha = 3 [default = 10];
// Elevation or tilt angle. Read-Write.
// Extends the view range to to +/- 27 degrees. A value of 0 means perpendicular to gravity.
// The movement of the motor is performed asynchronously. Only one asnychronous tilt movement
// it allowed at any time. Too frequent changes to the tilt angle can cause damage to the motor.
// Note that the IR projector is turned off while tilting, essentially making ReconstructMe blind
// while the sensor moves.
optional int32 tilt_angle = 4 [default = 0];
// Sets/Gets a boolean that determines if automatic exposure is enabled.
optional bool auto_exposure = 5 [default = true];
// Sets/Gets boolean that determines if automatic white balance is enabled.
optional bool auto_white_balance = 6 [default = true];
// Sets/Gets the exposure time in increments of 1/10,000 of a second.
// The range is [0.0, infinity];
optional float exposure_time = 7 [default = 300];
// Sets/Gets the white balance, which is a color temperature in degrees Kelvin.
// The range is [2700, 6500];
optional float white_balance = 8 [default = 4500];
}

For librealsense sensors

import "rgbdsensor/basic_frame_support.proto";
import "rgbdsensor/librealsense_opts.proto";
package LibRGBDSensor;
// Intel Realsense capture parameter description
message librealsense_sensor_capture_parameter {
// Frame specific information. Read-only.
optional LibRGBDSensor.basic_frame_support frame_info = 1;
optional LibRealsenseOpts opts = 2;
}

where LibRealsenseOpts is

package LibRGBDSensor;
message LibRealsenseOpts {
// for ease of copy&paste, = 0 is replaced with 1000, all other numbers are the same as in rs.h
optional double color_backlight_compensation = 1000;
optional double color_brightness = 1;
optional double color_contrast = 2;
optional double color_exposure = 3; ///< Controls exposure time of color camera. Setting any value will disable auto exposure.
optional double color_gain = 4;
optional double color_gamma = 5;
optional double color_hue = 6;
optional double color_saturation = 7;
optional double color_sharpness = 8;
optional double color_white_balance = 9; ///< Controls white balance of color image. Setting any value will disable auto white balance.
optional double color_enable_auto_exposure = 10; ///< Set to 1 to enable automatic exposure control; or 0 to return to manual control
optional double color_enable_auto_white_balance = 11; ///< Set to 1 to enable automatic white balance control; or 0 to return to manual control
optional double f200_laser_power = 12; ///< 0 - 15
optional double f200_accuracy = 13; ///< 0 - 3
optional double f200_motion_range = 14; ///< 0 - 100
optional double f200_filter_option = 15; ///< 0 - 7
optional double f200_confidence_threshold = 16; ///< 0 - 15
optional double sr300_dynamic_fps = 17; ///< {2; 5; 15; 30; 60}
optional double sr300_auto_range_enable_motion_versus_range = 18;
optional double sr300_auto_range_enable_laser = 19;
optional double sr300_auto_range_min_motion_versus_range = 20;
optional double sr300_auto_range_max_motion_versus_range = 21;
optional double sr300_auto_range_start_motion_versus_range = 22;
optional double sr300_auto_range_min_laser = 23;
optional double sr300_auto_range_max_laser = 24;
optional double sr300_auto_range_start_laser = 25;
optional double sr300_auto_range_upper_threshold = 26;
optional double sr300_auto_range_lower_threshold = 27;
optional double sr300_wakeup_dev_phase1_period = 28;
optional double sr300_wakeup_dev_phase1_fps = 29;
optional double sr300_wakeup_dev_phase2_period = 30;
optional double sr300_wakeup_dev_phase2_fps = 31;
optional double sr300_wakeup_dev_reset = 32;
optional double sr300_wake_on_usb_reason = 33;
optional double sr300_wake_on_usb_confidence = 34;
optional double r200_lr_auto_exposure_enabled = 35; ///< {0; 1}
optional double r200_lr_gain = 36; ///< 100 - 1600 (Units of 0.01)
optional double r200_lr_exposure = 37; ///< > 0 (Units of 0.1 ms)
optional double r200_emitter_enabled = 38; ///< {0; 1}
optional double r200_depth_units = 39; ///< micrometers per increment in integer depth values; 1000 is default (mm scale)
optional double r200_depth_clamp_min = 40; ///< {0 - USHORT_MAX}. Can only be set before streaming starts.
optional double r200_depth_clamp_max = 41; ///< {0 - USHORT_MAX}. Can only be set before streaming starts.
optional double r200_disparity_multiplier = 42; ///< {0 - 1000}. The increments in integer disparity values corresponding to one pixel of disparity. Can only be set before streaming starts.
optional double r200_disparity_shift = 43; ///< {0 - 512}. Can only be set before streaming starts.
optional double r200_auto_exposure_mean_intensity_set_point = 44;
optional double r200_auto_exposure_bright_ratio_set_point = 45;
optional double r200_auto_exposure_kp_gain = 46;
optional double r200_auto_exposure_kp_exposure = 47;
optional double r200_auto_exposure_kp_dark_threshold = 48;
optional double r200_auto_exposure_top_edge = 49;
optional double r200_auto_exposure_bottom_edge = 50;
optional double r200_auto_exposure_left_edge = 51;
optional double r200_auto_exposure_right_edge = 52;
optional double r200_depth_control_estimate_median_decrement = 53;
optional double r200_depth_control_estimate_median_increment = 54;
optional double r200_depth_control_median_threshold = 55;
optional double r200_depth_control_score_minimum_threshold = 56;
optional double r200_depth_control_score_maximum_threshold = 57;
optional double r200_depth_control_texture_count_threshold = 58;
optional double r200_depth_control_texture_difference_threshold = 59;
optional double r200_depth_control_second_peak_threshold = 60;
optional double r200_depth_control_neighbor_threshold = 61;
optional double r200_depth_control_lr_threshold = 62;
}

For file sensors

import "rgbdsensor/basic_frame_support.proto";
package LibRGBDSensor;
// File sensor capture parameter description
message file_sensor_capture_parameter {
// Frame specific information. Read-only.
optional LibRGBDSensor.basic_frame_support frame_info = 1;
}

Common to all configurations above is the frame_info field. It is mendatory for reconstruction and has the following structure

package LibRGBDSensor;
// Contains information on basic sensor image support.
message basic_frame_support {
// Image size type
message image_size {
optional int32 width = 1 [default = 640];
optional int32 height = 2 [default = 480];
};
// True when sensor supports depth stream
optional bool supports_depth = 1;
// True when sensor supports an auxilary stream
optional bool supports_aux = 2;
// Frame size of depth image in pixels
optional image_size depth_size = 3;
// Frame size of auxilary image in pixels
optional image_size aux_size = 4;
}
Note
The capture options are updated with current value when reme_sensor_bind_capture_options is called.
Changing capture options without a call to reme_sensor_apply_capture_options has no effect.
Parameters
cA valid context object
sA valid sensor object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_color_tracking.cpp, example_reconstructmesdk_scan_tilt.cpp, and example_reconstructmesdk_sensor.cpp.

◆ reme_sensor_bind_render_options()

reme_error_t reme_sensor_bind_render_options ( reme_context_t  c,
reme_sensor_t  s,
reme_options_t  o 
)

Access the sensor specific render options.

These options define how sensor images are rendered. Use reme_sensor_apply_render_options to apply value changes.

Associated Protocol Buffers Specification
// Render options
message render_options {
// Color type
message color4_type {
// Red channel [0..1]
required float r = 1;
// Green channel [0..1]
required float g = 2;
// Blue channel [0..1]
required float b = 3;
// Alpha channel [0..1]
required float a = 4;
}
// How shading of the volume image is performed.
enum shade_type {
// Shade points using Blinn-Phong modell
SHADE_PHONG = 0;
// Shade points according to normal direction.
SHADE_NORMALS = 1;
// Colorize pixels using input color. This is only
// a valid options if colors are supported.
SHADE_COLORS = 2;
}
// Clear color for volume images.
// By default this maps to a dark-gray color.
optional color4_type clear_color = 1;
// Diffuse color for volume images. Only used
// when SHADE_PHONG is enabled.
// By default this maps to a pastel-blue color.
optional color4_type diffuse_color = 2;
// Border color. Defines the color to apply to color borders,
// which are found in areas without complete texture/geometry
// information.
// This color only applies when using SHADE_COLORS.
optional color4_type border_color = 3;
// Shading mode.
optional shade_type shade_mode = 4 [default = SHADE_PHONG];
}
Parameters
cA valid context object
sA valid sensor object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_bust.cpp, example_reconstructmesdk_color_tracking.cpp, example_reconstructmesdk_colorize.cpp, example_reconstructmesdk_marker.cpp, example_reconstructmesdk_point_and_shoot_with_colors.cpp, and example_reconstructmesdk_remote_reconstruction.cpp.

◆ reme_recorder_bind_file_options()

reme_error_t reme_recorder_bind_file_options ( reme_context_t  c,
reme_recorder_t  r,
reme_options_t  o 
)

Access the recorder specific file options.

Associated Protocol Buffers Specification
// Recorder options
message recorder_options {
// Where to save the depth file
optional string depth_file = 1 [default = "reconstructme.depths.gz"];
// Where to save the color file if supported
optional string color_file = 2 [default = "reconstructme.avi"];
// Where to save the file_sensor configuration file
// Note that the recorder will copy the relevant sensor intrinsics
// from the real sensor
optional string file_sensor_config = 3 [default = "file_sensor.txt"];
}
Parameters
cA valid context object
rA valid recorder object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_recorder.cpp, and example_reconstructmesdk_recorder_update_fileformat.cpp.

◆ reme_calibrator_bind_options()

reme_error_t reme_calibrator_bind_options ( reme_context_t  c,
reme_calibrator_t  cb,
reme_options_t  o 
)

Access the calibration options.

Associated Protocol Buffers Specification
// Calibration options for chessboards
message calibration_options {
// Number of inner corners in the width direction
optional int32 inner_count_width = 1 [default = 10];
// Number of inner corners in the height direction
optional int32 inner_count_height = 2 [default = 7];
// Length of a single square side. Defaults are are in mm for default A3 checkerboard.
optional float length_square_side = 3 [default = 33.876];
// Number of pixels to use when refining corners in the width direction
optional int32 refine_width = 4 [default = 5];
// Number of pixels to use when refining corners in the height direction
optional int32 refine_height = 5 [default = 5];
// Assume no tangential distortions
optional bool zero_tangential = 6 [default = true];
// Assume no lower order radial distortions
optional bool zero_radial_k1k2 = 7 [default = true];
// Assume no higher order radial distortions
optional bool zero_radial_k3 = 8 [default = true];
}

The calibration options are applied when the first image is added (reme_calibrator_add_image).

Parameters
cA valid context object
cbA valid calibration object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure

◆ reme_calibrator_bind_intrinsics()

reme_error_t reme_calibrator_bind_intrinsics ( reme_context_t  c,
reme_calibrator_t  cb,
reme_options_t  o 
)

Access the calibration results.

The results are provided as a new intrincis options set.

Associated Protocol Buffers Specification
package LibRGBDSensor;
// Camera intrinsics
message intrinsics {
// Image size this intrinsics applies to.
optional int32 width = 1 [default = 640];
optional int32 height = 2 [default = 480];
// Camera matrix
optional double fx = 3 [default = 571.26];
optional double fy = 4 [default = 571.26];
optional double cx = 5 [default = 320];
optional double cy = 6 [default = 240];
// Radial distortion coefficients
// Set to zero to disable certain calculations
optional double k1 = 7 [default = 0];
optional double k2 = 8 [default = 0];
optional double k3 = 9 [default = 0];
// Tangential distortion coefficients
// Set to zero to disable certain calculations
optional double p1 = 10 [default = 0];
optional double p2 = 11 [default = 0];
}
Parameters
cA valid context object
cbA valid calibration object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_calibration.cpp.

◆ reme_surface_bind_generation_options()

reme_error_t reme_surface_bind_generation_options ( reme_context_t  c,
reme_surface_t  s,
reme_options_t  o 
)

Access the surface generation options.

Associated Protocol Buffers Specification
// Surface generation from reconstruction volume
message generation_options {
// When enabled duplicate vertices within a certain radius are merged towards a single vertex.
optional bool merge_duplicate_vertices = 1 [default = true];
// Defines merge radius. Larger values will perform a simple decimation
optional float merge_radius = 2 [default = 0.00001];
}
Parameters
cA valid context object
sA valid surface object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_surface.cpp.

◆ reme_surface_bind_poisson_options()

reme_error_t reme_surface_bind_poisson_options ( reme_context_t  c,
reme_surface_t  s,
reme_options_t  o 
)

Access the poisson reconstruction options.

Associated Protocol Buffers Specification
// Poisson surface generation options
message poisson_options {
// This integer is the maximum depth of the tree that will be used for surface reconstruction.
// Running at depth d corresponds to solving on a voxel grid whose resolution is no larger than 2^d x 2^d x 2^d.
// Note that since the reconstructor adapts the octree to the sampling density, the specified reconstruction depth is only an upper bound.
// The default value for this parameter is 8.
optional int32 depth = 1 [default = 8];
// Solver subdivision depth. This integer argument specifies the depth at which a block Gauss-Seidel solver is used to solve
// the Laplacian equation. Using this parameter helps reduce the memory overhead at the cost of a small
// increase in reconstruction time. (In practice, we have found that for reconstructions of depth 9 or higher a subdivide
// depth of 7 or 8 can greatly reduce the memory usage.) The default value is 8.
optional int32 solver_divide = 2 [default = 8];
// Iso-surface extraction subdivision depth. This integer argument specifies the depth at which a block iso-surface extractor should be used
// to extract the iso-surface. Using this parameter helps reduce the memory overhead at the cost of a
// small increase in extraction time. (In practice, we have found that for reconstructions of depth 9 or
// higher a subdivide depth of 7 or 8 can greatly reduce the memory usage.) The default value is 8.
optional int32 iso_divide = 3 [default = 8];
// Minimum number of samples per octree node. This floating point value specifies the minimum number of sample points that should fall within an octree
// node as the octree construction is adapted to sampling density. For noise-free samples, small values in
// the range [1.0 - 5.0] can be used. For more noisy samples, larger values in the range [15.0 - 20.0] may be
// needed to provide a smoother, noise-reduced, reconstruction. The default value is 1.0.
optional int32 minimum_samples_per_node = 4 [default = 1];
// Currently unused
optional float scale = 5 [default = 2.0];
// When enabled the output is a manifold
optional bool enable_manifold = 6 [default = true];
// M inimum reconstruction depth. This integer specifies the depth beyond depth the octree will be adapted. At coarser depths,
// the octree will be complete, containing all 2^d x 2^d x 2^d nodes. The default value for this parameter is 5.
optional int32 minimum_depth = 7 [default = 5];
}
Parameters
cA valid context object
sA valid surface object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_options_type_safe.cpp, and example_reconstructmesdk_surface.cpp.

◆ reme_surface_bind_decimation_options()

reme_error_t reme_surface_bind_decimation_options ( reme_context_t  c,
reme_surface_t  s,
reme_options_t  o 
)

Access the surface decimation options.

Associated Protocol Buffers Specification
// Mesh decimation options
message decimation_options {
// Decimate to target complexity.
// Range: 0..inf
optional int32 maximum_faces = 1 [default = 100000];
// Maximum quadric error to accept per collapse. The quadric error is similar
// to the Hausdorff Distance.
// Range: 0..inf
optional float maximum_quadric_error = 2 [default = 100000];
// Minimum triangle roundness. Normalized triangle roundness with respect to
// equiliteral triangle shape.
// Range: 0..1
optional float minimum_triangle_roundness = 3 [default = 0];
// Maximum normal angle error in degrees.
// Range: 0..180
optional float maximum_angle_error = 4 [default = 90];
// Preserve the boundary of the mesh.
optional bool preserve_boundary = 5 [default = false];
// Preserve the boundary of the mesh.
optional float maximum_color_error = 6 [default = 765];
}
Parameters
cA valid context object
sA valid surface object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_surface.cpp.

◆ reme_surface_bind_remesh_options()

reme_error_t reme_surface_bind_remesh_options ( reme_context_t  c,
reme_surface_t  s,
reme_options_t  o 
)

Access the surface remeshing options.

Associated Protocol Buffers Specification
// Mesh remeshing options
message remeshing_options {
// Minimum target edge length in remeshing.
// Range: 0..inf and -1.
// Leave at -1 to auto-calculate from average mesh edge length
optional float minimum_edge_length = 1 [default = -1];
// Maximum target edge length in remeshing.
// Range: 0..inf and -1.
// Leave at -1 to auto-calculate from average mesh edge length
optional float maximum_edge_length = 2 [default = -1];
// Maximum color error to tolerate in remeshing.
// If the error in color change when collapsing an edge is above
// this threshold, the collapse is not tolerated. Note that this property
// is only taken into account if the input mesh has vertex colors.
// Range 0..255*3
optional float maximum_color_error = 3 [default = 20.0];
// Maximum curfvate error to tolerate in remeshing.
// If the error in geometric change when collapsing an edge is above
// this threshold, the collapse is not tolerated.
// Range 0..1
optional float maximum_curvate_error = 4 [default = 0.5];
// Instead of adaptive remeshing perform a uniform remeshing.
// Use the maximum_edge_length property to control the target resolution.
// Note that maximum_color_error and maximum_curvate_error would be respected
// in this mode.
optional bool uniform = 5 [default = false];
// Number of iterations to apply.
optional int32 iterations = 6 [default = 5];
}
Parameters
cA valid context object
sA valid surface object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_colorize.cpp.

◆ reme_surface_bind_cleanup_options()

reme_error_t reme_surface_bind_cleanup_options ( reme_context_t  c,
reme_surface_t  s,
reme_options_t  o 
)

Access the surface cleanup options.

Associated Protocol Buffers Specification
// Mesh cleanup options
message cleanup_options {
// Remove components with fewer faces than the given threshold.
// Range: 0..inf
optional int32 minimum_faces = 1 [default = 100];
// Remove components with a diameter less than the given threshold.
// The diameter is calculated based on the compoenents axis aligned
// bounding box.
// Range: 0..inf
optional float minimum_diameter = 2 [default = 0];
// Remove faces/vertices with no/invalid colorization.
optional bool delete_invalid_colorization = 3 [default = true];
}
Parameters
cA valid context object
sA valid surface object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure

◆ reme_marker_detector_bind_options()

reme_error_t reme_marker_detector_bind_options ( reme_context_t  c,
reme_marker_detector_t  md,
reme_options_t  o 
)

Access the marker detection options.

Associated Protocol Buffers Specification
// Marker detection options
message marker_detection_options {
// Marker side length in world units
optional float marker_size = 1 [default = 90];
// If enabled the marker found in the AUX frame is mapped / corrected using depth information.
// Requires a AUX to depth mapping enabled at sensor level.
optional bool map_to_depth = 2 [default = true];
}

Use reme_marker_detector_apply_options to apply value changes.

Parameters
cA valid context object
mdA valid marker detector object
oA valid options binding object
Return values
REME_ERROR_SUCCESSOn success
REME_ERROR_UNSPECIFIEDOn failure
Examples:
example_reconstructmesdk_marker.cpp.