DAVID4 SDK  1.8.7
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
david::StructuredLightScannerD4Lib Class Reference

Implements interface functions of IStructuredLightScanner using DAVID Low Level Library. More...

#include <StructuredLightScannerD4Lib.h>

Inheritance diagram for david::StructuredLightScannerD4Lib:
david::IStructuredLightScanner

Classes

struct  AcquisitionParams
 Parameters for acquisition. More...
 
struct  ResultFilteringParamsEx
 Extended parameters for result filtering. More...
 

Public Member Functions

 StructuredLightScannerD4Lib (IShapeFusion *shapeFusion)
 Constructor. More...
 
void SetResultFilteringParamsEx (const ResultFilteringParamsEx &params)
 Set StructuredLightScannerD4Lib::ResultFilteringParamsEx. More...
 
void SetAcquisitionParams (const AcquisitionParams &params)
 Set StructuredLightScannerD4Lib::AcquisitionParams. More...
 
void SetFrequencies (int frequencies)
 Set number of frequencies (affects number of patterns). More...
 
virtual void SetScreenID (int screenID)
 Set the new screen ID. More...
 
virtual std::vector< std::string > GetAvailableCameraNames ()
 Returns a list of available cameras. More...
 
virtual void SelectCamera (const std::string &cameraName, const ImageFormat &imageFormat=ImageFormat())
 Select a new camera. More...
 
virtual bool CheckCamera ()
 Check state of camera. More...
 
virtual void SetCameraProperty (const std::string &propertyName, double value, enum CamPropsUsage camPropsUsage=CamPropsForAll)
 Set the camera property 'propertyName'. More...
 
virtual double GetCameraProperty (const std::string &propertyName, enum CamPropsUsage camPropsUsage=CamPropsForScanning)
 Get the camera property 'propertyName'. More...
 
virtual std::vector< std::string > GetCameraPropertyNames (bool onlyAvailable)
 Get a list of camera property names. More...
 
virtual void SelectImageSequence (const std::string &directory)
 Selects a sequence of image files as "virtual camera". More...
 
virtual int GetPatternCount ()
 Get the current number of pattern for the complete sequence. More...
 
virtual void GetPatternImage (uint8_t *data, int width, int height, PatternPixelFormat pixelFormat, int patternIndex)
 Get the pattern image with the zero based index 'patternIndex'. More...
 
virtual void SetCapturedImage (const uint8_t *data, int width, int height, CapturedPixelFormat pixelFormat, int patternIndex)
 Set the captured image for given pattern with zero based index 'patternIndex'. More...
 
virtual void SetTextureImage (const uint8_t *data, int width, int height, PixelFormat pixelFormat)
 Set the texture image analog to SetCapturedImage. More...
 
virtual void GetLiveImage (std::vector< uint8_t > &pixelValues, int &width, int &height)
 Get the current grayscale live image from the camera. More...
 
virtual void SetCodedLightPhaseShiftMode (const CodedLightPhaseShiftParams &params)
 Select scan mode Coded Light + Phase Shift (standard DAVID4 mode) and sets the parameters. More...
 
virtual CodedLightPhaseShiftParams GetCodedLightPhaseShiftParams ()
 Get current SLS params for Coded Light and Phase Shift. More...
 
virtual void SetResultFiltering (const ResultFilteringParams &params)
 Set the result filtering parameters for SL scans. More...
 
virtual ResultFilteringParams GetResultFiltering ()
 Get the result filtering parameters for SL scans. More...
 
virtual void ImportCalibration (const std::string &camCalibFilename, const std::string &projectorCalibFilename)
 Import camera and projector calibration from XML files. More...
 
virtual void ExportCalibration (const std::string &camCalibFilename, const std::string &projectorCalibFilename)
 Export camera and projector calibration to XML files. More...
 
virtual void ChangeCameraCalibrationResolution (int newWidth, int newHeight)
 Change resolution of image format used camera calibration. More...
 
virtual std::vector< CalibPointCalibrate (double scale)
 Trigger automatic calibration of the Structured Light Scanner. More...
 
virtual int Scan (bool grabTexture=false, bool setAsBackground=false)
 Trigger a Structured Light Scan. More...
 
virtual void GrabTexture ()
 Grab a new texture.
 
virtual void AutoWhiteBalance ()
 Execute an auto white balancing procedure.
 
virtual int AddScanToShapeFusion ()
 Add the current scan to 'Shape Fusion' module. More...
 
virtual void ExportMesh (const std::string &filename)
 Export the current scan as a triangular mesh. More...
 
