ViSP moving-edges tracker provide real-time tracking capabilities of points normal to the object contours. Such a tracker allow to track a line, an ellipse or more complex objects using model-based approaches.
All the material (source code and video) described in this tutorial is part of ViSP source code and could be downloaded using the following command:
With ViSP you can track a line using moving edges. The following example code available in tutorial-me-line-tracker.cpp shows how to use ViSP vpMeLine class to this end.
Images that are processed could be acquired from a firewire camera on Unix or Windows, of from an usb camera under Unix. That is allowed by including the grabber headers.
#include <visp3/sensor/vp1394CMUGrabber.h>
#include <visp3/sensor/vp1394TwoGrabber.h>
#include <visp3/sensor/vpV4l2Grabber.h>
To display these images we then include the headers of the viewers.
#include <visp3/gui/vpDisplayGDI.h>
#include <visp3/gui/vpDisplayOpenCV.h>
#include <visp3/gui/vpDisplayX.h>
The Graphical Display Interface (GDI) allows to display images under Windows, while X11 allows this feature under unix-like systems.
Finally, to track a line with the moving edges, we include the header of the vpMeLine class.
#include <visp3/me/vpMeLine.h>
In the main() function, The source code is build only if one of the grabbers is available.
#include <visp3/me/vpMeLine.h>
Here we create a gray level image container I that will contain the images acquired by our camera.
Then, we create a grabber instance, first for a firewire camera under Unix if libdc1394 3rd party is installed, secondly for a firewire camera under Windows if CMU1394 3rd party is installed, next for an usb camera under Unix if none of the previous 3rd party are installed and if libv4l is installed, and finally with OpenCV. The Tutorial: Image frame grabbing gives more details concerning the framegrabbing.
We then initialize the moving edges parameters used later by the tracker. From the previous position of a moving edge, we are tracking its new position along the normal of the contour with a range of 25 pixels. For each pixel along the normal we will compute the oriented convolution. The pixel that will be selected by the moving edges algorithm will be the one that has a convolution higher than 15000. Between two consecutive moving edges on the contour we keep a space of 10 pixels.
We then, create an instance of the vpMeTracker class that will track our line. We initialize the tracker with the previous moving-egdes parameters. We allow also the tracker to display additional information on the viewer overlay. The user has than to initialize the tracker on image I by clicking on two points located on the line to track.
Once the tracker is initialized, we enter in a while loop where we successively acquire a new image, display it, track the line, display the tracking results and finally flush the overlay drawings in the viewer.
With ViSP you can also track an ellipse using moving edges. The following example code available in tutorial-me-ellipse-tracker.cpp shows how to use ViSP vpMeEllipse class to this end.
This example is very similar to the one presented in Line tracking. It differs only in the name of the class and its header that is used to allow ellipse tracking: