Better nonlinear resampler with built-in antialiasing (GEGL)

Abstract

Port the improvements to Nohalo Level 1 (gegl-sampler-sharp.c) and port Snohalo Level 1 (Nohalo with variable additional antialiasing) from VIPS to GEGL. In collaboration with Nicolas Robidoux, main developer of the Nohalo family of samplers, program Nohalo and Snohalo Levels 2 and 3 in demand-driven mode for GEGL. Carefully test for bugs and optimize for speed. Merge the various methods so that levels are automatically chosen depending on requested image processing quality level, and so that Nohalo is selected instead of Snohalo when additional antialising is set to zero. Put together a gallery of GEGL sampler outputs to be included in the GEGL source distribution.

Even without the improvements already found in VIPS, Nohalo Level 1 is the second fastest GEGL resampler (after bilinear). A gallery comparing enlargements produced by the current GIMP rescale methods and Nohalo and Snohalo Level 1, as well as pretty good approximations of Nohalo and Snohalo Level 5, is found here.

About Me

Name:

Adam Turcotte

School:

Laurentian University

Degrees:

Experience:

Awards and Achievements:


I was recently offered the CGS and intend to use it to start Masters thesis research on image resampling in Fall 2009. We will contribute the results of this research to open source projects.

IRC:

Username an10na on irc.gimp.net and irc.freenode.net

Native Language:

English (also understood: French)

Software Development Skills

Did you develop any software, either individually or in a group? Please describe the software and its purpose.

What is your main development platform?

I do most of my development in Linux (Ubuntu and Fedora), but I have also developed in Windows.

What programming languages/tools do you use to develop software?

Are you familiar with the C programming language, GTK+ and/or Glib?

Most of my university coursework was done in Java, but I have spent the past three years coding projects in C.
I have coded several GIMP plugins, so I am familiar with GTK+ since the graphical interfaces use GIMP Widgets. Specifically, my plugins request a width and height for the output image and a gimp_chain_button allows the user to maintain the aspect ratio of the image. This involves a callback method to ensure that this ratio is maintained as closely as possible.
Since I have coded GIMP plugins, I am moderately familiar with Glib. I have used the basic Glib types and several Glib functions in my code.

Have you been involved in other Free Software projects?

I have written free plugins for image resizing in GIMP and a massive open source image enlargement test suite in C/Scilab/BASH/ImageMagick that will be distributed soon.

Image Manipulation Skills

Do you use any image manipulation software?

I actively use Photoshop and GIMP for digital artwork and photography projects, and I have used Paint Shop Pro in the past. I primarily use Photoshop on my Windows desktop and GIMP on my laptop running Ubuntu.

What's your level of experience?

I consider myself to be an advanced Photoshop and GIMP user, as I have been creating digital artwork for many years. Here are some samples of my work.

Do you know something about common algorithms that are used in image manipulation, or common problems that are encountered in this field?

Yes. My senior thesis was about digital image resampling. I have programmed several image resizing methods, and have used and evaluated about 30 of them. I have studied image resampling artifacts both qualitatively and quantitatively.

GIMP and GEGL Skills

Have you heard about GIMP or GEGL before?

Yes. I have used GIMP for image editing on many occasions, and I am co-author of an article discussing an exact-area image enlargement algorithm implemented as a GIMP plugin. I am also co-author of an article discussing a GEGL implementation of Nohalo, another image resizing algorithm.

Have you used either of them before? Did you know that current versions of GIMP do use GEGL to some extent?

Yes. The GIMP plugins mentioned above were used in the comparative test suite and the upsampled images were created in batch using several Script-fus that I wrote to simplify the process, so I am rather comfortable with GIMP. I am also aware that GEGL is the future of GIMP.

Did you contribute to GIMP or GEGL?

Yes. The plugins mentioned above were repackaged as Windows plugins under the name HQ_Rescale by the user PhotoComiX. The original versions were never added to the repository since we believe that Nohalo and Snohalo are much better candidates for inclusion.

Do you build GIMP or GEGL or both yourself, do you try to keep them more current than your distro's packages?

I built GIMP 2.4 myself before it became the current Ubuntu version, so I could investigate the output produced by enlarging images with Lanczos. Since then, I have simply used the current Ubuntu version.

SoC Project

Have you partcipated in a previous Summer of Code?

No.

Why did you choose this project?

I have been working on image resizing projects since 2006. I am quite fond of this field of research and I consider this project to be completely suited to my abilities. In addition, I would be honoured to have the opportunity to once again work with Dr. Nicolas Robidoux.

What's the goal you want to achieve?

The higher levels of Nohalo and Snohalo produce high-quality output. Programming them so they run fast in demand-driven mode is a definite challenge (unlike with the GPU), and certainly a worthwhile endeavor. If time allows, I intend to help improving abyss policies and/or image size issues within GEGL, and/or help with integrating GEGL resamplers into GIMP, and/or write a GIMP plug-in which uses GEGL resamplers.

Because Nohalo and Snohalo are brand new schemes---and only Nohalo Level 1 is available through GEGL (VIPS svn trunk also has Snohalo Level 1)---Dr. Robidoux put some enlargements on the web (with descriptions) of downsampled images provided by Craig DeForest. I adapted the gallery here and included enlargements produced with the standard GIMP methods. The images given for Nohalo are very good approximations of the results using Nohalo Level 5, but the Snohalo ones are more approximate versions of the true Snohalo level 5, which will be slightly less aliased but more blurry than shown here. GEGL Nohalo Level 1 is already almost as fast as GEGL Bilinear, so we are hoping that Level 3 will not be much slower than GEGL Bicubic.

How much time do you plan to put into the project (hours/week)?

37.5 hours/week.

Are there any exams that will interfere with the project?

No.