SurgSim::Devices Namespace Reference

## Namespaces

| Internal
| LabJack
| A collection of checksum functions specifically tailored for the labjackusb driver.

## Classes

class | BitSetBuffer
| A bit set corresponding to a contiguous memory buffer. More...
class | BoolToScalar
| Maps the on and off state of two boolean values to the increase and decrease of a scalar field, this for example enables the driving on a scalar value through two buttons on a device, no change occurs when both booleans are true at the same time. More...
class | DeviceFilter
| A device filter can be connected between a device and the InputConsumerInterface (e.g., InputComponent) and/or the OutputProducerInterface (e.g., OutputComponent), and can alter the data being passed from/to the device. More...
class | FileDescriptor
| A wrapper for an UNIX-style integer file descriptor. More...
class | FileHandle
| A wrapper for an Windows-style HANDLE file descriptor. More...
class | FilteredDevice
| A DeviceInterface connected in series with one or more DeviceFilters. Useful for serialization. More...
class | ForceScale
| An output device filter that scales forces and/or torques. More...
class | IdentityPoseDevice
| A class implementing the identity pose device, which is a pretend device that doesn't move. More...
class | InputDeviceHandle
| Access to an input/HID device using the Input API in Linux. More...
class | KeyboardDevice
| A class implementing the communication with a keyboard. More...
class | KeyboardScaffold
| A class that implements the behavior of KeyboardDevice objects. More...
class | LabJackDevice
| A class implementing the communication with a LabJack data acquisition (DAQ) device. More...
class | LabJackScaffold
| A class that implements the behavior of LabJackDevice objects. More...
class | LabJackThread
| A class implementing the thread context for communicating with LabJack devices. More...
class | LeapDevice
| A class implementing the communication with one hand tracked by Leap Motion camera. More...
class | LeapScaffold
| A class that manages Leap devices. More...
class | MouseDevice
| A class implementing the communication with a mouse. More...
class | MouseScaffold
| A class that implements the behavior of MouseDevice objects. More...
class | MultiAxisDevice
| A class implementing the communication with a multi-axis controller input device, for example a 3DConnexion SpaceNavigator. More...
class | NimbleDevice
| A class implementing the communication with the Nimble server. More...
class | NimbleScaffold
| A class that manages Nimble devices. More...
class | NovintDevice
| A class implementing the communication with a Novint Falcon device. More...
class | NovintScaffold
| A class that manages Novint Falcon devices. More...
class | OculusDevice
| A class implementing the communication with Oculus Rift DK2. More...
class | OculusDisplaySettings
| A customized osg::DisplaySettings, to be used with Oculus device. More...
class | OculusScaffold
| A class that manages Oculus Rift DK2 devices. More...
class | OculusView
| OculusView is a customization of SurgSim::Graphics::OsgView with projection matrices pulled from the Oculus device. More...
class | OpenNIDevice
| A class implementing the communication with one OpenNI compatible depth camera. More...
class | OpenNIScaffold
| A class that manages OpenNI devices. More...
class | OsgKeyboardHandler
class | OsgMouseHandler
class | PhantomDevice
| A class implementing the communication with a SensAble/Geomagic PHANTOM device. More...
class | PhantomScaffold
| A class that manages Sensable PHANTOM devices. More...
class | PoseIntegrator
| A device filter that integrates the pose, turning a relative device into an absolute one. More...
class | PoseTransform
| A device filter that transforms the input pose. More...
class | RawMultiAxisDevice
| A class implementing the communication with a multi-axis controller input device, for example a 3DConnexion SpaceNavigator. More...
class | RawMultiAxisScaffold
| A class that implements the behavior of RawMultiAxisDevice objects. More...
class | RawMultiAxisThread
| A class implementing the thread context for sampling RawMultiAxis devices. More...
class | RecordPose
| An input device filter that record the input pose along with the relative time. More...
class | ReplayPoseDevice
| A class implementing the replay pose device, which is a pretend device that replays a recorded motion from a file. More...
class | ReplayPoseScaffold
class | SixenseDevice
| A class implementing the communication with one Sixense controller, for example one of the two on the Razer Hydra. More...
class | SixenseScaffold
| A class that manages Sixense devices, such as the Razer Hydra. More...
class | SixenseThread
| A class implementing the thread context for sampling Sixense devices. More...
class | SystemInputDeviceHandle
| A wrapper for system-dependent access to an input/HID device. More...
class | TrackIRDevice
| A class implementing the communication with Natural Point TrackIR camera. More...
class | TrackIRScaffold
| A class that manages Natural Point TRACKIR devices. More...
class | TrackIRThread
| A class implementing the thread context for sampling TrackIR devices. More...
class | WdkHidDeviceHandle
| Access to an input/HID device using the HID API from the Windows Driver Kit. More...