virtual void ExportBackgroundDepthmap (const std::string &filename)
 Export the current background as a depth map file (.PFM). More...
 
virtual void ImportBackgroundDepthmap (const std::string &filename)
 Import background from a depth map file (.PFM). More...
 
virtual void GetBackgroundDepthmap (std::vector< float > &depthValues, int &width, int &height)
 Gets the currently used background scan as depth map. More...
 
virtual void SetBackgroundDepthmap (const std::vector< float > &depthValues, int width, int height)
 Sets the background scan, giving a depth map. More...
 
virtual void SetBackgroundPlanes (const std::vector< Plane > &planes)
 Sets the "background scan" from a given list of planes. More...
 
- Public Member Functions inherited from david::IStructuredLightScanner
virtual ~IStructuredLightScanner ()
 Destructor.
 

Protected Types

typedef std::recursive_mutex Mutex
 Used mutex.
 
typedef std::lock_guard< MutexGuard
 Guard for automatic unlocking.
 

Protected Member Functions

void CaptureSequence ()
 Capture a SLS sequence using the current settings. More...
 
void CaptureTexture (bool applyWhiteBalance)
 Capture a texture using the current settings. More...
 
void SwitchCameraProperties (CamPropsUsage usage)
 Switch camera properties. More...
 
void DisplaySetupImage ()
 Show setup image.
 
bool DisplayChessboardImage ()
 Display chessboard image for validation of calibration. More...
 
virtual void OnCalibrationDone (const std::vector< d4calib_CalibPoint > &calibPoints)
 Is called after successful calibration. More...
 

Protected Attributes

Mutex m_mutex
 Mutex used for synchronization.
 
std::shared_ptr< d4cam > m_cam
 Handle to camera.
 
std::shared_ptr< d4calib > m_camCalib
 Handle to camera calibration.
 
std::shared_ptr< d4projector > m_projector
 Handle to projector.
 
std::shared_ptr< d4calib > m_projectorCalib
 Handle to projector calibration.
 
std::shared_ptr< d4img > m_live
 Handle to live image.
 
std::shared_ptr< d4sls > m_sls
 Handle to SLS instance.
 
std::shared_ptr< d4fimg > m_background
 Handle to background depth image.
 
std::shared_ptr< d4mesh > m_scan
 Handle to current scan.
 
std::shared_ptr< d4img > m_texture
 Handle to current texture.
 
std::vector< std::shared_ptr
< d4img > > 
m_sequence
 Array of handles to captured images.
 
double m_scale
 Calibration scale.
 
int m_noiseReduction
 Temporal noise reduction.
 
ResultFilteringParamsEx m_resultFilteringParams
 Parameters for result filtering.
 
AcquisitionParams m_acqParams
 Acquisition parameters.
 
std::map< std::string, double > m_camPropsForScanning
 Camera properties for scanning mode.
 
std::map< std::string, double > m_camPropsForTexturing
 Camera properties for texturing mode.
 
double m_whiteBalance [3]
 White balance correction factors.
 
IShapeFusionm_shapeFusion
 Interface to Shape Fusion module.
 
bool m_externalCapture
 Camera images captured by external acquisition?
 

Additional Inherited Members

- Static Public Member Functions inherited from david::IStructuredLightScanner
static void GetCalibrationError (double &maxDelta, double &rmsError, const std::vector< CalibPoint > &calibPoints)
 Helper function for computing the calibration error given an array of calibration correspondences. More...
 

Detailed Description

Implements interface functions of IStructuredLightScanner using DAVID Low Level Library.

Definition at line 23 of file StructuredLightScannerD4Lib.h.

Constructor & Destructor Documentation

david::StructuredLightScannerD4Lib::StructuredLightScannerD4Lib ( IShapeFusion shapeFusion)

Constructor.

Parameters
[in,out]shapeFusionOptional pointer to 'Shape Fusion' module. Needed for AddScanToShapeFusion.

Member Function Documentation

virtual int david::StructuredLightScannerD4Lib::AddScanToShapeFusion ( )
virtual

Add the current scan to 'Shape Fusion' module.

Returns
ID of the mesh.
Exceptions
david::Error_MissingObject(david::FunctionException) No scan data at hand.

Implements david::IStructuredLightScanner.

virtual std::vector<CalibPoint> david::StructuredLightScannerD4Lib::Calibrate ( double  scale)
virtual

Trigger automatic calibration of the Structured Light Scanner.

The function returns when calibration is finished or an error occurred.

