\section{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. 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) 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, 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.

It is often recommended 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, 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 the careful color calibration is required for the
algorithm to function properly. If the HSV interval of the targeted color is
too narrow, then the algorithm might miss the ball; if the interval is too
wide, then 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 this chapter. To conclude, we found this algorithm
to be robust enough for our purposes, if the sensible color calibration was
provided.

\section{Goal detection}

The goal detection presented itself as a more difficult task. The color of the
goal is white, and there are generally many white areas in the image from the
robot camera, which have area larger than that of the image of the goal, for
example the white field lines and the big white wall in the room with the
field. To deal with the multitude of the possible goal candidates, we
propose the following algorithm.

First, all contours around white areas are extracted by using a procedure
similar to that described in the section on ball detection. Only $N$ contours
with the largest areas are considered further (in our experiments it was
empirically determined that $N=5$ provides good results).
