Introduction

This is the work in progress list of possible projects for the Google_SoC_2007

Panoramic imaging is a very broad field and touches many different areas of expertise, such as photography, computer vision, art and programming.
There is a thriving community with experience from arts to science that provides many interesting ideas and explores new territory in panoramic imaging. In addition to the mentors, this open community will provide good support and innovative ideas.

Generally, all development should done with multiple platforms in mind (at least Windows, OSX and Linux/Unix). We have an open communication culture via mailing-lists and mostly develop using C and C++.

The project below are just suggestions. If you are an interested student and have questions or new ideas, please let us know on the relevant Discussion_lists, for example panotools-devel.

Development style

Most of the projects below are related to Hugin, and some also relate to Panotools or tlalli. Hugin is mostly written in C++, and uses the VIGRA image processing library to support different types of images (for example, 8bit, 16bit and float (HDR) images). The core functionality is implemented in a platform independent C++ library, which is used by the GUI based on wxWidgets toolkit, and the command line programs (nona, fulla).

The development of the projects should take place in a separate branch of the projects CVS (or SVN) repository. Communication with the mentors should usually happen through the appropriate development mailing list. All code should work on the major platforms supported (Linux, OSX, Windows).

Possible Projects

Intuitive yet powerful GUI for panorama creation

Goal: Redesign/Reimplement the graphical user interface of the premiere open source panoramic imaging suite, Hugin, to increase ease of use, and provide better access to its unmatched capabilities. Currently the GUI is written using wxWidgets, which has proven to have slightly different behaviours on different platforms, especially with a complex GUI such as the one of Hugin. This is very annoying and a lot of time has been spent on minor issues such as making the GUI look good on all platforms with different font sizes etc. Therefore two steps are possible:

Rewrite the whole GUI using QT (which is very consistent even across platforms, and has (IMHO) a much nicer API). This is a lot more work, and not all functionality of the current GUI can be recreated during the Summer of Code, but it will provide a better platform to build onto in the future. It is also possible to implement the GUI logic in a scripting language such as Ruby or Python. This project should only be tackled by a student who has experience in developing non-trivial GUI applications with QT. The GUI and core panorama code are already separated into different libraries.

Enhancing and integrating manual and automated control point placement and management.

Improving lens parameter management.

Providing a batch processing interface.

Expert mode with access to all features and internals.

Recommended knowledge or interest in:

Workflow analysis and UI design skills

Experience with building cross platform GUI programs (Windows/Linux/OSX), either using wxWidgets or QT

Creative use of panoramic imaging

Mentor: Pablo d'Angelo, ?

License: GPL

Automatic feature detection for panoramic images

Goal: Robust extraction of local image features using a Hessian-based detector and a suitable descriptor.
A detector and descriptor that takes into account the approximately known distortions will have a much higher matching rate, especially when fisheye or wide angle images are used.

Tasks:

Implementation of the feature detector and descriptor, and a suitable test suite to verify the correctness of the implementation.

Automatic feature matching for panoramic images

Goal: Robust and efficient matching of local image features.

Tasks:

Implementation of the matching step, including geometry based outlier pruning (for example using RANSAC) and nearest neighbour matching, possibly using a fast algorithm such as cover trees. For the panoramic imaging use case, several heuristics could be used to improve the matching behaviour, including using the EXIF timestamps, or previously known approximate orientation of the images.

Standalone program for the feature matching part, which at the end should accept the features found by the automatic feature detection task. Preliminary studies can be done using the existing SIFT and SURF detector/descriptors.

Interactive panoramic viewer

Goal: The Freepv panoramic viewer aims to provide a superior viewing experience
for panoramas on all major platforms (Windows, Mac and Linux/Unix), based on
exploiting powerful graphics hardware using OpenGL. Currently it provides
basic but solid viewing capabilities for Quicktime VR, cylindrical, cubic and equi-rectangular panoramas. Plugins for Mozilla/Firefox and a standalone viewer are available. Several important features are still missing from the viewer include:

Support for hotspots

Optimisation for panoramas larger than the Video RAM

Display of high dynamic range panoramas with adaptive exposure