Parameters
[in]scaleScale of the calibration patterns. Typically in mm.
Returns
If calibration is successful: Array of correspondences used for calibration. Empty array otherwise.
Exceptions
david::Error_CameraCalibration(david::FunctionException) Camera calibration failed.
david::Error_ProjectorCalibration(david::FunctionException) Projector calibration failed.

Implements david::IStructuredLightScanner.

void david::StructuredLightScannerD4Lib::CaptureSequence ( )
protected

Capture a SLS sequence using the current settings.

The captured images are stored in 'm_sequence'.

void david::StructuredLightScannerD4Lib::CaptureTexture ( bool  applyWhiteBalance)
protected

Capture a texture using the current settings.

Parameters
[in]applyWhiteBalanceApply white balance to the captured texture image?
virtual void david::StructuredLightScannerD4Lib::ChangeCameraCalibrationResolution ( int  newWidth,
int  newHeight 
)
virtual

Change resolution of image format used camera calibration.

Warning
The aspect ratio is not allowed to change.
Parameters
[in]newWidthNew camera image width.
[in]newHeightNew camera image height.
Exceptions
david::Error_NotCalibrated(david::FunctionException) Camera is not calibrated.
david::Error_InvalidFormat(david::FunctionException) Requested image resolution not supported.

Implements david::IStructuredLightScanner.

virtual bool david::StructuredLightScannerD4Lib::CheckCamera ( )
virtual

Check state of camera.

Returns
False, if camera is not working correctly or camera is not connected.
True, if camera is connected and is working correctly.

Implements david::IStructuredLightScanner.

bool david::StructuredLightScannerD4Lib::DisplayChessboardImage ( )
protected

Display chessboard image for validation of calibration.

Returns
False, if chessboard image can not be displayed.
virtual void david::StructuredLightScannerD4Lib::ExportBackgroundDepthmap ( const std::string &  filename)
virtual

Export the current background as a depth map file (.PFM).

Parameters
[in]filenameFilename of the depth map to be exported.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::ExportCalibration ( const std::string &  camCalibFilename,
const std::string &  projectorCalibFilename 
)
virtual

Export camera and projector calibration to XML files.

Parameters
[in]camCalibFilenameFilename of the camera calibration to be exported to.
[in]projectorCalibFilenameFilename of the projector calibration to be exported to.
Exceptions
david::Error_NotCalibrated(david::FunctionException) Scanner is not calibrated.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::ExportMesh ( const std::string &  filename)
virtual

Export the current scan as a triangular mesh.

See documentation of DAVID software for supported file formats.

Warning
File paths like "c:\\meshes\\myobject.obj" are interpreted as files located on the server. For files located on the client you have to use a shared network path like "\\\\mycomputer\\meshes\\myobject.obj".
Parameters
[in]filenameFilename of the mesh to be exported.
Exceptions
david::Error_NoAccess(david::FunctionException) No access to path.
david::Error_InvalidPath(david::FunctionException) Export path invalid.
david::Error_DirectoryNotFound(david::FunctionException) Export target directory does not exist.
david::Error_MissingFilename(david::FunctionException) Export path misses file name.
david::Error_InvalidMeshId(david::FunctionException) Specified meshID does not exist.

Implements david::IStructuredLightScanner.

virtual std::vector<std::string> david::StructuredLightScannerD4Lib::GetAvailableCameraNames ( )
virtual

Returns a list of available cameras.

Returns
The list of names.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::GetBackgroundDepthmap ( std::vector< float > &  depthValues,
int &  width,
int &  height 
)
virtual

Gets the currently used background scan as depth map.

Parameters
[out]depthValuesThe depth values, row by row, from top to bottom, each row left to right.
[out]widthNumber of columns
[out]heightNumber of rows

Implements david::IStructuredLightScanner.

virtual double david::StructuredLightScannerD4Lib::GetCameraProperty ( const std::string &  propertyName,
enum CamPropsUsage  camPropsUsage = CamPropsForScanning 
)
virtual

Get the camera property 'propertyName'.

Parameters
[in]propertyNameName of property.
[in]camPropsUsageFor which algorithm should the camera property be queried? See david::CamPropsSelect. CamPropsForAll is not allowed here.
Returns
Value of the camera property.
Exceptions
david::Error_DeviceNotAvailable(david::FunctionException) Selected camera is not available.
david::Error_InvalidArgument(david::FunctionException) Invalid property or property is not available.

Implements david::IStructuredLightScanner.

virtual std::vector<std::string> david::StructuredLightScannerD4Lib::GetCameraPropertyNames ( bool  onlyAvailable)
virtual