## Enumerations

enum

KeyCode {
NONE = -1, KEY_SPACE = 0x20, KEY_0 = '0', KEY_1 = '1',
KEY_2 = '2', KEY_3 = '3', KEY_4 = '4', KEY_5 = '5',
KEY_6 = '6', KEY_7 = '7', KEY_8 = '8', KEY_9 = '9',
KEY_A = 'a', KEY_B = 'b', KEY_C = 'c', KEY_D = 'd',
KEY_E = 'e', KEY_F = 'f', KEY_G = 'g', KEY_H = 'h',
KEY_I = 'i', KEY_J = 'j', KEY_K = 'k', KEY_L = 'l',
KEY_M = 'm', KEY_N = 'n', KEY_O = 'o', KEY_P = 'p',
KEY_Q = 'q', KEY_R = 'r', KEY_S = 's', KEY_T = 't',
KEY_U = 'u', KEY_V = 'v', KEY_W = 'w', KEY_X = 'x',
KEY_Y = 'y', KEY_Z = 'z', KEY_EXCLAIM = 0x21, KEY_QUOTEDBL = 0x22,
KEY_HASH = 0x23, KEY_DOLLAR = 0x24, KEY_AMPERSAND = 0x26, KEY_QUOTE = 0x27,
KEY_LEFTPAREN = 0x28, KEY_RIGHTPAREN = 0x29, KEY_ASTERISK = 0x2A, KEY_PLUS = 0x2B,
KEY_COMMA = 0x2C, KEY_MINUS = 0x2D, KEY_PERIOD = 0x2E, KEY_SLASH = 0x2F,
KEY_COLON = 0x3A, KEY_SEMICOLON = 0x3B, KEY_LESS = 0x3C, KEY_EQUALS = 0x3D,
KEY_GREATER = 0x3E, KEY_QUESTION = 0x3F, KEY_AT = 0x40, KEY_LEFTBRACKET = 0x5B,
KEY_BACKSLASH = 0x5C, KEY_RIGHTBRACKET = 0x5D, KEY_CARET = 0x5E, KEY_UNDERSCORE = 0x5F,
KEY_BACKQUOTE = 0x60, KEY_BACKSPACE = 0xFF08, KEY_TAB = 0xFF09, KEY_LINEFEED = 0xFF0A,
KEY_CLEAR = 0xFF0B, KEY_RETURN = 0xFF0D, KEY_PAUSE = 0xFF13, KEY_SCROLL_LOCK = 0xFF14,
KEY_SYS_REQ = 0xFF15, KEY_ESCAPE = 0xFF1B, KEY_DELETE = 0xFFFF, KEY_HOME = 0xFF50,
KEY_LEFT = 0xFF51, KEY_UP = 0xFF52, KEY_RIGHT = 0xFF53, KEY_DOWN = 0xFF54,
KEY_PRIOR = 0xFF55, KEY_PAGE_UP = 0xFF55, KEY_NEXT = 0xFF56, KEY_PAGE_DOWN = 0xFF56,
KEY_END = 0xFF57, KEY_BEGIN = 0xFF58, KEY_SELECT = 0xFF60, KEY_PRINT = 0xFF61,
KEY_EXECUTE = 0xFF62, KEY_INSERT = 0xFF63, KEY_UNDO = 0xFF65, KEY_REDO = 0xFF66,
KEY_MENU = 0xFF67, KEY_FIND = 0xFF68, KEY_CANCEL = 0xFF69, KEY_HELP = 0xFF6A,
KEY_BREAK = 0xFF6B, KEY_MODE_SWITCH = 0xFF7E, KEY_SCRIPT_SWITCH = 0xFF7E, KEY_NUM_LOCK = 0xFF7F,
KEY_KP_SPACE = 0xFF80, KEY_KP_TAB = 0xFF89, KEY_KP_ENTER = 0xFF8D, KEY_KP_F1 = 0xFF91,
KEY_KP_F2 = 0xFF92, KEY_KP_F3 = 0xFF93, KEY_KP_F4 = 0xFF94, KEY_KP_HOME = 0xFF95,
KEY_KP_LEFT = 0xFF96, KEY_KP_UP = 0xFF97, KEY_KP_RIGHT = 0xFF98, KEY_KP_DOWN = 0xFF99,
KEY_KP_PRIOR = 0xFF9A, KEY_KP_PAGE_UP = 0xFF9A, KEY_KP_NEXT = 0xFF9B, KEY_KP_PAGE_DOWN = 0xFF9B,
KEY_KP_END = 0xFF9C, KEY_KP_BEGIN = 0xFF9D, KEY_KP_INSERT = 0xFF9E, KEY_KP_DELETE = 0xFF9F,
KEY_KP_EQUAL = 0xFFBD, KEY_KP_MULTIPLY = 0xFFAA, KEY_KP_ADD = 0xFFAB, KEY_KP_SEPARATOR = 0xFFAC,
KEY_KP_SUBTRACT = 0xFFAD, KEY_KP_DECIMAL = 0xFFAE, KEY_KP_DIVIDE = 0xFFAF, KEY_KP_0 = 0xFFB0,
KEY_KP_1 = 0xFFB1, KEY_KP_2 = 0xFFB2, KEY_KP_3 = 0xFFB3, KEY_KP_4 = 0xFFB4,
KEY_KP_5 = 0xFFB5, KEY_KP_6 = 0xFFB6, KEY_KP_7 = 0xFFB7, KEY_KP_8 = 0xFFB8,
KEY_KP_9 = 0xFFB9, KEY_F1 = 0xFFBE, KEY_F2 = 0xFFBF, KEY_F3 = 0xFFC0,
KEY_F4 = 0xFFC1, KEY_F5 = 0xFFC2, KEY_F6 = 0xFFC3, KEY_F7 = 0xFFC4,
KEY_F8 = 0xFFC5, KEY_F9 = 0xFFC6, KEY_F10 = 0xFFC7, KEY_F11 = 0xFFC8,
KEY_F12 = 0xFFC9, KEY_F13 = 0xFFCA, KEY_F14 = 0xFFCB, KEY_F15 = 0xFFCC,
KEY_F16 = 0xFFCD, KEY_F17 = 0xFFCE, KEY_F18 = 0xFFCF, KEY_F19 = 0xFFD0,
KEY_F20 = 0xFFD1, KEY_F21 = 0xFFD2, KEY_F22 = 0xFFD3, KEY_F23 = 0xFFD4,
KEY_F24 = 0xFFD5, KEY_F25 = 0xFFD6, KEY_F26 = 0xFFD7, KEY_F27 = 0xFFD8,
KEY_F28 = 0xFFD9, KEY_F29 = 0xFFDA, KEY_F30 = 0xFFDB, KEY_F31 = 0xFFDC,
KEY_F32 = 0xFFDD, KEY_F33 = 0xFFDE, KEY_F34 = 0xFFDF, KEY_F35 = 0xFFE0,
KEY_SHIFT_L = 0xFFE1, KEY_SHIFT_R = 0xFFE2, KEY_CONTROL_L = 0xFFE3, KEY_CONTROL_R = 0xFFE4,
KEY_CAPS_LOCK = 0xFFE5, KEY_SHIFT_LOCK = 0xFFE6, KEY_META_L = 0xFFE7, KEY_META_R = 0xFFE8,
KEY_ALT_L = 0xFFE9, KEY_ALT_R = 0xFFEA, KEY_SUPER_L = 0xFFEB, KEY_SUPER_R = 0xFFEC,
KEY_HYPER_L = 0xFFED, KEY_HYPER_R = 0xFFEE
}