Support for reading a SPi-V compatible .xml file, for platforms where SPi-V is not available (Linux/Unix).

Anti-ghosting HDR panorama blending and merging algorithm

Goal: Most HDR creation algorithms are designed to work only with very small variations in camera viewing direction. Assume that registration and response curve estimation has already happened. An improved blending method for HDR images together that have not been shot using the traditional exposure stack method. It should avoid ghosting and be insensitive to small misregistrations.

Processing of very large images

Currently panotools, as well as hugin/nona require memory to hold the complete input and the remapped output image in memory, which consumes a lot of RAM, especially for spherical panoramas. VIPS is a powerful and modular image processing library that supports very large images and multiple processors natively. By porting the core remapping routines of panotools/hugin to VIPS, panoramas of almost arbitrary size can be computed.

A desired result of the projects would be:

VIPS operations that support the geometric and photometric (vignetting correction) transformations.

Standalone command line program that remaps images using these routines.

Program/script to convert panotools scripts to nip2 projects.

Required knowledge or interest in:

C/C++ programming

image processing

Mentor: John Cupitt, Pablo d'Angelo

License: GPL

Architectural Overhaul of Panotools

Panotools is a very monolithic application. The goal of this project is to refactor the functionality of panotools into 4 main parts, as independent of each other as possible.
These parts are (at least):

Calculation of position of images (optimization)

Mapping from input images to output images

Projection related computations

Parsing of input scripts/Generation of input scripts

Were this project successful the functionality of panotools will be available as a collection of routines that be called directly (as opposed to the current model that requires
the creation and parsing of a script). It will make it easier to replace one component of panotools with another one; and it will improve the future maintenance of panotools.

PTButcher

All the software is based on advanced find-replace in text files, generation of script files, but needs an user-friendly GUI, the main investment in the coding I suppose.

General

ability to translate projects between the various gui.

To search projects in subfolders

to keep history of all operations, with undos ability.

batch building projects

creates projects basing on the subfolder of a main folders, creates CPs and optimizes.

Default name schemes customizable for result images and projects. As well as project folder-locations

Template application (selection in base of image number, or exif)

Customizable CP finder and refinery

Customizable optimizer

report with result and-or creation of a little test image

capable of hugin-ptgui-whatever panorama project format.

project manager,
you have a table of all your project, with ability to change, one by one or in group, and without opening them

relative and absolute paths for images, changing the full path or a part of it, allowing HD migrations even if projects are foldered in creative ways.

Path for output image

output image type, resolution, layers.

Involved software and modificators.

16 bit workflow warnings

Batch stitching

ability of batch processing stitch operations, or to invoke the specific software and feed its batch

Ability to stitch panovideos:
Given a template with the (n) of images involved and (n) folders, containing (m) png images
extracted from the (n) streams to stitch together.
Invoke itself the softwares, and cycles the batch to build (m) images in a new folder.

See Panotools::Script for a perl approach to this.
Note that the PanoTools script format is is a bit hard to understand, there is a proposal in the
SoC2007 project Panotools Architecture to replace it with a more workable XML file format, so work should concentrate on the workflow aspects instead of another panotools script parser.

Proposal: Luca Vascon

Mentor: needed

Licence: GPL

PtPatcher, module for Interactive panoramic viewer

Was: PTeditor2.

The basic need would be to have it integrated in photoshop and Gimp, with a simple “paint on this side” interface. 16Bit workflow needed, as multiple input-output filetype.
See also skypaint for inspiration interface and capabilities.

There is a lot of overlap here with SoC2007 Interactive Panorama Viewer. Note
that the viewer simply needs to fork and pass the current filename, pitch, yaw and Field of View to an external script which can handle
the extraction, editing and reinsertion - The viewer itself doesn't need to be involved with any image processing.

The viewer should allow to save a fileproject in order to allow:

unlimited close and reopen of the viewer

multiple interventions and extractions with only one final reinsertion, in order not to loose quality

working in parallel with multiple images

batchable alone or with PTButcher, in order to extraxct all nadirs and/or zeniths, with given view angle 'XxY' of panos in a folder and then reinsert them all.