Get a list of camera property names.

Parameters
[in]onlyAvailableList only available camera properties?
Returns
Array of camera property names.

Implements david::IStructuredLightScanner.

virtual CodedLightPhaseShiftParams david::StructuredLightScannerD4Lib::GetCodedLightPhaseShiftParams ( )
virtual

Get current SLS params for Coded Light and Phase Shift.

Returns
Parameters for this structured light mode. See david::CodedLightPhaseShiftParams.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::GetLiveImage ( std::vector< uint8_t > &  pixelValues,
int &  width,
int &  height 
)
virtual

Get the current grayscale live image from the camera.

Parameters
[out]pixelValues8bit gray scale pixel values are writting into this buffer.
[out]widthWidth of the image.
[out]heightHeight of the image.
Exceptions
david::Error_NoLiveImage(david::FunctionException) Live image is not available.

Implements david::IStructuredLightScanner.

virtual int david::StructuredLightScannerD4Lib::GetPatternCount ( )
virtual

Get the current number of pattern for the complete sequence.

Returns
Number of pattern to be projected.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::GetPatternImage ( uint8_t *  data,
int  width,
int  height,
PatternPixelFormat  pixelFormat,
int  patternIndex 
)
virtual

Get the pattern image with the zero based index 'patternIndex'.

Parameters
[out]dataPixel values are written to this buffer.
  • PPF_Y800: Size has to be width*height bytes.
  • PPF_RGB24: Size has to be width*height*3 bytes.
[in]widthRequested width of pattern image.
[in]heightRequested height of pattern image.
[in]pixelFormatSupported pixel formats for pattern images.
[in]patternIndexZero based index of pattern image. See also GetPatternCount.

Implements david::IStructuredLightScanner.

virtual ResultFilteringParams david::StructuredLightScannerD4Lib::GetResultFiltering ( )
virtual

Get the result filtering parameters for SL scans.

Returns
Current parameters for result filtering.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::ImportBackgroundDepthmap ( const std::string &  filename)
virtual

Import background from a depth map file (.PFM).

Parameters
[in]filenameFilename of the depth map to be imported.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::ImportCalibration ( const std::string &  camCalibFilename,
const std::string &  projectorCalibFilename 
)
virtual

Import camera and projector calibration from XML files.

Parameters
[in]camCalibFilenameFilename of the camera calibration to be imported from.
[in]projectorCalibFilenameFilename of the projector calibration to be imported from.
Exceptions
david::Error_CameraCalibration(david::FunctionException) Could not read camera calibration file.
david::Error_ProjectorCalibration(david::FunctionException) Could not read projector calibration file.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::OnCalibrationDone ( const std::vector< d4calib_CalibPoint > &  calibPoints)
protectedvirtual

Is called after successful calibration.

Parameters
[in]calibPointsArray of calibration points. See d4calib_CalibPoint.
virtual int david::StructuredLightScannerD4Lib::Scan ( bool  grabTexture = false,
bool  setAsBackground = false 
)
virtual

Trigger a Structured Light Scan.

The function computes a 3D scan from a sequence of captured pattern images. The captured images can be provided in two ways:

  1. Camera and projector are selected (SelectCamera and SetScreenID): Selected camera and projector are used to capture a new sequence.
  2. Captured images have been provided via SelectImageSequence or SetCapturedImage + SetTextureImage.

The function returns when scanning is finished or an error occurred.

Parameters
[in]grabTextureAlso grab a texture with the scan (default: false)
[in]setAsBackgroundDefine this scan as background (for Background Removal in ResultFiltering) (default: false)
Returns
Number of triangulated 3D points.
Exceptions
david::Error_NotCalibrated(david::FunctionException) Cannot scan because scanner is not calibrated.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SelectCamera ( const std::string &  cameraName,
const ImageFormat imageFormat = ImageFormat() 
)
virtual

Select a new camera.

Example:

SelectCamera("DAVID-CAM-3-M (8F6DEE1E)");
Parameters
[in]cameraNameName of the camera.
[in]imageFormatFormat of the camera image.
Exceptions
david::Error_DeviceNotAvailable(david::FunctionException) Selected camera is not available.
david::Error_FormatNotAvailable(david::FunctionException) Selected camera image format is invalid.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SelectImageSequence ( const std::string &  directory)
virtual

Selects a sequence of image files as "virtual camera".

All images must be located in the same directory. The image file names are chosen automatically:

