Visual Servoing Platform  version 3.3.0 under development (2020-02-17)
vpImageTools Class Reference

#include <visp3/core/vpImageTools.h>

Public Types

enum  vpImageInterpolationType { INTERPOLATION_NEAREST, INTERPOLATION_LINEAR, INTERPOLATION_CUBIC }
 

Public Member Functions

template<class Type >
void createSubImage (const vpImage< Type > &I, unsigned int roi_top, unsigned int roi_left, unsigned int roi_height, unsigned int roi_width, vpImage< Type > &crop)
 
template<class Type >
void createSubImage (const vpImage< Type > &I, const vpRect &roi, vpImage< Type > &crop)
 
template<>
void binarise (vpImage< unsigned char > &I, unsigned char threshold1, unsigned char threshold2, unsigned char value1, unsigned char value2, unsigned char value3, bool useLUT)
 
template<>
void resizeBicubic (const vpImage< vpRGBa > &I, vpImage< vpRGBa > &Ires, unsigned int i, unsigned int j, float u, float v, float xFrac, float yFrac)
 
template<>
void resizeBilinear (const vpImage< vpRGBa > &I, vpImage< vpRGBa > &Ires, unsigned int i, unsigned int j, float u, float v, float xFrac, float yFrac)
 
template<>
void resize (const vpImage< unsigned char > &I, vpImage< unsigned char > &Ires, const vpImageInterpolationType &method, unsigned int)
 
template<>
void resize (const vpImage< vpRGBa > &I, vpImage< vpRGBa > &Ires, const vpImageInterpolationType &method, unsigned int)
 
template<>
void warpLinear (const vpImage< vpRGBa > &src, const vpMatrix &T, vpImage< vpRGBa > &dst, bool affine, bool centerCorner, bool fixedPoint)
 

Static Public Member Functions

template<class Type >
static void binarise (vpImage< Type > &I, Type threshold1, Type threshold2, Type value1, Type value2, Type value3, bool useLUT=true)
 
static void changeLUT (vpImage< unsigned char > &I, unsigned char A, unsigned char newA, unsigned char B, unsigned char newB)
 
template<class Type >
static void crop (const vpImage< Type > &I, double roi_top, double roi_left, unsigned int roi_height, unsigned int roi_width, vpImage< Type > &crop, unsigned int v_scale=1, unsigned int h_scale=1)
 
static void columnMean (const vpImage< double > &I, vpRowVector &result)
 
template<class Type >
static void crop (const vpImage< Type > &I, const vpImagePoint &topLeft, unsigned int roi_height, unsigned int roi_width, vpImage< Type > &crop, unsigned int v_scale=1, unsigned int h_scale=1)
 
template<class Type >
static void crop (const vpImage< Type > &I, const vpRect &roi, vpImage< Type > &crop, unsigned int v_scale=1, unsigned int h_scale=1)
 
template<class Type >
static void crop (const unsigned char *bitmap, unsigned int width, unsigned int height, const vpRect &roi, vpImage< Type > &crop, unsigned int v_scale=1, unsigned int h_scale=1)
 
static void extract (const vpImage< unsigned char > &Src, vpImage< unsigned char > &Dst, const vpRectOriented &r)
 
static void extract (const vpImage< unsigned char > &Src, vpImage< double > &Dst, const vpRectOriented &r)
 
template<class Type >
static void flip (const vpImage< Type > &I, vpImage< Type > &newI)
 
template<class Type >
static void flip (vpImage< Type > &I)
 
static void imageDifference (const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, vpImage< unsigned char > &Idiff)
 
static void imageDifference (const vpImage< vpRGBa > &I1, const vpImage< vpRGBa > &I2, vpImage< vpRGBa > &Idiff)
 
static void imageDifferenceAbsolute (const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, vpImage< unsigned char > &Idiff)
 
static void imageDifferenceAbsolute (const vpImage< double > &I1, const vpImage< double > &I2, vpImage< double > &Idiff)
 
static void imageDifferenceAbsolute (const vpImage< vpRGBa > &I1, const vpImage< vpRGBa > &I2, vpImage< vpRGBa > &Idiff)
 
static void imageAdd (const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, vpImage< unsigned char > &Ires, bool saturate=false)
 
static void imageSubtract (const vpImage< unsigned char > &I1, const vpImage< unsigned char > &I2, vpImage< unsigned char > &Ires, bool saturate=false)
 
static void initUndistortMap (const vpCameraParameters &cam, unsigned int width, unsigned int height, vpArray2D< int > &mapU, vpArray2D< int > &mapV, vpArray2D< float > &mapDu, vpArray2D< float > &mapDv)
 
static double interpolate (const vpImage< unsigned char > &I, const vpImagePoint &point, const vpImageInterpolationType &method=INTERPOLATION_NEAREST)
 
static void integralImage (const vpImage< unsigned char > &I, vpImage< double > &II, vpImage< double > &IIsq)
 
