Wednesday, May 21, 2008

Project Scope

Given the scale of this project, and the reasonable possibility of failure that comes with it we felt that our progress should be granular, and consistent in a way that future developers could extend onto where we may leave off, an important factor in a research environment.

So I divided the project into three main parts:-

1) Replicate Efros and Leung's Texture Synthesis algorithm for a standard BMP image.

2) Write a class to check and record the difference between two similar images (the grown image and the original image) which should be of the same format and resolution (to be able to verify this), and be able to regenerate the original image given just this difference and the seed image. This algorithm should be publicly available and should run independent of Step 1.

3) To be able to use modules 1 and 2 to compress an image, storing only the seed blocks, and the image differences (Compression Part) and to evaluate the Compression Ratio.

Language of Choice

My language of choice is C#, for five main reasons.

1) Rapid Application Development features of C# as opposed to Python or C.
2) Parallels with Java, makes C# easy to learn to programmers or members that may later want to contribute to this development. (Makes this project easily extensible, if its initial goals were to fail.)
3) Aforge .NET Image Classes
4) Excellent User Interface functionality, which will be instrumental in atleast getting a visual feel of the images, and their manipulations.
5) Robert Burke said so. He also did similar research in Image Quilting.

Texture Synthesis by Non-Parametric Sampling

The Texture Synthesis by Non-parametric Sampling algorithm by Efros and Leung, aims to grow a picture outward (or to fill missing parts in the picture inwards) by adding pixels to the image borders, one pixel at a time. More about the details of the same can be read here.

The algorithm itself, which I am working on has different variations, the variations arising primarily in the method used to choose the generated pixels.

The important thing to keep variable here would be the size of the outward growth of the image with respect to the original image. It is but natural to assume that the greater this size is the greater the deviation would be from the original image to the newly generated image. Here are the image results this algorithm which I am currently coding in C# using the Aforge Image Library for .NET applications. The eventual goal would be to get the image to look like this:-


Initial Seed Image



Final Grown Image