enum

ModKeyMask {
MODKEY_NONE = 0, MODKEY_LEFT_SHIFT = 0x0001, MODKEY_RIGHT_SHIFT = 0x0002, MODKEY_LEFT_CTRL = 0x0004,
MODKEY_RIGHT_CTRL = 0x0008, MODKEY_LEFT_ALT = 0x0010, MODKEY_RIGHT_ALT = 0x0020, MODKEY_LEFT_META = 0x0040,
MODKEY_RIGHT_META = 0x0080, MODKEY_LEFT_SUPER = 0x0100, MODKEY_RIGHT_SUPER = 0x0200, MODKEY_LEFT_HYPER = 0x0400,
MODKEY_RIGHT_HYPER = 0x0800, MODKEY_NUM_LOCK = 0x1000, MODKEY_CAPS_LOCK = 0x2000, MODKEY_CTRL = (MODKEY_LEFT_CTRL|MODKEY_RIGHT_CTRL),
MODKEY_SHIFT = (MODKEY_LEFT_SHIFT|MODKEY_RIGHT_SHIFT), MODKEY_ALT = (MODKEY_LEFT_ALT|MODKEY_RIGHT_ALT), MODKEY_META = (MODKEY_LEFT_META|MODKEY_RIGHT_META), MODKEY_SUPER = (MODKEY_LEFT_SUPER|MODKEY_RIGHT_SUPER),
MODKEY_HYPER = (MODKEY_LEFT_HYPER|MODKEY_RIGHT_HYPER), MODKEY_CAPS_SHIFT_L = (MODKEY_CAPS_LOCK|MODKEY_LEFT_SHIFT), MODKEY_CAPS_SHIFT_R = (MODKEY_CAPS_LOCK|MODKEY_RIGHT_SHIFT), MODKEY_CAPS_CONTROL_L = (MODKEY_CAPS_LOCK|MODKEY_LEFT_CTRL),
MODKEY_CAPS_CONTROL_R = (MODKEY_CAPS_LOCK|MODKEY_RIGHT_CTRL), MODKEY_CAPS_ALT_L = (MODKEY_CAPS_LOCK|MODKEY_LEFT_ALT), MODKEY_CAPS_ALT_R = (MODKEY_CAPS_LOCK|MODKEY_RIGHT_ALT)
}