static double normalizedCorrelation (const vpImage< double > &I1, const vpImage< double > &I2, bool useOptimized=true)
 
static void normalize (vpImage< double > &I)
 
static void remap (const vpImage< unsigned char > &I, const vpArray2D< int > &mapU, const vpArray2D< int > &mapV, const vpArray2D< float > &mapDu, const vpArray2D< float > &mapDv, vpImage< unsigned char > &Iundist)
 
static void remap (const vpImage< vpRGBa > &I, const vpArray2D< int > &mapU, const vpArray2D< int > &mapV, const vpArray2D< float > &mapDu, const vpArray2D< float > &mapDv, vpImage< vpRGBa > &Iundist)
 
template<class Type >
static void resize (const vpImage< Type > &I, vpImage< Type > &Ires, unsigned int width, unsigned int height, const vpImageInterpolationType &method=INTERPOLATION_NEAREST, unsigned int nThreads=0)
 
template<class Type >
static void resize (const vpImage< Type > &I, vpImage< Type > &Ires, const vpImageInterpolationType &method=INTERPOLATION_NEAREST, unsigned int nThreads=0)
 
static void templateMatching (const vpImage< unsigned char > &I, const vpImage< unsigned char > &I_tpl, vpImage< double > &I_score, unsigned int step_u, unsigned int step_v, bool useOptimized=true)
 
template<class Type >
static void undistort (const vpImage< Type > &I, const vpCameraParameters &cam, vpImage< Type > &newI, unsigned int nThreads=2)
 
template<class Type >
static void warpImage (const vpImage< Type > &src, const vpMatrix &T, vpImage< Type > &dst, const vpImageInterpolationType &interpolation=INTERPOLATION_NEAREST, bool fixedPointArithmetic=true, bool pixelCenter=false)
 
Deprecated functions
template<class Type >
static vp_deprecated void createSubImage (const vpImage< Type > &I, unsigned int i_sub, unsigned int j_sub, unsigned int nrow_sub, unsigned int ncol_sub, vpImage< Type > &S)
 
template<class Type >
static vp_deprecated void createSubImage (const vpImage< Type > &I, const vpRect &rect, vpImage< Type > &S)
 

Detailed Description

Various image tools; sub-image extraction, modification of the look up table, binarisation...

Definition at line 79 of file vpImageTools.h.

Member Enumeration Documentation

◆ vpImageInterpolationType

Enumerator
INTERPOLATION_NEAREST 

Nearest neighbor interpolation (fastest).

INTERPOLATION_LINEAR 

Bi-linear interpolation.

INTERPOLATION_CUBIC 

Bi-cubic interpolation.

Examples:
testImageResize.cpp.

Definition at line 82 of file vpImageTools.h.

Member Function Documentation

◆ binarise() [1/2]

template<class Type >
void vpImageTools::binarise ( vpImage< Type > &  I,
Type  threshold1,
Type  threshold2,
Type  value1,
Type  value2,
Type  value3,
bool  useLUT = true 
)
inlinestatic

Binarise an image.

  • Pixels whose values are less than threshold1 are set to value1
  • Pixels whose values are greater then or equal to threshold1 and less then or equal to threshold2 are set to value2
  • Pixels whose values are greater than threshold2 are set to value3
Examples:
testConnectedComponents.cpp, testContours.cpp, testFloodFill.cpp, testImageBinarise.cpp, testImageMorphology.cpp, and tutorial-ibvs-4pts-ogre-tracking.cpp.

Definition at line 452 of file vpImageTools.h.

References vpImage< Type >::bitmap, vpImage< Type >::getHeight(), and vpImage< Type >::getWidth().

Referenced by vp::autoThreshold().

◆ binarise() [2/2]

template<>
void vpImageTools::binarise ( vpImage< unsigned char > &  I,
unsigned char  threshold1,
unsigned char  threshold2,
unsigned char  value1,
unsigned char  value2,
unsigned char  value3,
bool  useLUT 
)
inline

Binarise an image.

  • Pixels whose values are less than threshold1 are set to value1
  • Pixels whose values are greater then or equal to threshold1 and less then or equal to threshold2 are set to value2
  • Pixels whose values are greater than threshold2 are set to value3

Definition at line 484 of file vpImageTools.h.

References vpImage< Type >::bitmap, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::performLut().

◆ changeLUT()

void vpImageTools::changeLUT ( vpImage< unsigned char > &  I,
unsigned char  A,
unsigned char  A_star,
unsigned char  B,
unsigned char  B_star 
)
static

Change the look up table (LUT) of an image. Considering pixel gray level values $ l $ in the range $[A, B]$, this method allows to rescale these values in $[A^*, B^*]$ by linear interpolation:

