Skip to content

GIMP plugin for correcting Chromatic Aberration (CA)

License

Notifications You must be signed in to change notification settings

JoesCat/gimp-fix-ca

Repository files navigation

Fix-CA

Overview

Fix-CA is a GIMP plug-in to correct Chromatic Aberration (CA). For a general explanation about Chromatic Aberration, you can find information from Wikipedia. Fix-CA is able to fix Lateral CA colored fringing caused by light traveling through lenses, and Directional CA caused by light traveling through dense material such as glass and water.

This plug-in was written by Kriang Lerdsuwanakij lerdsuwa@users.sourceforge.net and is distributed under GNU General Public License Version 3 (GPLv3). Several patches and improvements were later added in 2022..2024 by Jose Da Silva.

Using Fix-CA

Fix-CA plug-in can be accessed via the menu 'Filters->Colors->Chromatic Aberration' There are two different types of Chromatic Aberration that can be corrected by Fix-CA: Lateral and Directional.

Lateral CA

Lateral Chromatic Aberration appears due to light passing through a lens. You may notice this effect with older analog cameras, or photographs, while newer quality cameras may use methods to help reduce or cancel this effect, and digital all-in-one cameras and smartphones can easily correct using software formulas (similar to Fix-CA for their own lenses).

For this type of CA, the center of the image seen by the lens has no CA and the CA gradually increases toward the edges. Ideally, the original camera image, rather than a cropped version, should be used to eliminate this type of CA. If you are using a cropped image, you need to know approximately where the lens center is located and then correct for this based off of the lens center. Gimp-Fix-CA version 4.0 now also includes a Lens Centerpoint X/Y position, which is set to the image center on startup (You can set this to -1,-1 if you lose the center).

Below is the image used to demonstrate Fix-CA plug-in capability full sized original here available under the GNU Free Documentation License Version 1.2 (GFDL) license.

This is a photo of Wat Pathum Wanaram, a buddhist temple next to Siam Paragon, a major shopping mall in Bangkok. The areas of interest are marked with green rectangles. Note that the reduced size here is only for display purposes. The actual processing is done on the full sized image (with green rectangles left "as-is" on a different layer, unaffected by the plug-in).

Below are 200% zoom of the four areas. The chromatic aberration (CA) is visible on the images as red and blue lines around bright area.

Normally it is not noticeable in the final image unless you are looking for this, but can be quite visible when the image is cropped to a smaller area and then expanded.

Invoking Fix-CA plug-in using the menu 'Filters->Colors->Chromatic Aberration' With the settings shown below image (for version 2.1.0), much of the CA can be eliminated (for version 3.0.0 blue and red settings are moved into group 'Lateral').

In the dialog box, setting red to -1.5 will shift the red channel inward to the maximum of 1.5 pixels. Here the positive number means moving outward, while the negative number means inward. Since the orientation of this photo is portrait, the red channel of top and bottom border will moved by 1.5 pixels. Pixels at the inner part the red channel will be moved less while the pixels at the center of image will not be moved at all. (For a landscape image, the left and right border will be moved by 1.5 pixels instead).

The interpolation parameter controls how the plug-in deals with fractional pixels, for example, if the plug-in decides to move an image pixel by 0.8 pixel, 'Linear' and 'Cubic' settings will try to get a value by averaging the surrounding pixels while 'None' will pick the nearest pixel (for this example by moving 1 full pixel).

The 'Preview saturation' setting changes the saturation for the preview image. This may help you spot CA problems. The setting does not have any effect on the final image produced by this filter.

Below is the 200% zoom for the resulting change using the above corrections.

In this example above we need to trade off between bottom right area (which suffers from less CA) and the left area (the most CA). If the image used is cropped, you can concentrate on fixing in the part of the image that is actually used and ignore the rest. Just remember, a better result can be expected if you correct CA before cropping.

