CVR-Lib last update 20 Sep 2009

cvrHierarchy.h

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

Generated on Sun Sep 20 22:07:59 2009 for CVR-Lib by Doxygen 1.5.8