$ \left\{ \begin{array}{ll} l \in ]-\infty, A] \mbox{, } & l = A^* \\ l \in [B, \infty[ \mbox{, } & l = B^* \\ l \in ]A, B[ \mbox{, } & l = A^* + (l-A) * \frac{B^*-A^*}{B-A} \end{array} \right. $

Parameters
I: Image to process.
A: Low gray level value of the range to consider.
A_star: New gray level value $ A^*$ to attribute to pixel who's value was A
B: Height gray level value of the range to consider.
B_star: New gray level value $ B^*$ to attribute to pixel who's value was B
Returns
The modified image.
Exceptions
vpImageException::incorrectInitializationErrorIf $B \leq A$.

As shown in the example below, this method can be used to binarize an image. For an unsigned char image (in the range 0-255), thresholding this image at level 127 can be done by:

#include <visp3/core/vpImage.h>
#include <visp3/core/vpImageTools.h>
#include <visp3/io/vpImageIo.h>
int main()
{
#ifdef _WIN32
std::string filename("C:/temp/ViSP-images/Klimt/Klimt.ppm");
#else
std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
#endif
// Read an image from the disk
vpImageIo::read(I, filename);
// Binarize image I:
// - gray level values less than or equal to 127 are set to 0,
// - gray level values greater than 128 are set to 255
vpImageTools::changeLUT(I, 127, 0, 128, 255);
vpImageIo::write(I, "Klimt.pgm"); // Write the image in a PGM P5 image file format
}

Definition at line 113 of file vpImageTools.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), vpImageException::incorrectInitializationError, and vpERROR_TRACE.

◆ columnMean()

void vpImageTools::columnMean ( const vpImage< double > &  I,
vpRowVector V 
)
static

Compute the column-wise mean intensities.

Parameters
I: The image.
V: The result vector.

Definition at line 631 of file vpImageTools.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpRowVector::resize().

◆ createSubImage() [1/4]

template<class Type >
static vp_deprecated void vpImageTools::createSubImage ( const vpImage< Type > &  I,
unsigned int  i_sub,
unsigned int  j_sub,
unsigned int  nrow_sub,
unsigned int  ncol_sub,
vpImage< Type > &  S 
)
static

◆ createSubImage() [2/4]

template<class Type >
static vp_deprecated void vpImageTools::createSubImage ( const vpImage< Type > &  I,
const vpRect rect,
vpImage< Type > &  S 
)
static

◆ createSubImage() [3/4]

template<class Type >
void vpImageTools::createSubImage ( const vpImage< Type > &  I,
unsigned int  roi_top,
unsigned int  roi_left,
unsigned int  roi_height,
unsigned int  roi_width,
vpImage< Type > &  crop 
)

Crop a region of interest (ROI) in an image.

Deprecated:
This fonction is deprecated. You should rather use crop(const vpImage<Type> &, unsigned int, unsigned int, unsigned int, unsigned int, vpImage<Type> &).
Parameters
I: Input image from which a sub image will be extracted.
roi_top: ROI vertical position of the upper/left corner in the input image.
roi_left: ROI horizontal position of the upper/left corner in the input image.
roi_height: Cropped image height corresponding to the ROI height.
roi_width: Cropped image width corresponding to the ROI height.
crop: Cropped image.
See also
crop(const vpImage<Type> &, unsigned int, unsigned int, unsigned int, unsigned int, vpImage<Type> &)

Definition at line 245 of file vpImageTools.h.

References crop().

◆ createSubImage() [4/4]

template<class Type >
void vpImageTools::createSubImage ( const vpImage< Type > &  I,
const vpRect roi,
vpImage< Type > &  crop 
)

Crop an image region of interest.

Deprecated:
This fonction is deprecated. You should rather use crop(const vpImage<Type> &, const vpRect &, vpImage<Type> &).
Parameters
I: Input image from which a sub image will be extracted.
roi: Region of interest in image I corresponding to the cropped part of the image.
crop: Cropped image.
See also
crop(const vpImage<Type> &, const vpRect &, vpImage<Type> &)

Definition at line 266 of file vpImageTools.h.

References crop().

◆ crop() [1/4]

template<class Type >
void vpImageTools::crop ( const vpImage< Type > &  I,
double  roi_top,
double  roi_left,
unsigned int  roi_height,
unsigned int  roi_width,
vpImage< Type > &  crop,
unsigned int  v_scale = 1,
unsigned int  h_scale = 1 
)
static

Crop a region of interest (ROI) in an image. The ROI coordinates and dimension are defined in the original image.

Setting v_scale and h_scale to values different from 1 allows also to subsample the cropped image.

Parameters
I: Input image from which a sub image will be extracted.
roi_top: ROI vertical position of the upper/left corner in the input image.
roi_left: ROI horizontal position of the upper/left corner in the input image.
roi_height: Cropped image height corresponding to the ROI height.
roi_width: Cropped image width corresponding to the ROI height.
crop: Cropped image.
v_scale[in] : Vertical subsampling factor applied to the ROI.
h_scale[in] : Horizontal subsampling factor applied to the ROI.
See also
crop(const vpImage<Type> &, const vpRect &, vpImage<Type> &)
Examples:
testCrop.cpp, testCropAdvanced.cpp, testImageAddSub.cpp, testImageNormalizedCorrelation.cpp, and testImageTemplateMatching.cpp.

Definition at line 296 of file vpImageTools.h.

References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

Referenced by vpV4l2Grabber::acquire(), createSubImage(), crop(), vpDisplayGTK::displayImageROI(), vpMeNurbs::seekExtremitiesCanny(), and templateMatching().

◆ crop() [2/4]

template<class Type >
void vpImageTools::crop ( const vpImage< Type > &  I,
const vpImagePoint topLeft,
unsigned int  roi_height,
unsigned int  roi_width,
vpImage< Type > &  crop,
unsigned int  v_scale = 1,
unsigned int  h_scale = 1 
)
static

Crop a region of interest (ROI) in an image. The ROI coordinates and dimension are defined in the original image.

Setting v_scale and h_scale to values different from 1 allows also to subsample the cropped image.

Parameters
I: Input image from which a sub image will be extracted.
topLeft: ROI position of the upper/left corner in the input image.
roi_height: Cropped image height corresponding to the ROI height.
roi_width: Cropped image width corresponding to the ROI height.
crop: Cropped image.
v_scale[in] : Vertical subsampling factor applied to the ROI.
h_scale[in] : Horizontal subsampling factor applied to the ROI.
See also
crop(const vpImage<Type> &, const vpRect &, vpImage<Type> &)

Definition at line 352 of file vpImageTools.h.

References crop(), vpImagePoint::get_i(), and vpImagePoint::get_j().

◆ crop() [3/4]

template<class Type >
void vpImageTools::crop ( const vpImage< Type > &  I,
const vpRect roi,
vpImage< Type > &  crop,
unsigned int  v_scale = 1,
unsigned int  h_scale = 1 
)
static

Crop a region of interest (ROI) in an image. The ROI coordinates and dimension are defined in the original image.

Setting v_scale and h_scale to values different from 1 allows also to subsample the cropped image.

Parameters
I: Input image from which a sub image will be extracted.
roi: Region of interest in image I corresponding to the cropped part of the image.
crop: Cropped image.
v_scale[in] : Vertical subsampling factor applied to the ROI.
h_scale[in] : Horizontal subsampling factor applied to the ROI.

Definition at line 376 of file vpImageTools.h.

References crop(), vpRect::getHeight(), vpRect::getLeft(), vpRect::getTop(), and vpRect::getWidth().

◆ crop() [4/4]

template<class Type >
void vpImageTools::crop ( const unsigned char *  bitmap,
unsigned int  width,
unsigned int  height,
const vpRect roi,
vpImage< Type > &  crop,
unsigned int  v_scale = 1,
unsigned int  h_scale = 1 
)
static

Crop a region of interest (ROI) in an image. The ROI coordinates and dimension are defined in the original image.

Setting v_scale and h_scale to values different from 1 allows also to subsample the cropped image.

Parameters
bitmap: Pointer to the input image from which a sub image will be extracted.
width,height: Size of the input image.
roi: Region of interest corresponding to the cropped part of the image.
crop: Cropped image.
v_scale[in] : Vertical subsampling factor applied to the ROI.
h_scale[in] : Horizontal subsampling factor applied to the ROI.

Definition at line 401 of file vpImageTools.h.

References vpRect::getHeight(), vpRect::getLeft(), vpRect::getTop(), vpRect::getWidth(), and vpImage< Type >::resize().

◆ extract() [1/2]

void vpImageTools::extract ( const vpImage< unsigned char > &  Src,
vpImage< unsigned char > &  Dst,
const vpRectOriented r 
)
static

Extract a rectangular region from an image.

Parameters
Src: The source image.
Dst: The resulting image.
r: The rectangle area.

Definition at line 701 of file vpImageTools.cpp.

References vpImagePoint::get_i(), vpImagePoint::get_j(), vpRectOriented::getHeight(), vpRectOriented::getOrientation(), vpRectOriented::getTopLeft(), vpRectOriented::getWidth(), interpolate(), INTERPOLATION_LINEAR, vpImage< Type >::resize(), and vpMath::round().

◆ extract() [2/2]

void vpImageTools::extract ( const vpImage< unsigned char > &  Src,
vpImage< double > &  Dst,
const vpRectOriented r 
)
static

Extract a rectangular region from an image.

Parameters
Src: The source image.
Dst: The resulting image.
r: The rectangle area.

Definition at line 724 of file vpImageTools.cpp.

References vpImagePoint::get_i(), vpImagePoint::get_j(), vpRectOriented::getHeight(), vpRectOriented::getOrientation(), vpRectOriented::getTopLeft(), vpRectOriented::getWidth(), interpolate(), INTERPOLATION_LINEAR, vpImage< Type >::resize(), and vpMath::round().

◆ flip() [1/2]

template<class Type >
void vpImageTools::flip ( const vpImage< Type > &  I,
vpImage< Type > &  newI 
)
static

Flip vertically the input image and give the result in the output image.

Parameters
I: Input image to flip.
newI: Output image which is the flipped input image.

Definition at line 806 of file vpImageTools.h.

References vpImage< Type >::bitmap, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ flip() [2/2]

template<class Type >
void vpImageTools::flip ( vpImage< Type > &  I)
static

Flip vertically the input image.

Parameters
I: Input image which is flipped and modified in output.

The following example shows how to use this function:

#include <visp3/core/vpImage.h>
#include <visp3/core/vpImageTools.h>
#include <visp3/io/vpImageIo.h>
int main()
{
#ifdef _WIN32
std::string filename("C:/temp/ViSP-images/Klimt/Klimt.ppm");
#else
std::string filename("/local/soft/ViSP/ViSP-images/Klimt/Klimt.ppm");
#endif
// Read an image from the disk
vpImageIo::read(I, filename);
// Flip the image
// Write the image in a PGM P5 image file format
vpImageIo::write(I, "Klimt-flip.ppm");
}

Definition at line 850 of file vpImageTools.h.

References vpImage< Type >::bitmap, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ imageAdd()

void vpImageTools::imageAdd ( const vpImage< unsigned char > &  I1,
const vpImage< unsigned char > &  I2,
vpImage< unsigned char > &  Ires,
bool  saturate = false 
)
static

Compute the image addition: $ Ires = I1 + I2 $.

Parameters
I1: The first image.
I2: The second image.
Ires: $ Ires = I1 + I2 $
saturate: If true, saturate the result to [0 ; 255] using vpMath::saturate, otherwise overflow may occur.
Examples:
testImageAddSub.cpp.

Definition at line 378 of file vpImageTools.cpp.

References vpImage< Type >::bitmap, vpCPUFeatures::checkSSE2(), vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

Referenced by vp::fillHoles().

◆ imageDifference() [1/2]

void vpImageTools::imageDifference ( const vpImage< unsigned char > &  I1,
const vpImage< unsigned char > &  I2,
vpImage< unsigned char > &  Idiff 
)
static

Compute the signed difference between the two images I1 and I2 for visualization issue : Idiff = I1-I2

  • pixels with a null difference are set to 128.
  • A negative difference implies a pixel value < 128
  • A positive difference implies a pixel value > 128
Parameters
I1: The first image.
I2: The second image.
Idiff: The result of the difference.
Examples:
photometricVisualServoing.cpp, testImageDifference.cpp, and testUndistortImage.cpp.

Definition at line 150 of file vpImageTools.cpp.

References vpImage< Type >::bitmap, vpCPUFeatures::checkSSSE3(), vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), vpMath::maximum(), vpMath::minimum(), and vpImage< Type >::resize().

