 The ICL is a computer-vision library, so it provides of course a large set of computer-vision functions. However a lot of additional components (like the Qt-GUI wrapper API \iclclassref{Qt}{GUI} or the program argument evaluation tools \iclheaderref{Utils}{ProgArg}) turned out to be very useful even for general purpose programming. 

\section{Large variety of simple-to-use Algorithms}
As IPP developers supposable thought a lot about the set of algorithms that must be provided in a computer-vision toolkit, a first step in ICL implementation was to provide simple and \emph{care-free} wrappers for fundamental image manipulation functions provided by the IPP. Manipulation functions can be split into several subsets to facilitate the overview:
\begin{itemize}

\item Data copy and convert functions.\\
\iclnamespaceref{Core}, \iclclassref{Core}{Img}, \iclclassref{Core}{ImgBase}

\item Statistic functions (like min- or max elements/indices) or mean pixel value etc.\\
\iclnamespaceref{Core}, \iclclassref{Core}{Img}, \iclheaderref{Core}{Mathematics}

\item Arithmetical operations (e.g. pixel-wise addition of two images etc)\\
\iclclassref{Filter}{UnaryArithmeticalOp}, \iclclassref{Filter}{BinaryArithmeticalOp}.

\item Logical operations (e.g. pixel wise OR etc..)\\ 
\iclclassref{Filter}{UnaryLogicalOp}, \iclclassref{Filter}{BinaryLogicalOp}.

\item Affine transformations (pixel locations are changed)\\
\iclclassref{Filter}{AffineOp}, \iclclassref{Filter}{RotateOp}, \iclclassref{Filter}{ScaleOp}, (...), \iclclassref{Filter}{WarpOp}  

\item Thresholding and comparison functions.\\
\iclclassref{Filter}{UnaryCompareOp}, \iclclassref{Filter}{BinaryCompareOp}, \iclclassref{Filter}{ThresholdOp}, \iclclassref{Filter}{LocalThresholdOp}, 

\item Morphological operations\\
\iclclassref{Filter}{MorphologicalOp}

\item Convolution functions.\\
\iclclassref{Filter}{ConvolutionOp}, \iclclassref{Filter}{DynamicConvolutionOp}

\item Proximity-Measurement functions (E.g. normalized cross correlation)\\
\iclclassref{Filter}{ProximityOp}

\item Canny-Edge-Detector\\
\iclclassref{Filter}{CannyOp}

\item Integral-Image computation\\
\iclclassref{Filter}{IntegralImgOp}

\item Local-Threshold operations\\
\iclclassref{Filter}{LocalThresholdOp}

\item Color-Format conversion\\
\iclclassref{CC}{Converter}, \iclheaderref{CC}{CC}

\item Lookup table operations\\
\iclclassref{Filter}{LUTOp}, \iclclassref{Filter}{LUT2D}, \iclclassref{Filter}{LUTOp3Channel}

\item Disparity image computation (using SVS-Wrapper)\\
\iclclassref{Algorithms}{SVS}

\item Blob detection and tracking algorithms\\
\iclclassref{Blob}{ColorBlobSearcher}, \iclclassref{Blob}{ReginBasedBlobSearcher}, \iclclassref{Blob}{PositionTracker}

\item Connected component analysis\\
\iclclassref{Blob}{RegionDetector}

\item Image-File grabber and writer support for most common image formats (.ppm,.pnm,.pgm,.icl: native, many many other formats using an libmagick++-Wrapper)\\
\iclclassref{IO}{FileGrabber}, \iclclassref{IO}{FileWriter}, \iclclassref{IO}{GenericGrabber}