enum | UsagePageConstants { DEV_USAGE_PAGE_GENERIC_DESKTOP = 0x01 }
enum | UsageConstants { DEV_USAGE_ID_MOUSE = 0x02, DEV_USAGE_ID_JOYSTICK = 0x04, DEV_USAGE_ID_GAME_PAD = 0x05, DEV_USAGE_ID_KEYBOARD = 0x06, DEV_USAGE_ID_KEYPAD = 0x07, DEV_USAGE_ID_MULTI_AXIS_CONTROLLER = 0x08 }

## Functions

std::shared_ptr< DeviceInterface > | createDevice (const std::vector< std::string > &classNames, const std::string &name)
| Attempts to create and initialize a device from a list of devices to try. More...
std::shared_ptr< Input::DeviceInterface > | createDevice (const std::string &className, const std::string &name)
| Attempts to create and initialize a device. More...
std::shared_ptr< DeviceInterface > | loadDevice (const std::string &fileName)
| Loads a single device from the file, the first device that successfully initializes. More...
DataStructures::DataGroup::ImageType | undistortLeapImage (const DataStructures::DataGroup::ImageType &image, const DataStructures::DataGroup::ImageType &distortion)
| Correct an infrared image from the LeapDevice, given its distortion callibration map. More...
std::unique_ptr< SystemInputDeviceHandle > | createInputDeviceHandle (const std::string &path, std::shared_ptr< SurgSim::Framework::Logger > logger)
| Opens the given path and creates an access wrapper for the device. More...
std::vector< std::string > | enumerateInputDevicePaths (SurgSim::Framework::Logger *logger)
| Enumerates input devices. More...

## Enumeration Type Documentation

## KeyCode

enum SurgSim::Devices::KeyCode

Enumerator
NONE |
KEY_SPACE |
KEY_0 |
KEY_1 |
KEY_2 |
KEY_3 |
KEY_4 |
KEY_5 |
KEY_6 |
KEY_7 |
KEY_8 |
KEY_9 |
KEY_A |
KEY_B |
KEY_C |
KEY_D |
KEY_E |
KEY_F |
KEY_G |
KEY_H |
KEY_I |
KEY_J |
KEY_K |
KEY_L |
KEY_M |
KEY_N |
KEY_O |
KEY_P |
KEY_Q |
KEY_R |
KEY_S |
KEY_T |
KEY_U |
KEY_V |
KEY_W |
KEY_X |
KEY_Y |
KEY_Z |
KEY_EXCLAIM |
KEY_QUOTEDBL |
KEY_HASH |
KEY_DOLLAR |
KEY_AMPERSAND |
KEY_QUOTE |
KEY_LEFTPAREN |
KEY_RIGHTPAREN |
KEY_ASTERISK |
KEY_PLUS |
KEY_COMMA |
KEY_MINUS |
KEY_PERIOD |
KEY_SLASH |
KEY_COLON |
KEY_SEMICOLON |
KEY_LESS |
KEY_EQUALS |
KEY_GREATER |
KEY_QUESTION |
KEY_AT |
KEY_LEFTBRACKET |
KEY_BACKSLASH |
KEY_RIGHTBRACKET |
KEY_CARET |
KEY_UNDERSCORE |
KEY_BACKQUOTE |
KEY_BACKSPACE |
KEY_TAB |
KEY_LINEFEED |
KEY_CLEAR |
KEY_RETURN |
KEY_PAUSE |
KEY_SCROLL_LOCK |
KEY_SYS_REQ |
KEY_ESCAPE |
KEY_DELETE |
KEY_HOME |
KEY_LEFT |
KEY_UP |
KEY_RIGHT |
KEY_DOWN |
KEY_PRIOR |
KEY_PAGE_UP |
KEY_NEXT |
KEY_PAGE_DOWN |
KEY_END |
KEY_BEGIN |
KEY_SELECT |
KEY_PRINT |
KEY_EXECUTE |
KEY_INSERT |
KEY_UNDO |
KEY_REDO |
KEY_MENU |
KEY_FIND |
KEY_CANCEL |
KEY_HELP |
KEY_BREAK |
KEY_MODE_SWITCH |
KEY_SCRIPT_SWITCH |
KEY_NUM_LOCK |
KEY_KP_SPACE |
KEY_KP_TAB |
KEY_KP_ENTER |
KEY_KP_F1 |
KEY_KP_F2 |
KEY_KP_F3 |
KEY_KP_F4 |
KEY_KP_HOME |
KEY_KP_LEFT |
KEY_KP_UP |
KEY_KP_RIGHT |
KEY_KP_DOWN |
KEY_KP_PRIOR |
KEY_KP_PAGE_UP |
KEY_KP_NEXT |
KEY_KP_PAGE_DOWN |
KEY_KP_END |
KEY_KP_BEGIN |
KEY_KP_INSERT |
KEY_KP_DELETE |
KEY_KP_EQUAL |
KEY_KP_MULTIPLY |
KEY_KP_ADD |
KEY_KP_SEPARATOR |
KEY_KP_SUBTRACT |
KEY_KP_DECIMAL |
KEY_KP_DIVIDE |
KEY_KP_0 |
KEY_KP_1 |
KEY_KP_2 |
KEY_KP_3 |
KEY_KP_4 |
KEY_KP_5 |
KEY_KP_6 |
KEY_KP_7 |
KEY_KP_8 |
KEY_KP_9 |
KEY_F1 |
KEY_F2 |
KEY_F3 |
KEY_F4 |
KEY_F5 |
KEY_F6 |
KEY_F7 |
KEY_F8 |
KEY_F9 |
KEY_F10 |
KEY_F11 |
KEY_F12 |
KEY_F13 |
KEY_F14 |
KEY_F15 |
KEY_F16 |
KEY_F17 |
KEY_F18 |
KEY_F19 |
KEY_F20 |
KEY_F21 |
KEY_F22 |
KEY_F23 |
KEY_F24 |
KEY_F25 |
KEY_F26 |
KEY_F27 |
KEY_F28 |
KEY_F29 |
KEY_F30 |
KEY_F31 |
KEY_F32 |
KEY_F33 |
KEY_F34 |
KEY_F35 |
KEY_SHIFT_L |
KEY_SHIFT_R |
KEY_CONTROL_L |
KEY_CONTROL_R |
KEY_CAPS_LOCK |
KEY_SHIFT_LOCK |
KEY_META_L |
KEY_META_R |
KEY_ALT_L |
KEY_ALT_R |
KEY_SUPER_L |
KEY_SUPER_R |
KEY_HYPER_L |
KEY_HYPER_R |

## ModKeyMask

enum SurgSim::Devices::ModKeyMask

