% % chapter introduction % This document is intended as a tutorial for the \textbf{I}mage \textbf{C}omponent \textbf{L}ibrary (ICL). ICL is a C++-computer vision library. The tutorial explains different important aspects that are needed in order to work with ICL. The following outline gives a concise overview of this document\footnote{ \textbf{Note:} In this document we use cross-references to the ICL-Doxygen\footnote{see www.doxygen.org} documentation \iclrefref. This links will be displayed like this: \iclclassref{Core}{Img}\\ As we will see later on, the ICL is partitioned into currently 10 packages. To ease orientation, each reference contains an additional package label. If these links don't work, please ensure that you have build the ICL-documentation. Additionally it might be necessary to rebuild this document after adapting the \inlinecode{icl-file-root.tex} file located in \inlinecode{ICL/tutorial} to your current ICL installation directory. }: \begin{itemize} \item [Chapter \ref{cha:what-is-the-icl}] \textbf{What is ICL:}\\ The underlying goals and ideas of ICL are presented. \item [Chapter \ref{cha:features}] \textbf{Feature Overview:}\\ ICL provides a large set of features, packages, algorithms and utility classes. In order to motivate the reader to continue, some highlights of ICL are presented here. \item [Chapter \ref{cha:what-is-an-image}] \textbf{What is an Image?:}\\ A representation of an image is fundamental for the development of reusable computer vision algorithms. The ICL \icode{ImgBase} \iclclassref{Core}{ImgBase} and \icode{Img} \iclclassref{Core}{Img} classes are introduced. In particular we show why we use template classes in combination with inheritance and what problems can arise from this. \item [Chapter \ref{cha:the-image-class}]\textbf{Developing an Image Class}\\ In this chapter, the development of the two fundamental ICL C++ image classes is described in a step-by-step manner. In particular, we show how the two classes are linked together. \item [Chapter \ref{cha:img-base-functions}]\textbf{The ImgBase Class:}\\ The essential functions of the \inlinecode{ImgBase}-class are described in this chapter in detail. \item [Chapter \ref{cha:img-class-functions}]\textbf{The Img-Template Class:}\\ This chapter explains the mechanism of how to access the pixels of an image instance. Each technique to access pixels has its advantages and disadvantages. We provide a lot of examples and benchmarks to evaluate them. \item [Chapter \ref{cha:icl-packages}]\textbf{ICL Packages (An Overview):}\\ ICL currently consists of a set of 10 sub-packages that partly depend on each other. The contents and the basic ideas behind these packages are introduced and explained here. Furthermore, common interfaces are discussed. %\item [Chapter \ref{cha:templates}]\textbf{C++ Templates:}\\ To make later chapters more accessible, C++ templating techniques are explained in detail. Particularly, it will be shown, how templates are translated by the compiler, and how templates can be exploited\\ %\small{\textbf{i)}} To reduce the amount of redundant source code\\ %\small{\textbf{ii)}} To accelerate code without using constants for each possible parameter of functions. \item \textbf{Simple Image Processing:}\\ Details on how simple image processing algorithms can be implemented using ICL are presented. \item \textbf{Graphical User Interfaces (GUI):}\\ The ICLQt package provides a powerful wrapper for Qt-based applications. In this chapter we show, how simple and complex GUIs can be created and in particular, how user input can be synchronized with the applications worker thread. \item \textbf{Writing Advanced Applications:}\\ Some advanced programming techniques are presented here. These include, but are not limited to, writing applications with GUI support, managing several threads and handling program arguments. \item \textbf{ICL-Development:}\\ICL developers will need a deeper insights into the file structure and the makefile system. This information is provided in this chapter. \item \textbf{ICL-Projects:}\\Development of ICL-based applications can be performed very conveniently using a special makefile system and directory structure provided by the \emph{ICLProjects} svn repository. How to access these projects, how to add projects and how to include other projects and external libraries is presented in this chapter. \end{itemize} We now examine the core features and design principles of ICL.