Automatic feature detection is an important tool in the field of image processing and computer vision. It is a key step in many practical applications such as object recognition, image reconstruction, vision-based positioning and navigation of robots, camera calibration, etc. Features are key locations in an image typically associated with distinctive points, such as corners, lines, or blobs. The objective of an automatic feature detection application is to extract relevant features from an input image. A desirable property of any feature detection algorithm is repeatability, the ability to find the same features of the object or scene, even under different viewing conditions (images of same object might differ in angle, light intensity, etc). Besides detecting features, typical applications attempt to represent each feature by using a local descriptor, a vector that contains relevant image information about the area of the image where the feature is located. If the practical application requires matching of features in more than one image, this is usually done by comparing the feature descriptors. The descriptors should be distinctive, thorough and robust to noise since different images may not have all the same features. One of the current standards in feature detection and description is the Speeded Up Robust Features (SURF) algorithm. There are several implementations of this algorithm, both with closed and open source, but they are typically geared towards speed and practical applications and therefore do not allow for easy experimentation or prototyping in an academic setting. The goal of this project is to analyze the SURF algorithm and to implement it in a way that is accessible and allows for in-depth study of the algorithm. To this end we will use the MATLAB programming language to develop our implementation of the algorithm.