\chapter{Introduction}
\label{ch:intro}

%TODO: A bit more here about the history of computer vision - a bit of a gentler introduction

During the last decade or so, some applications of computer vision, such as the automatic recognition of car number-plates, optical character recognition and in-camera face detection have become ubiquitous. This is thanks both to the significant increases in computing power available in increasingly small devices, and the quality of work undertaken by academic researchers and commercial organisations in labs around the world. Whether one likes systems like the congestion charge cameras in London or not, these systems only exist because the machines can do the bulk of the vision processing automatically and accurately. Now that machines can demonstrably perform useful vision tasks, we can think of ever more applications for them to work on. Some are completely new, such as the interactive window displays now showing on the streets of Tokyo or the foyers of Harrods. As machine vision breaks out from military and research circles and into the mainstream, new topics of research arise, based on the desire to produce these systems more easily.

While there exists an established range of excellent techniques for extracting useful information from images, they are not user-friendly in the sense that a layman can develop a useful system in a short space of time, although it is by no means impossible. In some ways, an ideal layman is a computer, which can be set to work tirelessly developing a solution with unlimited patience. There are many such \emph{machine-learning} algorithms which can be employed to do this. However, almost all of these are unable to operate directly on the pixel data, requiring some preceding feature extraction stage amounting to a preconception.  One technique that can work directly with the pixels is Genetic Programming (GP) \cite{EvoVision:Koza:1992}, an adaption of the classic genetic algorithm \cite{EvoVision:Goldberg:1989} which \emph{evolves} programs (parse trees) instead of sets of numerical coefficients. Over the last fifteen years, researchers have been exploring how these evolved programs may be used to solve all manner of problems; some of which outperform human inventions. In this thesis, we will explore how this promising and flexible learning algorithm can be applied in order to learn vision systems automatically.

Just as modern computing power makes heavy tasks such as image processing increasingly practical, it also makes the automatic learning of systems more feasible. Solutions developed using some machine learning techniques have already been shown to produce excellent results on certain computer vision tasks, for instance the work by Viola and Jones on face detection \cite{EvoVision:Viola-Jones:2004}. It is the aim of this thesis to explore the extent to which certain vision tasks can be learned automatically (or with minimal human input) by a generic system, and whether the GP-learned solutions are any good from a practical point of view. The feasibility, accuracy and capabilities of vision systems developed using Genetic Programming will be described, analysed and compared to other systems. 

This research is concerned with the production of complete computer vision systems using evolutionary learning techniques. Although a number of working solutions for specific problems have been created by other researchers, they are often highly specific to the problem domain. These solutions represent a proof of concept as opposed to a working, generic system which can solve problems automatically without the need for a great deal of human intervention. 

%TODO: Definition, or explanation of generic vision

%TODO: Challenges faced

\section{Contributions}
During the course of this research, the author has developed an architecture which permits a variety of vision problems to be solved. The end-user need only define the problem; and the work of designing the system is left to the software.

In order to facilitate experiments investigating parts of the GP system itself, a complete Genetic Programming toolkit was developed. This was undertaken both for reasons of convenience, and because the author wanted to make use of good approaches proposed in the GP literature. The system is implemented in Java, an ideal language for the production of abstract tools. The cross platform nature of Java allows our systems to be deployed by anyone with a computer and virtual machine installed, on any operating system. Our software is all freely available online.

Using this software, the author has produced solutions for several multi-stage problems collected from real world situations, some using our generic system, and others using a combination of GP evolved solutions and standard image processing techniques.

The author has developed a new classification scheme using Genetic Programming, termed GP by Partial Solutions, which has been shown to be significantly faster to evolve than other Genetic Programming classifiers on certain
problems. A similar system for developing classifiers using parallel processing other partial solutions has been developed.

The author has investigated different means of ensuring that the data passed to the learning system is optimal and compared them empirically. Investigations into ideal parameters for GP systems have been made.

\section{Thesis Structure}
In Chapter \ref{ch:cvsurvey} the wider field of computer vision and pattern recognition is introduced. A number of techniques commonly employed in computer vision are described and assessed. Chapter \ref{ch:gpsurvey} completes our review of the literature with a thorough introduction to the field of Genetic Programming  and describes some of the key research made by Genetic Programmers over the past fifteen or so years. A number of key decisions made while producing our own GP toolkit are justified.

In Chapter \ref{ch:gpcomparison} we compare how a GP system performs relative to other machine learning systems, as part of our justification for using GP for our generic system.

Later Chapters concern how one might develop a vision system using Genetic Programming. We don't believe it possible to evolve a complete vision system during the course of a single evolutionary run. Therefore early it on it was decided to create a vision system comprising two stages, the first concerned with low level vision tasks, and the second with classification.The low level side is discussed in Chapter \ref{ch:low-level}; Chapter \ref{ch:gp-classification} covers how to use Genetic Programming in order to generate classifiers and other decision making software.

Chapter \ref{ch:vision-system} covers how GP can be used to produce a working vision system. Finally, in Chapter \ref{ch:applicability} both the capabilities the limitations of this vision architecture are explored.