Image for camera calibration File name must contain "cam_calib"
Pattern images File names must contain "image" and be sorted alphabetically.
Texture image File name must contain "texture"
Parameters
[in]directoryPath to the image files.
Exceptions
david::Error_InvalidPath(david::FunctionException) Path invalid.
david::Error_DirectoryNotFound(david::FunctionException) Directory does not exist.

Implements david::IStructuredLightScanner.

void david::StructuredLightScannerD4Lib::SetAcquisitionParams ( const AcquisitionParams params)
virtual void david::StructuredLightScannerD4Lib::SetBackgroundDepthmap ( const std::vector< float > &  depthValues,
int  width,
int  height 
)
virtual

Sets the background scan, giving a depth map.

The resolution should be identical to the camera resolution.

Parameters
[in]depthValuesThe depth values, row by row, from top to bottom, each row left to right.
[in]widthNumber of columns
[in]heightNumber of rows

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SetBackgroundPlanes ( const std::vector< Plane > &  planes)
virtual

Sets the "background scan" from a given list of planes.

Camera must be calibrated first!

Parameters
[in]planesThe list of planes that define the background.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SetCameraProperty ( const std::string &  propertyName,
double  value,
enum CamPropsUsage  camPropsUsage = CamPropsForAll 
)
virtual

Set the camera property 'propertyName'.

Here are some important property names:

  • exposure (should be 1/60 s, 1/30 s, or 1/15 s for most cases)
  • gain (should be as low as possible)
  • brightness
  • sharpness
  • gamma
  • ....
Note
Not all cameras support all properties. See also GetCameraPropertyNames.
Parameters
[in]propertyNameName of property.
[in]valueNew value of the property.
[in]camPropsUsageFor which algorithm should the camera property be set? See david::CamPropsSelect.
Exceptions
david::Error_DeviceNotAvailable(david::FunctionException) Selected camera is not available.
david::Error_InvalidArgument(david::FunctionException) Invalid property or property is not available.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SetCapturedImage ( const uint8_t *  data,
int  width,
int  height,
CapturedPixelFormat  pixelFormat,
int  patternIndex 
)
virtual

Set the captured image for given pattern with zero based index 'patternIndex'.

Parameters
[in]dataValid pointer to buffer with pixel values.
  • CPF_Y800: Size of 'data' has to be width*height.
[in]widthWidth of captured image.
[in]heightHeight of captured image.
[in]pixelFormatPixel format of captured image.
[in]patternIndexZero based index of pattern image. See also GetPatternCount.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SetCodedLightPhaseShiftMode ( const CodedLightPhaseShiftParams params)
virtual

Select scan mode Coded Light + Phase Shift (standard DAVID4 mode) and sets the parameters.

Missing parameters will remain unchanged.

Parameters
[in]paramsParameters for this structured light mode.

Implements david::IStructuredLightScanner.

void david::StructuredLightScannerD4Lib::SetFrequencies ( int  frequencies)

Set number of frequencies (affects number of patterns).

Optimal setting depends on camera/projector resolution and setup.

Parameters
[in]frequenciesNew value for frequencies.
virtual void david::StructuredLightScannerD4Lib::SetResultFiltering ( const ResultFilteringParams params)
virtual

Set the result filtering parameters for SL scans.

Parameters
[in]paramsParameters for result filtering.

Implements david::IStructuredLightScanner.

void david::StructuredLightScannerD4Lib::SetResultFilteringParamsEx ( const ResultFilteringParamsEx params)
virtual void david::StructuredLightScannerD4Lib::SetScreenID ( int  screenID)
virtual

Set the new screen ID.

The value 0 switches the projection off.

Parameters
[in]screenIDID of the screen used for displaying structured light patterns, or 0 for OFF.

Implements david::IStructuredLightScanner.

virtual void david::StructuredLightScannerD4Lib::SetTextureImage ( const uint8_t *  data,
int  width,
int  height,
PixelFormat  pixelFormat 
)
virtual

Set the texture image analog to SetCapturedImage.

Parameters
[in]dataValid pointer to buffer with pixel values. Size of 'data' has to be equal to GetImageSize(width, height, pixelFormat).
[in]widthWidth of texture image.
[in]heightHeight of texture image.
[in]pixelFormatPixel format of captured image.

Implements david::IStructuredLightScanner.

void david::StructuredLightScannerD4Lib::SwitchCameraProperties ( CamPropsUsage  usage)
protected

Switch camera properties.

Parameters
[in]usageSelect camera property usage. See CamPropsUsage.

The documentation for this class was generated from the following file: