last update 20 Sep 2009 |
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