\section{Ball Detection}
\label{p sec ball detection}

The very first task that needed to be accomplished was to detect the ball,
which is uniformly red-colored and measures about 6 cm in diameter. We decided
to use a popular algorithm based on color segmentation \cite{ball-detect}. The
idea behind this algorithm is to find the biggest red area in the image and
assume that this is the ball. First, the desired color needs to be defined as
an interval of HSV (Hue-Saturation-Value) \cite{hsv} values. After that, the
image itself needs to be transformed into HSV colorspace, so that the regions
of interest can be extracted into a \textit{binary mask}. The contours of the
regions can then be identified in a mask \cite{contours}, and the areas of the
regions can be calculated using the routines from the OpenCV library. The
center and the radius of the region with the largest area are then determined
and are assumed to be the center and the radius of the ball.

\begin{figure}[ht]
  \includegraphics[width=\textwidth]{\fig ball-detection}
  \caption[Ball detection]{Ball detection. On the right is the binary mask}
  \label{p figure ball-detection}
\end{figure}

It is sometimes recommended \cite{ball-detect} to eliminate the noise in the
binary mask by applying a sequence of \textit{erosions} and \textit{dilations},
but we found, that for the task of finding the \textit{biggest} area the noise
doesn't present a problem, whereas performing erosions may completely delete
the image of the ball from the mask, if it is relatively far from the robot and
the camera resolution is low. For this reason it was decided not to process the
binary mask with erosions and dilations, which allowed us to detect the ball
even over long distances.

The advantages of the presented algorithm are its speed and simplicity. The
major downside is that a careful color calibration is required for the
algorithm to function properly. If the HSV interval of the targeted color is
too narrow, the algorithm might miss the ball; if the interval is too
wide, other big red-shaded objects in the camera image will be detected as
the ball. A possible approach to alleviate these issues to a certain degree
will be presented further in the section \ref{p sec field detect}. To
conclude, we found this algorithm to be robust enough for our purposes, if a
sensible color calibration was provided.