For the majority of your pictures and images, you can assume the lens center is also at the image center (unless you're working with a cropped image). If you want to fix the full sized original here image further, then Fix-CA version 4.0 now adds the ability to also move the lens centerpoint (default is center of image). Below you will see added variables LensX, LensY, allowing you to move the lens centerpoint to another location on the image. If you use -1,-1 then Gimp-Fix-CA will reset the value to image centerpoint

Below is an example image using a poor man's zoom attached to a smartphone. Even though a smartphone can correct an image for it's own lens, the poor man's zoom attachment adds Lateral CA as well as having the lens center off to one side. You may notice the pixel corrections seem like large values like 6.0, but this applies to the (black) corners, and reduces down to about 3.0 around the edges of where the lens image begins, eventually 0 pixel shift at lens center (658,1280).

Below is a Preview (off) of the leaves (showing blue). This can be corrected using the Lateral CA settings shown above (can be seen with Preview on).

The full sized original is here.

Directional CA

In Directional Chromatic Aberration, the amount of CA is assumed to be the same throughout the image. This happen, for example, when photographing fish in an aquarium. Light travels through dense water and glass and bends differently depending on the color and angle from the glass. This CA correction mode was introduced in Fix-CA version 3.0.0. You can specify the amount of shift for blue and red along both X and Y axis.

This example is a complete photo of a sleeping sea turtle.

The image below is the turtle head at a zoom of 50%. CA is severe and noticeable at this zoom level.

The amount of CA is roughly the same throughout the image. Starting from the original, shown above.

By adjusting Directional X-axis CA amount and Y-axis amount to shift color component around, the result is quite good with the settings shown below.

The picture below shows (50% zoom) corrected image of the interested region.

Download and building Fix-CA

Fortunately, everything is in just one file. Just get the C source file. To compile and install the plug-in, you need the development library for Gimp. Usually it's in gimp-devel package in your distribution. Use the command

        gimptool-2.0 --install fix-ca.c

will automatically compile and install into the local plug-in directory of your account. For Windows users, if you wish to make the plug-in available to all users of the machine, use

        gimptool-2.0 --install-admin fix-ca.c

instead. (use the Installation method below for other OSes). Type

        gimptool-2.0 --help

for further help.

If Gimp is already running in your system, exit and restart Gimp for the new plug-in to be detected. The following displays Fix-CA version 2.1.0 information from the GIMP menu.

Installation method

Developers and Distro installers will be more interested in this install method. this method will also include local language support for the included languages. You're welcome to help if you can help upgrade/add a language for Gimp-Fix-CA.

Installing from Git master requires 2 preparatory steps:

First, you need to create the ./configure script if you do not have it yet

autoreconf -i  (or use 'autoreconf --install --force' for some setups)
automake --foreign -Wall

Second, you then use the usual steps to compile the plug-in. Various operating systems and setups will need ./configure options set. Here are example install steps for Linux, FreeBSD, Win32/64 are shown below:

Installing on Linux

./configure
make
sudo make install

Installing on FreeBSD

./configure --prefix=$(pwd)/BUILD
make
make install

Installing on Windows 32-bit

./configure --host=i686-w64-mingw32 --prefix=$(pwd)/build-w32
make
make install

Installing on Windows 64-bit

./configure --host=x86_64-w64-mingw32 --prefix=$(pwd)/build-w64
make
make install

Version History

  • 4.2 (August 24, 2024) Added Swedish. rpmlint found minor en_US spelling error. Add further differentiation from gimp3 in case both gimp2&gimp3 are present at the same time.
  • 4.1 (July 19, 2024) Upgraded code to work with 2.10.34 (broke in MSYS2). Fixed non-interactive scripting, added make check and updated other files for self-tests.
  • 4.0 (February 29, 2024) Upgraded code to use GIMP-2.10 API. Now Gimp-Fix-CA works with RGB/RGBA with precisions of 8bit, 16bit, 32bit, or double for each color of R,G,B,A. Also added Lens X/Y center and a lens centerline in the preview window. Local Language support now included for the installable Gimp-Fix-CA. This version is bumped to 4.0 since it requires GIMP-2.10.xx, and also because non-interactive scripting also requires Lateral Lens X/Y positions (default=-1,-1)
  • 3.0.4 (December 2, 2023) mostly edits around make system. Minimal mods to fix-ca.c code (which needs updating).
  • 3.0.3 (October 8, 2022) autoconf/automake/configure/make added for building fix.ca
  • 3.0.2 (December 22, 2007) Add the missing tile cache that speed up preview.
  • 3.0.1 (July 5, 2007) Fix a bug involving image row cache that cause bad CA correction when the number of pixel moved is large.
  • 3.0.0 (July 3, 2007) Add CA fix in X and Y axis.
  • 2.1.0 (January 24, 2007) Add saturation in preview. (Suggested by Reiner.)
  • 2.0.0 (December 5, 2006) Improve speed. Add linear and cubic interpolation.
  • 1.0.0 (November 30, 2006) First version.

Note: The Original Web page content and pictures are copyrighted (c) 2006, 2007 by Kriang Lerdsuwanakij. New Added images and web page content added 2022..2024 by Jose Da Silva are under the same license as this GPL3+ project.