I’ve finally come around to “clean-up” some old project I’ve had lying around for a few months and upload it. I’m talking about some Panorama Stitching code I wrote for our participation in Microsoft’s Imagine Cup. I’m suppressing all memories of it since it was an epic fail, but at least I still have learnt quite a bit about computer vision and image processing - enough to know that it’s incredibly hard to come up with stable algorithms and kudos to anyone working in the field.
Here is the code dump: PanoramaStitching.zip
It contains many small projects which usually use multiple pictures as inputs or multiple webcams (depending on code or chosen preprocessor macros).
The most advanced prototype is the SnapshotHomographyConfigurator, which allows you to determine homographies between multiple cameras at once by marking shared points between the images.
Another one which works okay is the PanoramaStitching project. It creates panoramas using spherical or cylindrical projections of the input images. However, it is very sensitive to translations of the viewpoint. It works quite well with optimal/artificial images:
(Note: the small misalignment on the right stems from moving the player position slightly. Usually you use a deghosting algorithm to remove such misalignments.)
I’ve used OpenCV for image processing and yaml for loading and storing settings (and also rapidxml). OpenCV’s C++ wrapper is pretty awesome. It’s not perfect but it makes life a lot easier.
Stay tuned for more code/project uploads soon :-)
PS: Here are the links to some papers which proved useful to me (I didn’t implement most of them though, and some are implemented in OpenCV already):
- Eliminating Ghosting and Exposure Artifacts in Image Mosaics
- Pyramidal Implementation of the Lucas Kanade Feature Tracker - Description of the algorithm
- Image Alignment and Stitching: A Tutorial
- Seamless Image Stitching by Minimizing False Edges
- Construction of Panoramic Image Mosaics with Global and Local Alignment
- Image Mosaicing for Tele-Reality Applications
- Good Features to Track