LTI-Lib latest version v1.9 - last update 10 Apr 2010

Examples

Loading and processing an image in a file

  // Example: Using the ltilib!

  #include <iostream>
  #include <cstdio>
  #include <list>
  #include <cmath>

  #include "ltiVector.h"
  #include "ltiMatrix.h"
  #include "ltiLogarithm.h"

  #include "ltiTimer.h"

  #include "ltiBMPFunctor.h"
  #include "ltiDownsampling.h"
  #include "ltiConvolution.h"
  #include "ltiGaussKernels.h"

  #include "ltiSplitImg.h"
  #include "ltiMergeChnl.h"
        
  using std::cout;
  using std::endl;

  ...

  void testfunction() {  

------------------------ simple matrix operations ------------------------

  cout << "Testing matrix operations and constructor...";

  // data to be used by a matrix
  double mdata[15] = { 1,  2,  3,  4,  5,
                       6,  7,  8,  9, 10,
                      11, 12, 13, 14, 15 };

  // create a matrix "a" and copy the data "mdata" on it.
  matrix<double> a(3,5,mdata);

  // show the matrix
  cout << endl << "Matrix a: " << endl << a << endl;
    
  // add -7 to all elements
  a.add(-7.0);

  // apply the c-function fabs to all elements
  a.apply(fabs);

  // show the resulting matrix
  cout << "  After abs(x-7):" << endl;

  cout << a << endl;

  // add 0.5 to all elements
  a.add(0.5);
    
  // create an instance of the logarithm-iterating functor,
  // which apply the log function to all elements of a mathVector
  lti::logarithm<double> lg;
  lg.apply(a);
  
  // show the matrix after applying "log" to all of its elements
  cout << "  After log(x+0.5):" << endl << a  << endl;

--------------------- image procesing tests ---------------------

  // create an instance of the image loading functor:
  lti::loadBMP loader;
        
  lti::image img,img2;

  // -- loading an image -- : shortcut
  
  // load the given image using the shortcut!
  loader.load("img/leo040801_00_019.bmp",img);

  // -- loading an image -- : the standard way
  
  // the "standard" way uses the parameters-class of the functor
  // the functor requires a parameter object:
  lti::loadBMP::parameters loaderParam;
  
  // give which file should be loaded
  loaderParam.filename = "img/leo040801_00_019.bmp";
  
  // tell the image-loader, which parameters should be used:
  loader.setParameters(loaderParam);
  
  // load the image
  loader.apply(img2);
  
  // -- extract a monochromatic channel of the image --
  
  // split image test
  
  lti::channel chnl,chnl2;
  
  // functor to split image in the chromaticity color space
  lti::splitImageTorgI splitter;
  
  // extract the intensity channel only!
  splitter.getIntensity(img,chnl);
  
  // -- Convolution and Filters --
  
  // 1D filter tests
  
  cout << "Vector filter...";
  
  lti::vector<float> vct1(65536,0.5);
  lti::vector<float> vct2(65536,0.0f);
  
  // create a gaussian kernel with 5 elements and a variance of 0.7
  lti::gaussKernel1D<float> gauss(5,0.7);
  
  // the convolution functor:
  lti::convolution convolver;
  
  // the parameters for the convolution functor
  lti::convolution::parameters param;
  
  // indicate which kernel should be used
  param.setKernel(gauss);
  
  // set the parameters
  convolver.setParameters(param);
  
  // convolve the vector vct1 with the gaussian kernel
  convolver.apply(vct1,vct2);
  
  // -- 2D separable filters --
  
  // create a (separable) column filter!
  
  cout << "Creating separable filter...";
  
  sepKernel<float> sepKern;
  sepKern.setNumberOfPairs(1);
  // in a column filter, the row filter has only 1 element, with value 1
  sepKern.getRowFilter(0).resize(0,0,1,false);
  // use the gaussian kernel as the column filter
  sepKern.getColFilter(0).copy(gauss);
  
  // indicate that now this column filter should be used
  param.setKernel(sepKern);
  convolver.setParameters(param);
  
  // filter the intensity channel with this column filter
  convolver.apply(chnl,chnl2);
  
  // -- 2D gaussian filter (separable)
  
  // change the kernel to a complete 2D gaussian filter
  sepKern.copy(gaussKernel2D<float>(k));
  
  // indicate the convolution functor to use this kernel    
  param.setKernel(sepKern);
  convolver.setParameters(param);
  
  // convolve the channel with the 2D gaussian kernel
  convolver.apply(chnl,chnl2);
  
  // -- 2D gaussian filter (matrix)
  
  // create a 2D (non-separable) kernel
  kernel2D<float> gauss2D;
  gauss2D.outerProduct(sepKern.getRowFilter(0),sepKern.getColFilter(0));
  
  // indicate the convolution functor to use this kernel
  param.setKernel(gauss2D);
  convolver.setParameters(param);
  
  // convolve the 2D kernel with the channel
  convolver.apply(chnl,chnl2);
  
  // -- downsampling test
  
  // create the downsampling functor (using the default parameters)
  lti::downsampling downsampler;
  
  downsampler.apply(chnl,chnl2);
 
  // create a viewer object to see the images
  lti::viewer view;
  
  view.show(chnl2);
  
  getchar(); // wait 'til the user hits a key

  }

Generated on Sat Apr 10 15:26:30 2010 for LTI-Lib by Doxygen 1.6.1