Enumerator
MODKEY_NONE |
MODKEY_LEFT_SHIFT |
MODKEY_RIGHT_SHIFT |
MODKEY_LEFT_CTRL |
MODKEY_RIGHT_CTRL |
MODKEY_LEFT_ALT |
MODKEY_RIGHT_ALT |
MODKEY_LEFT_META |
MODKEY_RIGHT_META |
MODKEY_LEFT_SUPER |
MODKEY_RIGHT_SUPER |
MODKEY_LEFT_HYPER |
MODKEY_RIGHT_HYPER |
MODKEY_NUM_LOCK |
MODKEY_CAPS_LOCK |
MODKEY_CTRL |
MODKEY_SHIFT |
MODKEY_ALT |
MODKEY_META |
MODKEY_SUPER |
MODKEY_HYPER |
MODKEY_CAPS_SHIFT_L |
MODKEY_CAPS_SHIFT_R |
MODKEY_CAPS_CONTROL_L |
MODKEY_CAPS_CONTROL_R |
MODKEY_CAPS_ALT_L |
MODKEY_CAPS_ALT_R |

## UsageConstants

enum SurgSim::Devices::UsageConstants

Enumerator
DEV_USAGE_ID_MOUSE |
DEV_USAGE_ID_JOYSTICK |
DEV_USAGE_ID_GAME_PAD |
DEV_USAGE_ID_KEYBOARD |
DEV_USAGE_ID_KEYPAD |
DEV_USAGE_ID_MULTI_AXIS_CONTROLLER |

## UsagePageConstants

enum SurgSim::Devices::UsagePageConstants

Enumerator
DEV_USAGE_PAGE_GENERIC_DESKTOP |

## Function Documentation

## createDevice() [1/2]

std::shared_ptr< Input::DeviceInterface > SurgSim::Devices::createDevice | ( | const std::vector< std::string > & | classNames,
|  | const std::string & | name
| ) |  |

Attempts to create and initialize a device from a list of devices to try.

Parameters

  classNames | The fully-qualified device class names to try. The elements will be tried in order, front to back.
  name | The name to be given to the created device

Returns
  An initialized device or nullptr if no device was available.

## createDevice() [2/2]

std::shared_ptr< Input::DeviceInterface > SurgSim::Devices::createDevice | ( | const std::string & | className,
|  | const std::string & | name
| ) |  |

Attempts to create and initialize a device.

Parameters

  className | The fully-qualified device class name to try.
  name | The name to be given to the created device

Returns
  An initialized device or nullptr if no device was available.

## createInputDeviceHandle()

std::unique_ptr< SystemInputDeviceHandle > SurgSim::Devices::createInputDeviceHandle | ( | const std::string & | path,
|  | std::shared_ptr< SurgSim::Framework::Logger > | logger
| ) |  |

Opens the given path and creates an access wrapper for the device.

Parameters

  path | Full pathname for the device.
  logger | The logger to be used by the device.

Returns
  The created device object, or an empty unique_ptr on failure.

## enumerateInputDevicePaths()

std::vector< std::string > SurgSim::Devices::enumerateInputDevicePaths | ( | SurgSim::Framework::Logger * | logger | ) |

Enumerates input devices.

Parameters

  logger | The logger to be used during enumeration.

Returns
  A list of device paths.

## loadDevice()

std::shared_ptr< Input::DeviceInterface > SurgSim::Devices::loadDevice | ( | const std::string & | fileName | ) |

Loads a single device from the file, the first device that successfully initializes.

The file format should be just a list of DeviceInterfaces

- SurgSim::Devices::MultiAxisDevice:
Name: element1
- SurgSim::Devices::IdentityPoseDevice:
Name: element1

Parameters

  fileName | the filename of the devices to be loaded, needs to be found

Returns
  an initialized device, or nullptr if no device could be created and initialized

Exceptions

  If | the file cannot be found or is an invalid file

## undistortLeapImage()

DataStructures::DataGroup::ImageType SurgSim::Devices::undistortLeapImage | ( | const DataStructures::DataGroup::ImageType & | image,
|  | const DataStructures::DataGroup::ImageType & | distortion
| ) |  |

Correct an infrared image from the LeapDevice, given its distortion callibration map.

Parameters

  image | The distorted infrared image
  distortion | The distortion callibration map

Returns
  The corrected infrared image