◆ imageDifference() [2/2]

void vpImageTools::imageDifference ( const vpImage< vpRGBa > &  I1,
const vpImage< vpRGBa > &  I2,
vpImage< vpRGBa > &  Idiff 
)
static

Compute the signed difference between the two images I1 and I2 RGB components for visualization issue : Idiff = I1-I2. The fourth component named A is not compared. It is set to 0 in the resulting difference image.

  • pixels with a null difference are set to R=128, G=128, B=128.
  • A negative difference implies a pixel R, G, B value < 128
  • A positive difference implies a pixel R, G, B value > 128
Parameters
I1: The first image.
I2: The second image.
Idiff: The result of the difference between RGB components.

Definition at line 220 of file vpImageTools.cpp.

References vpRGBa::A, vpRGBa::B, vpImage< Type >::bitmap, vpCPUFeatures::checkSSSE3(), vpException::dimensionError, vpRGBa::G, vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), vpMath::maximum(), vpMath::minimum(), vpRGBa::R, and vpImage< Type >::resize().

◆ imageDifferenceAbsolute() [1/3]

void vpImageTools::imageDifferenceAbsolute ( const vpImage< unsigned char > &  I1,
const vpImage< unsigned char > &  I2,
vpImage< unsigned char > &  Idiff 
)
static

