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