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

ltiHierarchy.h

00001 /*
00002  * Copyright (C) 1998, 1999, 2000, 2001
00003  * Lehrstuhl fuer Technische Informatik, RWTH-Aachen, Germany
00004  * 
00005  * This file is part of the LTI-Computer Vision Library (LTI-Lib)
00006  *
00007  * The LTI-Lib is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public License (LGPL)
00009  * as published by the Free Software Foundation; either version 2.1 of
00010  * the License, or (at your option) any later version.
00011  *
00012  * The LTI-Lib is distributed in the hope that it will be
00013  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
00014  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public 
00018  * License along with the LTI-Lib; see the file LICENSE.  If
00019  * not, write to the Free Software Foundation, Inc., 59 Temple Place -
00020  * Suite 330, Boston, MA 02111-1307, USA.  
00021  */ 
00022 
00023 #ifndef _LTI_HIERARCHY
00024 #define _LTI_HIERARCHY
00025 
00026 /** 
00027 
00028 \page classHierarchy Conceptual Class Hierarchy in the LTI-Lib
00029 
00030 We can group the functionality of the LTI-Lib into several categories:
00031 
00032 - \ref datastruc
00033   - \ref basics 
00034   - \ref geom   
00035   - \ref pixel  
00036   - \ref aggregates
00037     - \ref matvec
00038     - \ref chnimg
00039     - \ref kernels
00040     - \ref contours
00041     - \ref othconts
00042 - \ref globalfunc
00043 - \ref functors
00044   - \ref mathOp
00045     - \ref linalg
00046     - \ref stats
00047     - \ref random
00048     - \ref sorting
00049     - \ref interpol
00050     - \ref mathother
00051   - \ref imgproc
00052     - \ref split
00053     - \ref colquant
00054     - \ref illum
00055     - \ref masks
00056     - \ref edges
00057     - \ref contproc
00058     - \ref segm
00059     - \ref trackers
00060     - \ref filters
00061     - \ref morpho
00062     - \ref enhanc
00063     - \ref featExt
00064     - \ref featproc
00065     - \ref reconstr
00066   - \ref inout
00067     - \ref imgfiles
00068     - \ref descfiles
00069     - \ref grabbers
00070     - \ref coding
00071     - \ref otherio
00072 - \ref classifiers
00073   - \ref superv
00074   - \ref unsuperv
00075   - \ref clastools
00076 - \ref viewers
00077   - \ref draw
00078   - \ref view
00079 - \ref system
00080 - \ref genother
00081 
00082 <hr> 
00083 
00084 \section datastruc Data Structures
00085 
00086 The LTI-Lib provides data structures necessary to store different
00087 kinds of data required in computer vision and mathematical
00088 applications.
00089 
00090 There are different levels of data structures
00091 
00092 - \ref basics 
00093 - \ref geom   
00094 - \ref pixel  
00095 - \ref aggregates
00096 
00097 \subsection basics Basic Types
00098 
00099 Due to the fact that the C++ standard does not define the exact size
00100 of the internal types, we need to specify some basic types, which a
00101 standardized size, independent of the system or processor where you
00102 compile the library. 
00103 
00104 These types are:
00105 - lti::ubyte a one-byte unsigned integer type (values from 0 to 255)
00106 - lti::byte  a one-byte signed integer type (values from -128 to 127)
00107 - lti::uint16 a two-byte unsigned integer type 
00108 - lti::int16  a two-byte signed integer type
00109 - lti::uint32 a four-byte unsigned integer type
00110 - lti::int32  a four-byte signed integer type
00111 - lti::sreal  a single precision floating point type
00112 - lti::dreal  a double precision floating point type 
00113 
00114 \subsection geom Geometric Primitives
00115 
00116 Typical geometric elements in image processing application are
00117 implemented in the LTI-Lib.  These are
00118 - lti::tpoint     a two-dimensional structure with coordinates x and y. Is 
00119                   implemented as template, so that the precision of the
00120                   coordinates can be specified by the user.
00121 - lti::point      alias for lti::tpoint<int>.
00122 - lti::dpoint     alias for lti::tpoint<double>.
00123 - lti::tpoint3D   a three-dimensional structure with coordinates x, y and z.
00124                   Is implemented as template, so that the precision of the 
00125                   coordinates can be specified by the user.
00126 - lti::point3D    alias for lti::tpoint3D<int>.
00127 - lti::dpoint3D   alias for lti::tpoint3D<double>.
00128 - lti::trectangle represents a simple rectangle, always vertically or
00129                   horizontally aligned.  Is also a template class, where
00130                   the given type is the type for the lti::tpoints used for the 
00131                   upper-left and bottom-right corners of the rectangle.
00132 - lti::rectangle  alias for lti::trectangle<int>.
00133 - lti::location   used to indicate a place in an image or channel.  It gives
00134                   the position of a middle point, an orientation and an angle.
00135 - lti::rectLocation gives the position of a rectangular region in an image or
00136                   channel by the position of a middle point, an orientation
00137                   angle and two lengths.
00138 - lti::hPoint2D and lti::hPoint3D are template types that define homogeneous
00139                   points.  These are used in projective geometry tasks.
00140 - lti::chainCode  is an element of a chain code representation.
00141 
00142 \subsection pixel Pixel Primitives
00143 
00144 With the LTI-Lib you can manipulate \e channels of images extracted
00145 from different color spaces.  The acquisition and display of color
00146 images is however always done in the RGB color space.  Two types are
00147 provided to work in this space:
00148 
00149 - lti::rgbPixel  is the basic RGB color type in the LTI-Lib.  It is
00150                  exactly 4 bytes long, and code the red, green and blue
00151                  values (1 byte each) together with a dummy (or maybe alpha) 
00152                  value that "aligns" each pixel to 4 byte structure.
00153 - lti::trgbPixel this is a template type, with the three color components
00154                  red, green and blue.
00155 
00156 More information on extracting different color channels from the
00157 pixels or merging them into a color image can be found in the functors
00158 lti::splitImage and lti::mergeImage.
00159 
00160 Many colors are defined as constant instances of lti::rgbPixel.
00161 Always defined are the values lti::Black, lti::White, lti::Red,
00162 lti::Green, lti::Blue, lti::Cyan, lti::Magenta and lti::Yellow.  Many
00163 other definitions can be found in the file "ltiColors.h".
00164 
00165 \subsection aggregates Aggregate Types
00166 
00167 - \ref matvec
00168 - \ref chnimg
00169 - \ref kernels
00170 - \ref contours
00171 - \ref othconts
00172 
00173 \subsubsection matvec Matrices and Vectors
00174 
00175 There are many aggregate types in the LTI-Lib, but two of them are
00176 very important:
00177 
00178 - lti::vector   is a template class to store and manipulate
00179                 n-dimensional vectors.  Is a template class, so that you
00180                 can specify which type the elements should have.  They
00181                 provide many simple methods for typical vector operations,
00182                 iterators to allow a fast access.  The design of this class
00183                 considered many efficiency aspects and constrains the possible
00184                 types to static ones.  This means, this class is not a
00185                 replacement for std::vector, which is also frequently used
00186                 in the LTI-Lib to contain dynamic types like lti::vectors or
00187                 lti::matrices.  Aliases for different vector types are
00188                 - lti::ivector for lti::vector<int>
00189                 - lti::dvector for lti::vector<double>
00190                 - lti::palette for lti::vector<lti::rgbPixel>
00191 - lti::matrix   is a template class to store and manipulate matrices of
00192                 any size.  Similar to vectors, the allowed types are restricted
00193                 to static ones.  Many useful simple matrix operations are
00194                 provided as methods of the class.  Iterators are also
00195                 provided to allow faster operations.  
00196                 Aliases for different matrix types are:
00197                 - lti::imatrix for lti::matrix<int>
00198                 - lti::dmatrix for lti::matrix<double>
00199 
00200 You can cast between matrices (or vectors) of different types using the 
00201 \c castFrom() methods.
00202 
00203 Other vector and matrices types exist, to solve specific storage problems:
00204 
00205 - lti::array         is a subclass of lti::vector that allows an indication
00206                      of the range of indices that can be used to access 
00207                      the elements.  
00208 - lti::dynamicMatrix is used for matrices, where you do not know which
00209                      indices are going to be used and in which range.  They
00210                      grow dynamically as you use it.  They are really slow
00211                      and useful to when building statistics in tabular forms.
00212 - lti::sparseMatrix  is used for huge matrices, where the dimensions are
00213                      already known, but the most elements contain the same
00214                      value (usually zero).  It optimizes the amount of memory
00215                      required, but there are slow.  With help of the iterators
00216                      you can visit very fast the elements that contain
00217                      a non-zero value.
00218 - lti::triMatrix small class used to store triangular matrices.
00219 - lti::hMatrix       this class is parent of lti::hMatrix2D and lti::hMatrix3D,
00220                      which implements homogeneous matrix transformations.
00221 
00222 \subsubsection chnimg Channels and Images
00223 
00224 The representation of images and channels are classes that inherit
00225 from lti::matrix.  This means, in the LTI-Lib the images and channels
00226 are matrices of special types:
00227 
00228 - lti::channel8 is a class that inherits from lti::matrix<ubyte> and implements
00229                 gray-valued images with elements ranging between 0 and 255.
00230 - lti::channel  is a class that inherits from lti::matrix<float> and
00231                 implements gray-valued image with elements usually ranging 
00232                 between 0.0f and 1.0f.  
00233 - lti::image    is a class that inherits from lti::matrix<rgbPixel> and is
00234                 used to represent a color image.
00235 
00236 These three classes are widely used in all image processing algorithms
00237 of the LTI-Lib.  For some special cases there is also a
00238 lti::channel32, that inherits from lti::matrix<int>.
00239 
00240 You can cast between the different channels (gray valued images) using the 
00241 \c castFrom() methods.
00242 
00243 \subsubsection kernels Filter kernels
00244 
00245 The filter kernels are small vector or matrix similar types allowing 
00246 an access with integer indices (not only positive values, but also
00247 negative ones).
00248 
00249 - lti::kernel1D  one dimensional kernels to filter vector.  You can find
00250                  specializations for gaussian filtering ( lti::gaussKernel1D ),
00251                  triangular kernels ( lti::triangularKernel1D ) and several
00252                  quadrature mirror filters used in wavelet transformations:
00253                  ( lti::battleLemarieKernel, lti::daubechies16Kernel, 
00254                    lti::haarKernel and lti::tap9Symmetric )
00255 - lti::kernel2D  two dimensional kernels.  The specialization cover a Gabor
00256                  filter kernel to extract information with a specific frequency
00257                  range an orientation ( lti::gaborKernel ) and several kernels
00258                  used by morphological operators:
00259                  ( lti::cityBlockKernel, lti::euclideanKernel,
00260                    lti::octagonalKernel )
00261 - lti::sepKernel separable kernels to filter channels.  In some special cases
00262                  the 2D kernels can be generated as an outer product of
00263                  1D ones.  Here is much more efficient to apply each 1D kernel
00264                  separately.  This kernels store the 1D kernels as row or
00265                  column filter.  With the method \c separate you can try to
00266                  separate a 2D kernel into its 1D components.                
00267                  As specializations you will find the gaussian kernel
00268                  ( lti::gaussKernel2D ), a separable Gabor kernel
00269                  ( lti::gaborKernelSep ), kernels to approximate the gradient
00270                  of a channel ( lti::gradientKernelX and 
00271                  lti::gradientKernelY ), kernels for the oriented gaussian
00272                  derivatives ( lti::ogd1Kernel and lti::ogd2Kernel ) and a
00273                  simple square formed kernel ( lti::chessBoardKernel ) used 
00274                  in some morphological operators.
00275 
00276 
00277 \subsubsection contours Contours, Polygons and Regions
00278 
00279 The image representation in form of matrices is not appropriate for
00280 all possible applications.  Representations for contours and regions are also
00281 necessary.  The types used in the LTI-Lib are:
00282 
00283 - lti::tpointList   a simple list of lti::tpoints, without any specific
00284                     semantical meaning.  An important alias for list of
00285                     integer points is lti::pointList.
00286 
00287 Four classes inherit from the list of integer points:
00288 
00289 - lti::borderPoints is a list of adjacent points representing a contour
00290                     within an image.  All algorithms ensure that two adjacent
00291                     points in the list are neighbor points in the image.
00292 - lti::ioPoints     the input/output point representation describes also
00293                     a region indicating alternatively when a "beam" that
00294                     sweeps the images from top to bottom, from left to right
00295                     gets IN the region and when gets OUT.
00296 - lti::areaPoints   is a list of all points enclosed in an region (border
00297                     inclusive).
00298 - lti::polygonPoints are the representation of a polygon by its vertices.
00299                     It contains methods to approximate an arbitrary contour
00300                     (represented by a lti::borderPoints object) by a polygon.
00301                     You also can get the convex hull of a list of
00302                     points (lti::pointList) using the respective methods.
00303            
00304 You can cast between the last classes using the respective \c castFrom()
00305 methods.
00306 
00307 Another important and more complex representations for shapes and
00308 their variations are the point distribution models
00309 ( lti::pointDistributionModel ).  They can be constructed using 
00310 lti::pdmGenerator.
00311 
00312 \subsubsection othconts Other aggregate types
00313 
00314 Other aggregate types are:
00315 
00316 - lti::tree       represents rooted ordered trees.
00317 - lti::sequence   are used to represent sequence of objects (like images).
00318 - lti::thistogram is the parent class for several representations of
00319                   multidimensional histograms.
00320                   The most important ones are the specialization 
00321                   for one and two dimensional histograms ( lti::histogram1D
00322                   and lti::histogram2D ).  You can also use lti::mapperFunctor
00323                   instances to map any value ranges into the integer ranges
00324                   accepted by the histograms (from 0 to mi-1, with mi the 
00325                   number of elements of the i-th dimension).
00326 - lti::sparseHistograms allow the representation of multidimensional histograms
00327                   where it is expected, that the number of occupied cells is
00328                   relatively small compared with the total number of cells of
00329                   the histogram.  The number of bins per dimension is limited
00330                   to a maximal of 64.
00331 - lti::tensor     template class to create multidimensional tables.
00332 - lti::pyramid    A hierarchical set of images or channels.  Typical cases
00333                   for multiresolutional analysis in image processing are
00334                   implemented in the LTI-Lib:
00335                   lti::gaussianPyramid, lti::laplacianPyramid and 
00336                   lti::gaborPyramid.
00337 
00338 <hr>
00339 
00340 \section globalfunc Global Functions and Constants
00341 
00342 There are several global functions necessary to extend the old C-typed math
00343 functions.  Many of them are defined for several types, so that you do not
00344 need to explicitely cast.  The most usual ones are:
00345 - lti::min and lti::max with two and three arguments
00346 - lti::round, lti::iround and lti::lround to round a floating point value.
00347   The iround returns and integer and the lround a long integer.  
00348 - Three typical tasks related with the absolute value are lti::abs
00349   absolute value, lti::absdiff the absolute value of the difference
00350   between two values and lti::rectify, which returns zero for all negative
00351   values.
00352 - lti::signum and lti::signum0 return the sign of a number
00353 - lti::sqr returns the square of a number and lti::sqrt the square root.
00354 - lti::sin, lti::cos, lti::tanh and atan2 for float and double types.
00355 - A special case for atan2 for integer arguments using a Look-Up Table 
00356   accelerates the computation of many algorithms.  Take a look at
00357   lti::arctanLUT
00358 - lti::log, lti::exp for float and double types
00359 - lti::pow for float, double and integer types
00360 - lti::sigmoid the simple sigmoid function 1/(1+exp(-x)) for float, double and
00361   integer types.
00362 
00363 Several geometry related global functions compute among other things the
00364  intersection between lines and the minimal distances between points and lines:
00365 - lti::minDistance2()
00366 - lti::intersection
00367 - lti::clockwiseTurn
00368 
00369 Usual constants are 
00370 
00371 - lti::Pi a double constant for 3.1415926535897932 
00372 - lti::NaN for Not a Number
00373 - lti::Inf for Infinity
00374 
00375 Also global are the functions to read and write into lti::ioHandler objects.
00376 These functions are lti::read and lti::write
00377 
00378 The global function lti::passiveWait is a wrapper function for the system
00379 dependent functions usleep and Sleep.
00380 
00381 <hr>
00382 
00383 \section functors Functor
00384 
00385 The most algorithms to process and analyze images or matrices are implemented 
00386 as functors (see also \ref arcFunctor).
00387 
00388 We have following functor categories:
00389 
00390 - \ref mathOp
00391   - \ref linalg
00392   - \ref stats
00393   - \ref random
00394   - \ref sorting
00395   - \ref interpol
00396   - \ref mathother
00397 - \ref imgproc
00398   - \ref split
00399   - \ref colquant
00400   - \ref illum
00401   - \ref subpix
00402   - \ref masks
00403   - \ref edges
00404   - \ref contproc
00405   - \ref segm
00406   - \ref trackers
00407   - \ref filters
00408   - \ref morpho
00409   - \ref enhanc
00410   - \ref featExt
00411   - \ref featproc
00412   - \ref reconstr
00413 - \ref inout
00414   - \ref imgfiles
00415   - \ref descfiles
00416   - \ref grabbers
00417   - \ref coding
00418   - \ref otherio
00419 
00420 \subsection mathOp  Mathematical Operations
00421 
00422 Following groups of mathematical functors exist in the LTI-Lib:
00423 
00424 - \ref linalg
00425 - \ref stats
00426 - \ref random
00427 - \ref sorting
00428 - \ref interpol
00429 - \ref mathother
00430 
00431 \subsubsection linalg Linear Algebra
00432 
00433 - The parent class to functor that solve systems of linear equations
00434   is lti::linearEquationSystemSolutionMethod.  Two decomposition
00435   methods exist at this time: lti::luSolution and lti::qrSolution
00436 - Usefull while solving linear equation systems are the functors 
00437   lti::backSubstitution and lti::forwardSubstitution.
00438 - The lti::luDecomposition computes the LU decomposition of a matrix.
00439 - The Singular Value Decomposition, useful to solve under-determined or
00440   over-determined linear equations systems is implemented in 
00441   lti::singularValueDecomp
00442 - To find the inverse of a matrix use lti::matrixInversion.  Remember
00443   that if you want to solve a system of linear equations (something
00444   with the form Ax=b with a matrix A and two vectors x and b), the
00445   lti::linearEquationSystemSolutionMethod functors provide more efficient 
00446   and stable ways to find the values of x, without inverting the matrix A. 
00447 - The Moore-Penrose pseudo inverse can be computed by the lti::pseudoInverseMP 
00448   functor.
00449 - lti::minimizeBasis generates a minimum number of basis vectors to
00450   approximate another set of vectors within a given deviation.
00451 - To extract the eigenvalues of a matrix you can use any class that
00452   inherits from lti::eigenSystem.  At this time only the lti::jacobi functor
00453   is implemented for this task.  If you have the CLAPACK installed, you can
00454   configure the LTI-Lib to also provide other functors present in 
00455   <code>ltilib/misc/lamath</code>.
00456 - lti::distanceFunctor is the parent class for all functors that
00457   compute distances between vectors and matrices
00458   (e.g. lti::l1Distance, lti::l2Distance).  
00459 - A related class to the previous distance functors are the
00460   lti::similarityFunctor classes,  that currently offer
00461   lti::cosinus2Similarity and lti::euclidianSimilarity.
00462 - To do a principal components analysis you can use the
00463   lti::principalComponents functor or the more sophisticated lti::kernelPCA.
00464   The lti::serialPCA computes sequentially the principal components of an
00465   always increasing number of data.
00466 - A linear combination of different vectors and matrices can be done with
00467   the lti::linearMixer functor.
00468 - To multiply huge matrices you can use the lti::strassenMultiplication.
00469 - To access n-dimensional containers like histograms or sparseHistograms you
00470   require ivectors as indices.  Is usually helpful the clip the values in these
00471   vectors to be in a valid hyperbox.  For this task you can use the
00472   lti::boundsFunctor or one of the from lti::mapperFunctor inherited classes.
00473 
00474 Many other basic linear algebra functions are directly implemented in
00475 the matrix classes.  You can multiply, add, transpose, etc. vector and
00476 matrices.  The dot product between two vectors of the same type is also build
00477 in.  If you need the dot product of two vectors of different types you can
00478 use the lti::scalarProduct functor.
00479 
00480 If you have compiled the LTI-lib with CLAPACK support enabled, there are
00481 some more linear algebra functors available:
00482 
00483 - lti::generalEigenVectors to extract the eigenvalues and eigenvectors of
00484   a matrix.
00485 - lti::linearDiscriminantAnalysis to search in a set of vectors the axes
00486   that can best discriminate between them (LDA).
00487 
00488 \subsubsection stats Statistics
00489 
00490 - lti::boundsFunctor is used to find the minimum or maximum row or column
00491   vectors of a matrix.
00492 - lti::quickMedian search using a "partial" quick-sort algorithm the
00493   median of a vector o matrix.
00494 - lti::varianceFunctor and lti::meansFunctor compute simple statistics for
00495   the rows and columns of matrices or for vectors.
00496 - lti::serialStatsFunctor is a very useful small functor, that helps computing
00497   the variance and mean values of data stream, when you do not know exactly
00498   how many (one-dimensional) samples you will have.  
00499   The lti::serialStatsExtFunctor is very similar to the previous one, but
00500   a tiny little bit slower due to the additional computation of the minimum and
00501   maximum values of the data.
00502 - lti::serialVectorStats is similar to the previous functor but for 
00503   n-dimensional samples.
00504 - lti::entropyFunctor  assumes that the rows (or columns) of a matrix contain
00505   probability distributions, i.e. the sum of the rows (column) elements must
00506   be 1.0. The entropy for the row will be defined as the sum of p(x)*ln(p(x))
00507   for all x, where p(x) are the elements of the vector, row or column. 
00508 - lti::chiSquareFunctor calculates the chiSquareValue indicating the 
00509   likelihood, that the considered elements are drawn from a gaussian normal 
00510   distribution.
00511 - lti::bhattacharyyaDistance and lti::bhattacharyyaDistOfSubset compute the
00512   well known comparison method for normal distributions.
00513 
00514 \subsubsection random Random numbers
00515  
00516 There are several random number generators that follow different discrete or
00517 continuous probability distributions:
00518 
00519 Discrete random distributions:
00520 
00521 - lti::binomialDistribution
00522 
00523 Continuous random distributions:
00524 
00525 - lti::gaussianDistribution     one dimensional gaussian distribution
00526 - lti::multivariateGaussian     n-dimensional gaussian distribution
00527 - lti::exponentialDistribution  one dimensional gaussian distribution
00528 - lti::gammaDistribution        one dimensional gamma distribution
00529 - lti::poissonDistribution      one dimensional Poisson distribution
00530 - lti::uniformDistribution      one dimensional uniform distribution
00531 
00532 
00533 With lti::noise you can add noise with a given distribution to
00534 matrices or vectors
00535 
00536 \subsubsection sorting Sorting
00537 
00538 - lti::sort to sort the elements in vectors and matrices
00539 - lti::sort2 to sort a vector/matrix using another vector/matrix as key
00540 - lti::scramble to shuffle the elements in vectors/matrices
00541 - lti::quickMedian search using a "partial" quick-sort algorithm the
00542   median of a vector o matrix.
00543 - lti::sortExpensive sorts the elements in a std::list that are
00544   computationally expensive to compare.
00545 
00546 \subsubsection interpol Interpolation
00547 
00548 The base class of all interpolators is lti::interpolator.
00549 
00550 Two basic classes of interpolation are distinguished for equal and 
00551 variable distances between tabulated points, respectively:
00552 - lti::equallySpacedSamplesInterpolator 
00553 - lti::variablySpacedSamplesInterpolator
00554 
00555 These have the following subclasses:
00556 - lti::scalarValuedInterpolation uses equally spaced samples and returns
00557   a scalar given a set of points with 1D or 2D coordinates. It is usually
00558   used for interpolating pixel values in images. Its subclasses are:
00559   - lti::nearestNeighborInterpolator
00560   - lti::bilinearInterpolator 
00561   - lti::bicubicInterpolator
00562 
00563 - lti::cubicSpline variable sample distance cubic spline interpolation
00564 - lti::multidimensionalCubicSpline as cubicSpline but the curve is in 
00565   n-dimensional space and thus returns a vector
00566 
00567 \subsubsection mathother Other Mathematical Functors
00568 
00569 - lti::validator checks if a matrix of floating points types contains
00570   invalid numbers (i.e. lti::NaN or lti::Inf ).
00571 - lti::sammonsMapping maps data from a high dimensional to a lower
00572   dimensional space while trying to preserve the inter-point
00573   distances.
00574 
00575 \subsection imgproc Image Processing
00576 
00577 There are many different algorithms for image processing in the LTI-Lib:
00578 - \ref split
00579 - \ref colquant
00580 - \ref illum
00581 - \ref subpix
00582 - \ref masks
00583 - \ref edges
00584 - \ref contproc
00585 - \ref segm
00586 - \ref trackers
00587 - \ref filters
00588 - \ref morpho
00589 - \ref enhanc
00590 - \ref featExt
00591 - \ref featproc
00592 - \ref reconstr
00593 
00594 \subsubsection split  Color Spaces
00595 
00596 In the LTI-Lib there are only RGB images, but you can split it into
00597 the channels of different color spaces.  You can also take three channels
00598 in a specific color space and merge them into a lti::image.
00599 
00600 The classes to split a color image inherit from lti::splitImage and to merge
00601 channels you can use functors derived from lti::mergeImage.  You can
00602 create your own linear color spaces transformations with lti::linearMixer.
00603 
00604 The color spaces currently supported are:
00605 
00606 - RGB (Red, Green and Blue)        lti::splitImageToRGB, lti::mergeRGBToImage
00607 - HSV (Hue, Saturation, Value)     lti::splitImageToHSV, lti::mergeHSVToImage
00608 - HSI (Hue, Saturation, Intensity) lti::splitImageToHSI, lti::mergeHSIToImage
00609 - HLS (Hue, Luminance, Saturation) lti::splitImageToHLS, lti::mergeHLSToImage
00610 - rgI (chromaticity,  Intensity)   lti::splitImageTorgI, lti::mergergIToImage
00611 - XYZ (CIE XYZ color space)        lti::splitImageToXYZ, lti::mergeXYZToImage
00612 - xyY (Chromaticity CIE  space)    lti::splitImageToxyY, lti::mergexyYToImage
00613 - YIQ (Luminance,Inphase,Quadrature) lti::splitImageToYIQ, lti::mergeYIQToImage
00614 - OCP (Opponent Color Channels)    lti::splitImageToOCP, lti::mergeOCPToImage
00615 - CIE Luv (L* u* v* channels) lti::splitImageToCIELuv, lti::mergeCIELuvToImage
00616 
00617 Other functors for color analysis:
00618 
00619 - lti::opponentColor generates an "opponent color" channel from the given two
00620   channels, one representing the center, the other representing the surround.
00621 
00622 \subsubsection colquant Color Quantization and Related Topics
00623 
00624 An usual condition to many algorithms is to reduce the number of colors used
00625 in the color images.
00626 
00627 - lti::kMColorQuantization uses the well known k-Means clustering algorithm
00628   to find the best k colors.
00629 - lti::lkmColorQuantization or local k-Means quantization use a SOM (Self 
00630   Organizing Map)-like approach to fine the k best colors.
00631 - lti::medianCut classical median cut algorithm for color quantization.
00632 - lti::meanShiftSegmentation has a color quantization modus that considers not
00633   only the color distribution in the color space, but their locations in the
00634   image.
00635 
00636 This other functors are also useful:
00637 
00638 - lti::computePalette computes some statistics for the colors used in an image 
00639   using the indices (or labels) mask generated by a color quantization or
00640   segmentation functor.
00641 - lti::usePalette is used to replace the values of in an index image 
00642   (usually a channel8) with the values given in an specified palette.
00643 
00644 \subsubsection illum Color and Intensity Analysis Techniques
00645 
00646 To eliminate the influences of the illumination you can use functors derived 
00647 from the class lti::colorNormalizationBase:
00648 - lti::grayWorldNormalization is a simple robust method that computes second
00649   order statistics of each color channel (RGB) to produce canonical images
00650   that are independent of the illumination color.
00651 - lti::comprehensiveColourNormalization is a method proposed by Finlayson, 
00652   Schiele and Crowley to elliminate also dependencies on the geometry of the
00653   illuminants.
00654 - You can use lti::whiteningSegmentation to do a color zooming of an image, 
00655   which provides also sort of illumination invariancy.
00656 
00657 You can create \b statistical \b color \b models for one or more images in form
00658 of 3D histograms with lti::colorModelEstimator.  You can employ these models to
00659 decide if a pixel belongs to the class it describes ( lti::probabilityMap ).
00660 The functor lti::colorModelSelector decides using a Maximum Likelihood approach
00661 which model in a set describes more appropriately the colors found in an
00662 image region.
00663 
00664 Other functors for color analysis:
00665 
00666 - lti::opponentColor generates an "opponent color" channel from the given two
00667   channels, one representing the center, the other representing the surround.
00668 
00669 \subsubsection subpix Subpixel interpolation
00670 
00671 You can interpolate the values between pixels or elements in a vector using
00672 lti::scalarValuedInterpolation instances:
00673 
00674 - lti::nearestNeighborInterpolator does not really interpolate, it just get
00675   the next point available.
00676 - lti::bilinearInterpolator is the simplest and fastest method.  For vectors
00677   it does a linear interpolation.
00678 - lti::bicubicInterpolator is a more precise but slower interpolator.
00679 
00680 These classes are derived from lti::interpolator. See \ref interpol
00681 
00682 \subsubsection masks Mask Operations
00683 
00684 Typical boolean and arithmetical operations to manipulate binary masks
00685 (images with only two values) can be found in the classes derived from
00686 lti::maskFunctor.  The usual ones are:
00687 
00688 - lti::maskNot          boolean NOT operator
00689 - lti::maskAnd          boolean AND operator
00690 - lti::maskOr           boolean OR operator
00691 - lti::maskInvert       sort of boolean NOT operator: (1-x) for x in [0,1]
00692 - lti::maskAlgebraicSum usual OR-equivalent function used in fuzzy systems.
00693 - lti::maskMultiply     usual AND-equivalent function used in fuzzy systems
00694 
00695 Other usual operations with this kind of masks are \ref morpho.
00696 
00697 \subsubsection edges Edge and Corner Detectors
00698 
00699 The edge detectors in the LTI-Lib inherit from lti::edgeDetector.  You can use
00700 the lti::edgeDetectorFactory to create instances of all edge detectors existent
00701 in the LTI-Lib:
00702 
00703 - lti::susanEdges is NOT part of the LTI-Lib, but you can use it if you 
00704   accept the original conditions of use of the SUSAN algorithm.
00705 - lti::cannyEdges is the standard edge detection algorithm.
00706 
00707 
00708 All corner detectors inherit from lti::cornerDetector.  You can use the
00709 lti::cornerDetectorFactory to create instances of all corner detectors existent
00710 in the LTI-Lib:
00711 
00712 - lti::susanCorners is NOT part of the LTI-Lib, but you can use it if you
00713   accept the original conditions of use of the SUSAN algorithm.
00714 - lti::harrisCorners a standard corner detector.
00715 
00716 
00717 \subsubsection contproc Points, Contours and Shape Manipulation
00718 
00719 Some basic geometrical operations are provided by the types described in 
00720 \ref contours.  For example, you can get the convex hull of a set of points,
00721 approximate a contour with a polygon or get the boundary of an area or
00722 the area points enclosed by a contour using the casting methods of the
00723 from lti::tpointList<T> inherited classes.
00724 
00725 - lti::borderExtrema extracts minimum and maximum positions along a border in
00726   terms of distance to a given center point.
00727 - lti::cubicSpline interpolates between the points in a list using cubic
00728   splines.
00729 - lti::boundingBox extracts part of an image under consideration of
00730   a contour representation of the object of interest.  It suppresses the
00731   irrelevant background.
00732 - lti::polygonApproximation approximates a contour represented by a
00733   lti::borderPoints object with a polygon (see also lti::tpolygonPoints).
00734 - lti::convexHull computes the convex hull of a set of points. (see also
00735   lti::tpolygonPoints).
00736 
00737 \subsubsection segm Segmentation and Localization 
00738 
00739 Segmentation algorithms found in the LTI-Lib are (see also \ref segmPage):
00740 
00741 - lti::thresholdSegmentation is the simplest algorithm.
00742 - lti::watershedSegmentation is a widespread method to partition an image
00743   into small regions.
00744 - lti::snake is a very primitive (but fast) version of an active contour
00745   based on a region growing approach.
00746 - lti::regionGrowing a simple segmentation approach that expands some
00747   regions starting at some given seeds.
00748 - lti::meanShiftSegmentation is based on the work of Comaniciu et.al.  
00749   Produces very good results in the most cases.  You can configure it
00750   to quantize, or to produce over or under-segmentations of your images.
00751 - lti::kMeansSegmentation is based on a combination of color quantization and
00752   edge preserving filtering.
00753 - lti::whiteningSegmentation tries to augment a color region in the color
00754   space to separate objects which are similar in their color.
00755 - lti::csPresegmentation is a simple functor that suppresses a homogeneous
00756   background from other objects.  It works under the assumption that the
00757   borders of the image contain mainly background pixels.
00758 
00759 Other tools related with segmentation tasks are:
00760 
00761 - lti::regionMerge uses a similarity matrix (see lti::similarityMatrix) and
00762   a threshold value given in the parameters to decide if two objects in a
00763   mask (also returned by lti::similarityMatrix or by lti::objectsFromMask)
00764   should be merged or not.
00765 - lti::boundingBox extracts part of an image under consideration of
00766   a contour representation of the object of interest.  It suppresses the
00767   irrelevant background.
00768 - Classes for region/object detection: lti::objectsFromMask and 
00769   lti::fastRelabeling.
00770 
00771 The functor \b lti::objectsFromMask deserves special attention.  Usually the 
00772 segmentation algorithms produce a the end a "labeled" mask, that contains
00773 an assignment for each pixel in an image to a specific object.  This functor
00774 allows you to extract from this mask all found objects in a very efficient
00775 way.  If this functor is too slow for your needs, and you do not require so
00776 much information as it provides, you can also try \b lti::fastRelabeling.  It 
00777 cannot detect which regions are within others, but this kind of information is 
00778 not always required.
00779 
00780 Algorithms used in the localization of specific image regions:
00781 
00782 - lti::activeShapeModel is the base class for functors that work on point
00783   distribution models ( lti::pointDistributionModel ).  It forces them 
00784   to fit different shapes in an image.  (See lti::gradientASM and lti::skinASM)
00785 - lti::compaqObjectFinderTrainer, lti::compaqObjectFinderModel and 
00786   lti::compaqObjectFinder are based on the work of Viola and Jones.  They allow
00787   among other things to find faces in images.
00788 - lti::blobEM estimates the position of M overlapping blobs by
00789   applying the EM-algorithm and estimating the parameters of a
00790   gaussian mixture model that fits the blobs.
00791 - You can of course use lti::correlation in image localization tasks.
00792 - Assuming you have image sequences with a relative stable background, you
00793   can use the lti::backgroundModel to detect which objects move.
00794 
00795 - lti::axLocalRegions detects relevant small regions in an image, that
00796   can be used to extract local descriptors.  
00797 - lti::locationSelector splits a list of locations into several smaller lists
00798   depending on the values of a given decision mask.
00799 
00800 Saliency functors are used to detect parts of an image that are perceptually
00801 interesting:
00802 
00803 - lti::edgeSaliency implements an older algorithm of Shashua and Ullman that 
00804   extracts salient information out of edge images.
00805 - lti::featureSaliencyIK is inspired in an algorithm of Itti and Koch.  It
00806   detects relevant regions in color images.
00807 - lti::featureSaliencyAx similar to the previous functor, but use other
00808   somehow equivalent tools to speed up the generation of the saliency map.
00809 
00810 
00811 \subsubsection trackers Tracking and Optical Flow
00812 
00813 Several mechanisms to track objects in images are provided in the LTI-Lib:
00814 
00815 - lti::kalmanFilter and lti::kalmanTracker use the Kalman Filter prediction
00816   mechanisms to track parts of images or just points.
00817 - lti::lkTracker is a pyramidal implementation of the Lukas-Kanade point
00818   tracker.
00819 - lti::camshiftTracker tracks a rectangular search window in a channel (gray
00820   valued).
00821 - lti::meanshiftTracker tracks a rectangular search window (the target) in an
00822   image by its color distribution
00823 
00824 Optical flow functors:
00825 
00826 - lti::opticalFlowHS implements the Horn-Schunks gradient based method.
00827 - lti::opticalFlowLK implements the Lucas-Kanade gradient based method.
00828 - lti::temporalTemplate is not exactly an optical flow functor, but something
00829   similar.  It extracts motion history images from a sequence of channels.
00830 
00831 \subsubsection filters Filters and Transformations
00832 
00833 Classical filter operators are:
00834 
00835 - lti::convolution is the classical filter operation.  It convolves a given
00836   kernel with a given channel.  Depending on the kernel type you use,
00837   you can do almost everything (see also \ref kernels).
00838 - lti::squareFilter is an optimized version of the convolution with a
00839   rectangular kernel.
00840 - Filtering an image with the oriented gaussian derivatives (OGD) can be
00841   efficiently achieved using the lti::ogdFilter functor.
00842 - lti::correlation is used to correlate small regions in bigger images.  In 
00843   its classical form it is close related to the convolution, but this functor
00844   offers other operation modes.
00845 - Sampling down an image can be done using a lti::downsampling functor, which 
00846   convolves a kernel (in a very efficient way) with an image before it extracts
00847   the desired pixel subset.   If you need only some pixels in a regular grid of
00848   an image (ignoring the Nyquist theorem) you can use lti::decimation.
00849 - Sampling up an image can be done using the lti::upsampling.  If you want to
00850   use "squares" for each upsampled pixel instead of filtering the image
00851   appropriately, you can do it efficiently with the lti::filledUpsampling 
00852   functor.
00853 
00854 Image Transformations:
00855 
00856 - lti::realFFT computes the Fourier transformation of a channel with real
00857   values.  The inverse transformation is done by lti::realInvFFT.
00858 - lti::qmf used with the appropriate 1D kernels produces the wavelet transform 
00859   of images or vectors.  With lti::qmfInverse you can reconstruct the original
00860   data.
00861 - Some times, the value of each pixel in an channel represents one coordinate
00862   value in some given coordinate system.  Usual conversions between polar
00863   and Cartesian coordinates can be done with lti::cartesianToPolar and
00864   lti::polarToCartesian.
00865 - lti::geometricTransform allows flexible rotation, shift and scaling 
00866   transformation of two dimensional images.
00867 - Two variants of the hough transform are provided: a very fast implementation
00868   of the line detection algorithm in lti::orientedHLTransform and a much slower
00869   general form detection algorithm in lti::gHoughTransform.
00870 - lti::orientationMap extracts the orientation of each pixel in an image
00871   and a relevance or "degree of truth" for each pixel based on gradient
00872   information, or optionally on the OGD filtering of the image.
00873 
00874 
00875 Two edge preserving filters are implemented:
00876 
00877 - lti::medianFilter classical median filter with an efficient histogram-based
00878   implementation for lti::channel8 objects.
00879 - lti::kNearestNeighFilter is based on the statistical k nearest neighbors 
00880   classification approach.  Each pixel is assigned the most frequent pixel
00881   in its neighborhood.
00882 
00883 \subsubsection morpho Morphological Operators
00884 
00885 Some classical and some unconventional morphological operations are
00886 already implemented:
00887 
00888 - lti::dilation and lti::erosion implement the basic morphological operators
00889 - lti::distanceTransform computes in a binary mask the shortest distance from
00890   a region pixel to a background pixel.
00891 - lti::skeleton constructs an homotopy preserving skeleton.
00892 - lti::maximumFilter assigns to each pixel the maximum value found in a given
00893   neighborhood.  A related functor extracts from an image all found 
00894   local maxima ( lti::localMaxima ).
00895 
00896 \subsubsection enhanc  Image Enhancement
00897 
00898 - lti::histogramEqualization is classical intensity histogram equalization 
00899   method to improve the contrast in an image.
00900 - lti::susanDenoise is NOT part of the LTI-Lib, but you can use it if you 
00901   accept the original conditions of use of the SUSAN algorithm.  It uses
00902   the SUSAN principles to remove noise in a gray-valued image.
00903 
00904 \subsubsection featExt Feature Extraction
00905 
00906 With feature extraction functors are meant objects that extract some
00907 descriptors from images or shapes.  
00908 
00909 Color feature extractors:
00910 
00911 - lti::brightRGB very simple color feature
00912 - lti::channelStatistics simple statistics (like min, max, average,
00913   etc.) of the channels of a color image in an arbitrary color space.
00914 - lti::chromaticityHistogram a classical illumination invariant color feature.
00915 - lti::histogramming1D is a very simple functor that constructs a 1D histogram
00916   of gray-valued channel.
00917 - lti::histogramRGBL extracts four 1D histograms for the color channels R, G, B
00918   and the luminance channel L, and concatenates them.
00919 
00920 Texture feature extractors:
00921 
00922 - lti::axOGDFeature is based on steerable filters (OGD).
00923 - lti::qmfEnergy computes the energy in each band of a wavelet decomposition
00924   of an image.
00925 
00926 Shape feature extractors:
00927 
00928 - lti::fourierDescritor is a classical shape descriptor.  It works with border
00929   point representation of the contour.
00930 - lti::curvatureFeature is a simple rotation invariant shape feature.  It
00931   works on gray valued images.
00932 - lti::orientationFeature is a weighted histogram of the orientation of
00933   the pixels in a gray valued image.
00934 - lti::regionShapeFeatures compute the coefficients of a basis
00935   function set for a given binary mask.  One of the modes used comes
00936   from the MPEG-7 standard.
00937 - lti::geometricFeatures computes many shape statistics, including the
00938   classical Hu moments.  It works on contours.
00939 - lti::huMoments computes the Hu Moments for regions of gray valued images 
00940   instead of contours.
00941 - lti::borderSignature extracts some features for a boundary points
00942   representation of a contours, given a reference point.
00943 - lti::curvatureScaleSpace extracts the CSS representation of a contour.  It
00944   can use this representation to generate a few shape feature vectors.
00945 
00946 Most functors listed above compute a descriptor for the whole image.  This 
00947 kind of descriptors are usually known as "global descriptors".  
00948 There are other kinds of them to describe only small regions of an image.
00949 To extract these "local features" you usually need to compute first interesting
00950 locations.  You can achieve this with lti::axLocalRegions
00951 (see also lti::locationSelector).  Following functors can be used to extract
00952 the local features:
00953 - lti::localColorFeature compute the mean color for a given number of slices
00954   of all locations given in a list.
00955 - lti::axOGDFeature is based on steerable filters (OGD).
00956 - lti::schieleCrowley6DFeature is used to extract local descriptors.
00957  
00958 \subsubsection featproc Feature Processing
00959 
00960 - lti::shiftInvariace computes a shift-normalized vector.
00961 - lti::principalComponents Principal Components Analysis extracts from
00962   a set of feature vector the principal components, where the higher
00963   variances are found.
00964 - lti::kernelPCA does a PCA analysis in a higher dimensional space, where
00965   the mapping of the points to the higher dimensional space is done using
00966   a lti::kernelFunctor.
00967 - lti::serialPCA computes sequentially the principal components of continously
00968   arriving data.
00969 
00970 \subsubsection reconstr 3D Reconstruction
00971 
00972 - lti::fundamentalMatrixSolverLMS computes the fundamental matrix given a
00973   few pairs of corresponding points in two images taken at different
00974   perspectives.
00975 - lti::frankotChellapa tries to extract a depth image from an intensity image.
00976 - lti::sfsBichselPentland is also a shape from shading algorithm.
00977 
00978 \subsection inout Input and Output
00979 
00980 - \ref imgfiles
00981 - \ref descfiles
00982 - \ref grabbers
00983 - \ref coding
00984 - \ref otherio
00985 
00986 \subsubsection imgfiles Reading and Writing Image Files
00987 
00988 - lti::loadImage, lti::saveImage are the functors you will usually use.  They
00989   understand PNG, JPEG and BMP file formats. 
00990 - lti::loadImageList can be used if you want to read several images files.
00991   The filenames of the images can be specified in a text file, a list of 
00992   filenames or all images in a directory. The images are loaded sequentially.
00993 
00994 If you need for some reason to limit the file format you want to read or
00995 write to just one, you can use:
00996 
00997 - lti::loadBMP, lti::saveBMP for the Windows Bitmap Format BMP
00998 - lti::loadPNG, lti::savePNG for the Portable Network Graphics format PNG
00999 - lti::loadJPEG, lti::saveJPEG for the JPEG format.
01000 
01001 For the last two file formats there are two implementations that can
01002 be used with the LTI-Lib.  We recommend the use of the JPEG-Lib and
01003 PNG-Lib implementations, which are part of the LTI-Lib.  The required
01004 libraries are usually installed in all Linux distributions.  It is
01005 faster, more robust and stable against incorrect files, and 
01006 they are open source too.
01007 
01008 The second implementation is NOT part of the LTI-Lib due to License problems.
01009 It is based on Mianos' code (Colosseum Builders C++ Image Library) and used
01010 per default in the Windows version of the LTI-Lib.  You can get them as extra
01011 functors from the download pages and you can use them only if you
01012 agree with their conditions of use.
01013 
01014 \subsubsection descfiles Reading and Writing Features
01015 
01016 Some tests require to save and load files containing tons of feature
01017 vectors.  This way you can separate the process of feature extraction
01018 from the training and test.  At this time following functors are provided:
01019 - lti::loadLnc and lti::saveLnc is a very primitive but easy to use file format
01020   that stores the feature vectors together with some elementary information.
01021 - lti::uciDataReader and lti::uciDataWriter read and write data using the
01022   format of the UCI standard data sets.
01023 
01024 \subsubsection grabbers Getting Images from Frame Grabbers
01025 
01026 A few functors to get images from frame grabbers are already implemented
01027 in the LTI-Lib.  They all inherit from lti::frameGrabber.
01028 
01029 - lti::quickCam (for Linux only)
01030 - lti::toUCam Philips WebCam (for Linux only)
01031 - lti::itiITIFrameGrabber (for Windows only)
01032 - lti::microEnablePulnix with Pulnix TMC6700 (for Windows and Linux)
01033 
01034 Remember to "activate" your frame grabbers in the
01035 <code>ltilib/src/io/ltiHardwareConfig.h</code> file or to define the
01036 appropriate preprocessor macros while compiling!
01037 
01038 \subsubsection coding Coding
01039 Coding and Decoding functors between different formats inherit from 
01040 lti::dataTransformer, (for example lti::asciiHexCodec or lti::runLengthCodec).
01041 
01042 \subsubsection otherio Other Input and Output Objects
01043 
01044 - lti::configFileHandler reads and writes files using the syntax common
01045   in the Windows and KDE configuration files.
01046 - lti::url allows you to easily retrieve information from the Internet
01047   just specifying the URL where your data is located.
01048 - lti::serial allows import and export of data through the serial port.
01049 
01050 If you need to read/write Standard Template Library (STL) containers
01051 include the header "ltiSTLIoInterface.h". It includes read and write
01052 methods for the following data structures:
01053 - std::list<T>
01054 - std::vector<T>
01055 - std::map<T,U>
01056 
01057 These methods only work if the types T,U implement the operator=().
01058 
01059 <hr>
01060 
01061 \section classifiers Classifiers
01062 
01063 Classifiers are used in pattern recognition applications.  They can be usually
01064 be trained with some training data, and later they can be used to test some
01065 learned properties, for example, to which class could belong a given point.
01066 A detailed description for these objects can be found in \ref docuClassifiers.
01067 
01068 - \ref superv
01069 - \ref unsuperv
01070 - \ref clastools
01071 
01072 \subsection superv Supervised Classifiers
01073 
01074 - lti::decisionTree 
01075 - lti::MLP Multi-Layer Perceptrons
01076 - lti::rbf Radial-Basis-Function Networks
01077 - lti::shClassifier is suggested by Schiele and Crowley to classify a huge
01078   number of local descriptors.
01079 - Support Vector Machines lti::svm require also kernel functors
01080   lti::kernelFunctor to define its operation mode.
01081 - Hidden Markov Models are implemented in lti::hiddenMarkovModel.  These can
01082   be trained with lti::hmmClassifier, which uses lti::hmmTrainer instances.
01083 
01084 \subsection unsuperv Unsupervised Classifiers
01085 
01086 - lti::SOFM Self-Organizing Feature Maps
01087 - There are several clustering algorithms implemented, like 
01088   lti::adaptiveKMeans, lti::fuzzyCMeans and lti::kMeansClustering.
01089 
01090 
01091 \subsection clastools Classification Tools
01092 
01093 
01094 - lti::combination allows to combine different classification results.
01095 - lti::sammonsMapping maps data from a high dimensional to a lower
01096   dimensional space while trying to preserve the inter-point
01097   distances.
01098 - lti::classificationStatistics produces several statistics for a
01099   classification test, including confusion matrices, n-th best recognition,
01100   recognition rates and so on.
01101 - lti::progressInfo is used to report the user the progress of a long
01102   computation.
01103 
01104 <hr>
01105 
01106 \section viewers Visualization and Drawing Tools
01107 
01108 - \ref draw
01109 - \ref view
01110 
01111 \subsection draw Drawing Tools
01112 
01113 - lti::draw is the basic object to draw simple geometric primitives on images.
01114 - lti::draw3D allows the projection of simple 3D geometric primitives on
01115   an image or channel.
01116 - lti::scene3D is a specialization of lti::draw3D, which remembers all steps 
01117   used while drawing.  This allows you to redraw a scene using new camera
01118   parameters.
01119 - lti::epsDraw allows you to draw simple geometric primitives on an 
01120   Encapsulated Postscript file.
01121 
01122 Visualization of Classification and Statistical Data
01123 - lti::classifier2DVisualizer generates colorful images to analyze how
01124   a classifier distinguish between different classes in a 2D space.
01125 - lti::sammonsMapping helps in the visualization of SOFM networks.
01126 - lti::draw2DDistribution plots sets of 2D points using different point
01127   representations and colors.
01128 - lti::hmmTrellisDiagram is helpful when working with Hidden Markov Models.
01129 - lti::hsvHistogramViewer visualizes 2D histograms of hue and saturation.
01130 - lti::labelAdjacencyMap analyzes a labeled-map (an integer valued channel8
01131   or matrix of integers) and creates a color image where the contrast of
01132   different adjacent regions is easier to be seen.
01133 
01134 Other tools used for visualization
01135 
01136 - lti::drawFlowField allows easy representation of optical flow results.
01137 - lti::expandVector 
01138 
01139 \subsection view Viewers
01140 
01141 - lti::externViewer is used to invoke in a very easy way an external
01142   application that is supposed to show the image.
01143 - lti::viewer is a <A HREF="http://www.gtk.org">GTK</A>-based object,
01144   which runs in an own thread, to allow the user a very easy
01145   way to visualize images, almost as easy as using the std::cout stream!
01146 - lti::fastViewer is still available only for Linux/X-Windows
01147   (for Microsoft Windows it is just an alias for the lti::viewer).
01148   It displays an image without refreshing or updating the window content or
01149   allowing any kind interaction.  It is used to debug iterative algorithms,
01150   where a view into the "evolution" of the algorithm might be required (for 
01151   example, with snakes).  It requires a X-Windows Server with 32-bits per pixel   color depth.
01152 - lti::histogramViewer displays 3D plots of the RGB color space for an image or
01153   a histogram.
01154 - lti::scene3DViewer is a simple way to view 3D scenes, allowing you to change
01155   with the mouse the camera position, zoom and other parameters.  See also
01156   lti::scene3D.
01157 <hr>
01158 
01159 \section system Operating System and Hardware related classes
01160 
01161 - lti::mutex and lti::semaphore are wrapper classes for the mutex and
01162   semaphores process synchronization concepts of the respective operating
01163   systems.
01164 - lti::thread is a wrapper class for the system threads.  Every object
01165   you want to be executed in a separate thread must inherit from this
01166   object.
01167 - lti::processInfo can be used to check for different system and process
01168   properties like free memory, processor frequency, processor load, etc.
01169 - lti::timer is used to measure time with micro-second resolution.
01170 - lti::passiveWait is a wrapper function for usleep or Sleep and expects
01171   a value in microseconds.  It sends the actual thread to the background for
01172   the given interval of time (passive wait).
01173 - lti::serial is a wrapper class to access the serial ports.
01174 
01175 <hr>
01176 
01177 \section genother Other Objects
01178 
01179 - lti::objectFactory is used to generate instances of classes.  It expects 
01180   the name of the required class in a string.
01181 - lti::className  provides methods for getting the class names of lti::objects
01182 - lti::typeInfo is a simple template class to ask for type norms and the
01183   floating point nature of a type.
01184 
01185 */
01186 
01187 #endif
01188 

Generated on Sat Apr 10 15:25:37 2010 for LTI-Lib by Doxygen 1.6.1