Compute the difference between the two images I1 and I2

Warning
: This is NOT for visualization If you want to visualize difference images during servo, please use vpImageTools::imageDifference(..,..,..) function.
Parameters
I1: The first image.
I2: The second image.
Idiff: The result of the difference.

Definition at line 294 of file vpImageTools.cpp.

References vpMath::abs(), vpImage< Type >::bitmap, vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ imageDifferenceAbsolute() [2/3]

void vpImageTools::imageDifferenceAbsolute ( const vpImage< double > &  I1,
const vpImage< double > &  I2,
vpImage< double > &  Idiff 
)
static

Compute the difference between the two images I1 and I2.

Parameters
I1: The first image.
I2: The second image.
Idiff: The result of the difference.

Definition at line 318 of file vpImageTools.cpp.

References vpMath::abs(), vpImage< Type >::bitmap, vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ imageDifferenceAbsolute() [3/3]

void vpImageTools::imageDifferenceAbsolute ( const vpImage< vpRGBa > &  I1,
const vpImage< vpRGBa > &  I2,
vpImage< vpRGBa > &  Idiff 
)
static

Compute the difference between the two images I1 and I2 RGB components. The fourth component named A is not compared. It is set to 0 in the resulting difference image.

Warning
: This is NOT for visualization. If you want to visualize difference images during servo, please use vpImageTools::imageDifference(..,..,..) function.
Parameters
I1: The first image.
I2: The second image.
Idiff: The result of the difference between RGB components.