\item Camera grabber support for a large set of cameras (FireWire-cams using libdc1394, Phillips-Webcam-Grabber, v4l and v4l2 Grabber using a wrapper the Unicap-Library \footnote{http://www.unicap-imaging.org/} as well as a grabber for SwissRanger\footnote{www.mesaimaging.com}\todo{fix?} cameras\\
\iclclassref{IO}{DCGrabber}, \iclclassref{IO}{PWCGrabber}, \iclclassref{IO}{UnicapGrabber}, \iclclassref{IO}{GenericGrabber}, \iclclassref{IO}{SwissRangerGrabber}

\item XCF\footnote{https://code.ai.techfak.uni-bielefeld.de/trac/xcf}-grabber and publisher)\\
\iclclassref{IO}{XCFMemoryGrabber}, \iclclassref{IO}{XCFPublisherGrabber}, \iclclassref{IO}{XCFServerGrabber},
\iclclassref{IO}{XCFPublisher}, \iclheaderref{IO}{XCFUtils}   

\item Image visualization and annotation using Qt\\
\iclclassref{Qt}{GUI}, \iclclassref{Qt}{ICLWidget}, \iclclassref{Qt}{ICLDrawWidget}, \iclclassref{Qt}{ICLDrawWidget3D},

\item Prototyping API ICLQuick\\
\iclnamespaceref{Quick}

\item Image annotation and pixel based drawing functions\\
\iclnamespaceref{Quick}

\item Camera calibration toolkit (for extrinsic and for intrinsic Camera parameters like, radial distortion)
\iclnamespaceref{Geom} and ICL-example applications \inlinecode{icl-extrinsic-camera-calibration} and \inlinecode{icl-intrinsic-camera-calibration}

\item Converters for OpenCVs \icode{CvMat} and \icode{IplImage} structures that allow easy use of OpenCV functions\todo{Not yet implemented!}.\\
\iclheaderref{OpenCV}{OpenCV} 
\end{itemize}



\section{Well-chosen selection of ready-to-use Tools}
In addition to the set of functionalities regarding image processing, ICL provides a variety of usability tools and classes, that facilitate application development significantly. Here is a short listing:

\begin{itemize}
\item \textbf{ICLUtils package:} \iclpackageref{Utils}:\\
\begin{itemize}
        \item Thread and Mutex class (wrapping pthread functionalities)\\
          \iclclassref{Utils}{Thread} \iclclassref{Utils}{Mutex}

        \item Matrix/Vector class providing some BLAS functionalities\\
          \iclstructref{Utils}{DynMatrix} \iclstructref{Utils}{DynVector}

        \item FixedMatrix/Vector class (providing matrix dimensions as template parameters and therewith allowing compilers a lot of optimizations)\\
          \iclclassref{Utils}{FixedMatrix} \iclstructref{Utils}{FixedColVector} \iclstructref{Utils}{FixedRowVector}

        \item Time and Timing classes including benchmarking times\\
           \iclclassref{Utils}{Time} \iclclassref{Utils}{Timer} \iclclassref{Utils}{StackTimer}

        \item String Tokenizer class\\
           \iclclassref{Utils}{StringTokenizer}

        \item Shallow- and Un- copyable interfaces\\
           \iclclassref{Utils}{Uncopyable} \iclclassref{Utils}{ShallowCopyable}

        \item The so called \emph{ProgArg} environment, that allows to define and extract program parameters\\
           \iclheaderref{Utils}{ProgArg}
           
        \item Clipped data type conversion using the \inlinecode{clipped_cast}-template\\
           \iclheaderref{Utils}{ClippedCast}

        \item ICL-related exceptions\\
           \iclheaderref{Utils}{Exception}

        \item (Debugging)-Macros \\
           \iclheaderref{Utils}{Macros}

        \item StringUtils environment for conversion of common data-types into strings and vice versa \\
        Including some useful utility functions e.g. a regular-expression matcher.
          \iclheaderref{Utils}{StringUtils}

        \item A set of most common data types like Rects, Lines, Ranges, and Points \\
          \iclclassref{Core}{Rect} \iclclassref{Core}{Line} \iclstructref{Core}{Range}
          \iclclassref{Core}{Point} \iclclassref{Core}{Point32f} (...)

          \item A simple DOM-based XML parser and creator.\\
          \iclclassref{Utils}{XMLDocument} and \iclclassref{Utils}{XMLNode}

        \item An xml-configuration file class (ConfigFile). That allows simple definition and extraction of configuration parameters.\\
          \iclclassref{Utils}{ConfigFile}

\end{itemize}

\item \textbf{ICLCore package:} \iclpackageref{Core}\\
\begin{itemize}

        \item Statistic functions and random number generators\\
          \iclheaderref{Core}{Random}

        \item Mathematic / and statistic functions\\
          \iclheaderref{Core}{Mathmatics}

\end{itemize}

\item \textbf{ICLIO package:} \iclpackageref{IO}\\
\begin{itemize}
        \item A simple File implementation providing reading and writing of files as well as reading and writing zipped file (using a wrapper of libz)\\
           \iclclassref{IO}{File}
        
        \item A FileNameGenerator structure that allows generation of enumerated file names (e.g. for writing a list of files)\\
           \iclclassref{IO}{FileNameGenerator}

        \item A FileList structure that expands file patterns (e.g. 'images/*.jpg') to a list of files that match to the pattern.\\
           \iclclassref{IO}{FileList}
\end{itemize}


\item \textbf{ICLGeom package:} \iclpackageref{Geom}\\
\begin{itemize}
        \item Camera and Scene implementation that allows 3D-Modelling and polygon based rendering (no raytracing!!, Z-buffering-support only when using OpenGL) \\
             \iclclassref{Geom}{Camera} \iclclassref{Geom}{Scene2}

        \item Object interface that enables to handle objects within a scene\\
        \iclclassref{Geom}{Object2}
\end{itemize}

\item \textbf{ICLAlgorithms package:} \iclpackageref{Algorithms}\\
\begin{itemize}
        \item A generic N-to-M dimensional SOM (self organizing map) implementation\\
        \iclclassref{Algorithms}{SOM} \iclclassref{Algorithms}{SOM2D}
\end{itemize}

\item \textbf{ICLQt package:} \iclpackageref{Qt}\\
\begin{itemize}
        \item A powerful Qt-Wrapper for simple and off-the-cuff creation of most complex GUI's components. Here about 20 common GUI components\footnote{including sliders and buttons as well as image-visualization and augmentation compenents} can be layouted and synchronized very conveniently\\
          \iclclassref{Qt}{GUI}

        \item A GUI-Widget to change configuration file entries at run-time.\\
          \iclclassref{Qt}{ConfigFileGUI}
\end{itemize}

\item Remaining packages are ICLCC \iclpackageref{CC}, ICLQuick \iclpackageref{Quick}, ICLFilter \iclpackageref{Filter} and ICLBlob \iclpackageref{Blob} and ICLOpenCV \iclpackageref{OpenCV}\\
The most common functions in this packages are for image processing only, so they are not mentioned in this section.


\end{itemize}

