 ICL is a computer-vision library, therefore it provides a set of computer-vision related functions. However, a lot of its components (e.g.,the Qt-GUI wrapper API \iclclassref{Qt}{GUI} and the program argument evaluation tools \iclheaderref{Utils}{ProgArg}) turned out to be very useful for general purpose programming. 

\section{Large Variety of Simple-to-Use Algorithms}
It is assumed that Intel IPP developers thought hard about the essential components needed in a computer-vision toolkit. With this in mind ICL provides implementations of simple wrappers for most of these essential components. As previously mentioned, fallback implementations are provided for nearly all of these components in cases where Intel IPP is not available.\\
ICL's computer-vision related functionalities can be grouped into the following subsets:  

\begin{itemize}

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

\item Statistic functions (e.g.,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)\\
\iclclassref{Filter}{UnaryArithmeticalOp}, \iclclassref{Filter}{BinaryArithmeticalOp}.

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

\item Affine transformations (i.e., 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, plus 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{http://www.mesa-imaging.ch} 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 image processing functionalities, ICL provides a variety of usability tools and classes that significantly facilitate application development. The following list gives a concise overview:

\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), which provides a simple interface for creation of and access to 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 for putting visual objects into 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 The 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 these packages are specific to image processing and therefore are not presented in this section.


\end{itemize}