Definition at line 346 of file vpImageTools.cpp.

References vpRGBa::A, vpMath::abs(), vpRGBa::B, vpImage< Type >::bitmap, vpException::dimensionError, vpRGBa::G, vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), vpRGBa::R, and vpImage< Type >::resize().

◆ imageSubtract()

void vpImageTools::imageSubtract ( const vpImage< unsigned char > &  I1,
const vpImage< unsigned char > &  I2,
vpImage< unsigned char > &  Ires,
bool  saturate = false 
)
static

Compute the image addition: $ Ires = I1 - I2 $.

Parameters
I1: The first image.
I2: The second image.
Ires: $ Ires = I1 - I2 $
saturate: If true, saturate the result to [0 ; 255] using vpMath::saturate, otherwise overflow may occur.
Examples:
testImageAddSub.cpp.

Definition at line 420 of file vpImageTools.cpp.

References vpImage< Type >::bitmap, vpCPUFeatures::checkSSE2(), vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

Referenced by vp::fillHoles().

◆ initUndistortMap()

void vpImageTools::initUndistortMap ( const vpCameraParameters cam,
unsigned int  width,
unsigned int  height,
vpArray2D< int > &  mapU,
vpArray2D< int > &  mapV,
vpArray2D< float > &  mapDu,
vpArray2D< float > &  mapDv 
)
static

Compute the undistortion transformation map.

Parameters
cam: Camera intrinsic parameters with distortion coefficients.
width: Image width.
height: Image height.
mapU: 2D array that contains at each coordinate the u-coordinate in the distorted image.
mapV: 2D array that contains at each coordinate the v-coordinate in the distorted image.
mapDu: 2D array that contains at each coordinate the $ \Delta u $ for the interpolation.
mapDv: 2D array that contains at each coordinate the $ \Delta v $ for the interpolation.
Examples:
testUndistortImage.cpp.

Definition at line 466 of file vpImageTools.cpp.

References vpCameraParameters::get_kud(), vpCameraParameters::get_px(), vpCameraParameters::get_py(), vpCameraParameters::get_u0(), vpCameraParameters::get_v0(), and vpArray2D< Type >::resize().

◆ integralImage()

void vpImageTools::integralImage ( const vpImage< unsigned char > &  I,
vpImage< double > &  II,
vpImage< double > &  IIsq 
)
static

Compute the integral images:

$ II(u,v)=\sum_{u^{'}\leq u, v^{'}\leq v}I(u,v) $

$ IIsq(u,v)=\sum_{u^{'}\leq u, v^{'}\leq v}I(u,v)^2 $.

Parameters
I: Input image.
II: Integral image II.
IIsq: Integral image IIsq.
Examples:
testImageTemplateMatching.cpp.

Definition at line 536 of file vpImageTools.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), vpImage< Type >::resize(), and vpMath::sqr().

Referenced by templateMatching().

◆ interpolate()

double vpImageTools::interpolate ( const vpImage< unsigned char > &  I,
const vpImagePoint point,
const vpImageInterpolationType method = INTERPOLATION_NEAREST 
)
static

Get the interpolated value at a given location.

Parameters
I: The image to perform intepolation in.
point: The image point.
method: The interpolation method (only interpolation with vpImageTools::INTERPOLATION_NEAREST and vpImageTools::INTERPOLATION_LINEAR are implemented).

Definition at line 662 of file vpImageTools.cpp.

References vpImagePoint::get_i(), vpImagePoint::get_j(), INTERPOLATION_CUBIC, INTERPOLATION_LINEAR, INTERPOLATION_NEAREST, vpException::notImplementedError, and vpMath::round().

Referenced by extract().

◆ normalize()

void vpImageTools::normalize ( vpImage< double > &  I)
static

Normalize the image intensities.

Parameters
I: The image to normalize.

Definition at line 647 of file vpImageTools.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getSum(), and vpImage< Type >::getWidth().

◆ normalizedCorrelation()

double vpImageTools::normalizedCorrelation ( const vpImage< double > &  I1,
const vpImage< double > &  I2,
bool  useOptimized = true 
)
static

Compute a correlation between 2 images.

Parameters
I1: The first image.
I2: The second image.
useOptimized: Use SSE if true and available.
Examples:
testImageNormalizedCorrelation.cpp.

