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.
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:
- Harris: A Combined Corner And Edge Detector, by Chris Harris and Mike Stephens, Roke Manor Research.
- FAST: Machine learning for high-speed corner detection, by Edward Rosten and Tom Drummond, University of Cambridge.
- SIFT: Distinctive Image Features from Scale-Invariant Keypoints, by David G. Lowe, University of British Columbia.
- SURF: SURF: Speeded Up Robust Features, by Herbert Bay, Andreas Ess, Tinne Tuytelaars and Luc Van Gool, ETH Zurich and K. U. Leuven.
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.
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.
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.
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.
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.
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.