/ImageFeatureDetector

A C++ Qt GUI desktop program to calculate Harris, FAST, SIFT and SURF image features with OpenCV

Primary LanguageC++GNU General Public License v3.0GPL-3.0

Image Feature Detector

Image Feature Detector (IFD) is a desktop computer program with an intuitive graphic user interface aimed to calculate and show image features and descriptors obtained with some of the most usual image feature detectors in computer vision: Harris, FAST, SIFT and SURF. It is programmed in C++ with the Qt framework. To calculate features IFD makes use of the OpenCV libraries.

Table of Contents

  1. Introduction
  2. Details
  3. Compiling the project
    1. Resolving dependencies
  4. Contribute
  5. License

Introduction

This program was originally part of my end of degree project Image Features Extraction for Mobile Robots Navigation of my Telecommunications Degree, presented at the Cáceres Polytechnic School of the University of Extremadura, Spain, on February 2011.

The project memory and presentation are available for download on PDF from the doc folder. They are published under Creative Commons Attribution-Share Alike license. If you want to have a laugh and guess how terrible my English was just a few years ago these PDFs are the right material to find out.

From the beginning of the project in 2011 to 2015 the project was hosted on Google Code. In 2015 I moved it to GitHub.

The image detectors used in IFD have been the result of complex research projects. The papers which presented them to the scientific community are:

Details

The program let you choose an image stored on your computer and apply one of the four feature detectors. The obtained descriptors are overimposed in red on the image, and the number of them and the calculation time is shown on the status bar.

Pictures can be taken directly from a webcam within the program.

FAST features can be calculated in real time from the video stream of a webcam.

The input parameters for every detector can be tweaked from the Detector parameters bar.

Harris

FAST

SIFT

SURF

All four detectors can be compared at the same time with the Do4! option. A new window will pop up showing four images with a different detector applied to each picture. The parameter values of every detector are those ones set on each detector parameters bar.

The time shown only represents the time taken to calculate the features on an image which has already been prepared to be analised. That is it, it does not take into account the extra time needed to transform the images from 8U3C/8U4C (colour) to 8U1C (black and white, the detector's input requires an image on this format) and the time taken to paint the red circles showing the detected features. My guess™ is that it is a neglectable amount of time.

Compiling the project

IFD is a simple C++ project. It only has 9 cpp classes, 8 h headers and 12 ui Qt GUI files. Once you have the dependencies solved compiling the code is a matter of seconds.

To configure the project building and binary linking IFD makes use of CMake. Thanks to this IFD can be built on Linux, macOS and Windows. The screenshots shown here have been taken from a computer running Linux with KDE 5.

Resolving dependencies

IFD only makes use of two external libraries: Qt framework (v5) and OpenCV (v3):

  • Installing Qt: on Linux and Debian-based distributions you do not need to compile Qt. The easiest and fastest way to install Qt is with apt-get.
  • Installing OpenCV: due to some OpenCV copyrighted code, the modules containing SIFT and SURF detectors aren't available on Debian repositories like the rest of OpenCV modules. This means you will have to compile OpenCV libraries by yourself. By and large you will need to download the main OpenCV modules plus the OpenCV contrib ones (the code containing SIFT and SURF detectors), and when you are about to compile the main OpenCV modules set the OPENCV_EXTRA_MODULES_PATH CMake variable to <opencv_contrib>/modules. Better explained on the OpenCV contrib repo.

On Unix machines, once you have these two dependencies solved, from the shell run:

cd <imagefeaturedetector_root_folder>
mkdir CMakeFiles
cd CMakeFiles
cmake ..
make

and in a minute IFD should be compiled and ready to be executed in the <imagefeaturedetector_root_folder>/bin folder. CMakeFiles is an empty folder created to store the temporary files created by CMake so that IFD root folder remains clean.

Is there any compiled version of IFD ready to use like a deb package or a Windows exe?

I have tried to build a Linux Debian deb package for x86-64 machines. But after compiling statically OpenCV libraries to include them together with the IFD binary, when building IFD and at linking time make complains time after time about endless number of missing libraries. Once all missing libraries have been added to the make -lanotherlibrary command, again a new dependency misses, thus meaning I'm probably in the middle of a deep dependency hell. Some day I will find out the right order of library inclusion and will be able to generate a deb package.

Contribute

If you have an awesome pull request no matter whether it is a new feature or a bug fix, send it over! Your contribution to the computer vision community is priceless.

License

Image Feature Detector makes use of the GNU GPL v3.0 license. Remember to make public your project source code when reusing IFD.

Icons come from the KDE Plasma 5 Breeze theme: https://github.com/KDE/breeze-icons.