Definition at line 561 of file vpImageTools.cpp.

References vpImage< Type >::bitmap, vpCPUFeatures::checkSSE2(), vpException::dimensionError, vpImage< Type >::getHeight(), vpImage< Type >::getMeanValue(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), and vpMath::sqr().

Referenced by templateMatching().

◆ remap() [1/2]

void vpImageTools::remap ( const vpImage< unsigned char > &  I,
const vpArray2D< int > &  mapU,
const vpArray2D< int > &  mapV,
const vpArray2D< float > &  mapDu,
const vpArray2D< float > &  mapDv,
vpImage< unsigned char > &  Iundist 
)
static

Apply the transformation map to the image.

Parameters
I: Input grayscale image.
mapU: Map that contains at each destination coordinate the u-coordinate in the source image.
mapV: Map that contains at each destination coordinate the v-coordinate in the source image.
mapDu: Map that contains at each destination coordinate the $ \Delta u $ for the interpolation.
mapDv: Map that contains at each destination coordinate the $ \Delta v $ for the interpolation.
Iundist: Output transformed grayscale image.
Examples:
testUndistortImage.cpp.

Definition at line 939 of file vpImageTools.cpp.

References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ remap() [2/2]

void vpImageTools::remap ( const vpImage< vpRGBa > &  I,
const vpArray2D< int > &  mapU,
const vpArray2D< int > &  mapV,
const vpArray2D< float > &  mapDu,
const vpArray2D< float > &  mapDv,
vpImage< vpRGBa > &  Iundist 
)
static

Apply the transformation map to the image.

Parameters
I: Input color image.
mapU: Map that contains at each destination coordinate the u-coordinate in the source image.
mapV: Map that contains at each destination coordinate the v-coordinate in the source image.
mapDu: Map that contains at each destination coordinate the $ \Delta u $ for the interpolation.
mapDv: Map that contains at each destination coordinate the $ \Delta v $ for the interpolation.
Iundist: Output transformed color image.

Definition at line 982 of file vpImageTools.cpp.

References vpMath::abs(), vpCPUFeatures::checkSSE2(), vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and vpImage< Type >::resize().

◆ resize() [1/4]

template<class Type >
void vpImageTools::resize ( const vpImage< Type > &  I,
vpImage< Type > &  Ires,
unsigned int  width,
unsigned int  height,
const vpImageInterpolationType method = INTERPOLATION_NEAREST,
unsigned int  nThreads = 0 
)
static

Resize the image using one interpolation method (by default it uses the nearest neighbor interpolation).

Parameters
I: Input image.
Ires: Output image resized to width, height.
width: Resized width.
height: Resized height.
method: Interpolation method.
nThreads: Number of threads to use if OpenMP is available.
Warning
The input I and output Ires images must be different.
Examples:
testImageResize.cpp, and testUndistortImage.cpp.

Definition at line 1048 of file vpImageTools.h.

References vpImage< Type >::resize().

◆ resize() [2/4]

template<class Type >
void vpImageTools::resize ( const vpImage< Type > &  I,
vpImage< Type > &  Ires,
const vpImageInterpolationType method = INTERPOLATION_NEAREST,
unsigned int  nThreads = 0 
)
static

Resize the image using one interpolation method (by default it uses the nearest neighbor interpolation).

Parameters
I: Input image.
Ires: Output image resized (you have to init the image Ires at the desired size).
method: Interpolation method.
nThreads: Number of threads to use if OpenMP is available.
Warning
The input I and output Ires images must be different.

Definition at line 1070 of file vpImageTools.h.

References vpImage< Type >::getHeight(), and vpImage< Type >::getWidth().

◆ resize() [3/4]

template<>
void vpImageTools::resize ( const vpImage< unsigned char > &  I,
vpImage< unsigned char > &  Ires,
const vpImageInterpolationType method,
unsigned  int 
)
inline

◆ resize() [4/4]

template<>
void vpImageTools::resize ( const vpImage< vpRGBa > &  I,
vpImage< vpRGBa > &  Ires,
const vpImageInterpolationType method,
unsigned  int 
)
inline

◆ resizeBicubic()

template<>
void vpImageTools::resizeBicubic ( const vpImage< vpRGBa > &  I,
vpImage< vpRGBa > &  Ires,
unsigned int  i,
unsigned int  j,
float  u,
float  v,
float  xFrac,
float  yFrac 
)
inline

Definition at line 927 of file vpImageTools.h.

References vpImage< Type >::getHeight(), and vpImage< Type >::getWidth().

◆ resizeBilinear()

template<>
void vpImageTools::resizeBilinear ( const vpImage< vpRGBa > &  I,
vpImage< vpRGBa > &  Ires,
unsigned int  i,
unsigned int  j,
float  u,
float  v,
float  xFrac,
float  yFrac 
)
inline

Definition at line 1001 of file vpImageTools.h.

References vpImage< Type >::getHeight(), and vpImage< Type >::getWidth().

◆ templateMatching()

void vpImageTools::templateMatching ( const vpImage< unsigned char > &  I,
const vpImage< unsigned char > &  I_tpl,
vpImage< double > &  I_score,
unsigned int  step_u,
unsigned int  step_v,
bool  useOptimized = true 
)
static

Match a template image into another image using zero-mean normalized cross-correlation:

$\frac{\sum_{u^{'},v^{'}} (I(u+u^{'},v+v^{'})-\bar{I}_{u^{'},v^{'}}) (T(u^{'},v^{'})-\bar{T}_{u^{'},v^{'}})}{\sqrt{\sum_{u^{'},v^{'}} (I(u+u^{'},v+v^{'})-\bar{I}_{u^{'},v^{'}})^2 \sum_{u^{'},v^{'}}(T(u^{'},v^{'})-\bar{T}_{u^{'},v^{'}})^2}}$

Parameters
I: Input image.
I_tpl: Template image.
I_score: Output template matching score.
step_u: Step in u-direction to speed-up the computation.
step_v: Step in v-direction to speed-up the computation.
useOptimized: Use optimized version (SSE, OpenMP, integral images, ...) if true and available.
Examples:
testImageTemplateMatching.cpp.

Definition at line 754 of file vpImageTools.cpp.

References vpImage< Type >::bitmap, vpCPUFeatures::checkSSE2(), vpImageConvert::convert(), crop(), vpImage< Type >::getHeight(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), integralImage(), normalizedCorrelation(), vpImage< Type >::resize(), and vpMath::sqr().

◆ undistort()

template<class Type >
void vpImageTools::undistort ( const vpImage< Type > &  I,
const vpCameraParameters cam,
vpImage< Type > &  undistI,
unsigned int  nThreads = 2 
)
static

Undistort an image

Parameters
I: Input image to undistort.
cam: Parameters of the camera causing distortion.
undistI: Undistorted output image. The size of this image will be the same than the input image I. If the distortion parameter $K_d$ is null (see cam.get_kd_mp()), undistI is just a copy of I.
nThreads: Number of threads to use if pthreads library is available.
Warning
This function works only with Types authorizing "+,-, multiplication by a scalar" operators.
This function is time consuming :
  • On "Rhea"(Intel Core 2 Extreme X6800 2.93GHz, 2Go RAM) or "Charon"(Intel Xeon 3 GHz, 2Go RAM) : ~8 ms for a 640x480 image.
Note
If you want to undistort multiple images, you should call vpImageTools::initUndistortMap() once and then vpImageTools::remap() to undistort the images. This will be less time consuming.
See also
initUndistortMap, remap
Examples:
testUndistortImage.cpp, and tutorial-undistort.cpp.

Definition at line 641 of file vpImageTools.h.

References vpImage< Type >::bitmap, vpCameraParameters::get_kud(), vpCameraParameters::get_px(), vpCameraParameters::get_py(), vpCameraParameters::get_u0(), vpCameraParameters::get_v0(), vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), vpImage< Type >::resize(), and vpMath::sqr().

◆ warpImage()

template<class Type >
void vpImageTools::warpImage ( const vpImage< Type > &  src,
const vpMatrix T,
vpImage< Type > &  dst,
const vpImageInterpolationType interpolation = INTERPOLATION_NEAREST,
bool  fixedPointArithmetic = true,
bool  pixelCenter = false 
)
static

Apply a warping (affine or perspective) transformation to an image.

Parameters
src: Input image.
T: Transformation / warping matrix, a 2x3 matrix for an affine transformation or a 3x3 matrix for a perspective transformation (homography).
dst: Output image, if empty it will be of the same size than src and zero-initialized.
interpolation: Interpolation method (only INTERPOLATION_NEAREST and INTERPOLATION_LINEAR are accepted, if INTERPOLATION_CUBIC is passed, INTERPOLATION_NEAREST will be used instead).
fixedPointArithmetic: If true and if pixelCenter is false, fixed-point arithmetic is used if possible. Otherwise (e.g. the input image is too big) it fallbacks to the default implementation.
pixelCenter: If true, pixel coordinates are at (0.5, 0.5), otherwise at (0,0). Fixed-point arithmetic cannot be used with pixelCenter option.
Examples:
testImageWarp.cpp.

Definition at line 1326 of file vpImageTools.h.

References vpArray2D< Type >::getCols(), vpImage< Type >::getHeight(), vpArray2D< Type >::getRows(), vpImage< Type >::getSize(), vpImage< Type >::getWidth(), vpMatrix::inverseByLU(), vpMath::nul(), vpImage< Type >::resize(), and vpMath::round().

◆ warpLinear()

template<>
void vpImageTools::warpLinear ( const vpImage< vpRGBa > &  src,
const vpMatrix T,
vpImage< vpRGBa > &  dst,
bool  affine,
bool  centerCorner,
bool  fixedPoint 
)
inline