Many things can be found on the Web about how to proceed to digitally invert an image coming from a photographic color negative and containing an orange mask. Many things, a lot of bull**** and sometimes super-complex procedures yielding mediocre results. One must say as well that there is nothing to be found in the usual video software (e.g. Final Cut Pro, Color, After Effects etc.) to do the job simply as the possibility to make a positive image from a negative is traditionally embedded in the telecine and scanning software of the industry so as to deliver a “normal” image to the client.

This page proposes a relatively simple method to implement for those who have designed custom digitizing tools and want to be able to scan color negative S8, 16mm or 35mm material in order to produce a positive image. The method can help to be able to do the inversion “by hand” using a video editing software but it is also the base of a specially developed OpenFX plug-in that you can download. This plug-in can be used with a large number of software including DaVinci Resolve, making it possible to process digitized color images with the extra possibility of color timing at the same step. The plug-in can also be used with the Kaliscope app by the same author.

Downloading ColorNegInvert 

ColorNegInvert 1.0 MacOSX 64bits (minimum 10.8)
ColorNegInvert 1.1 MacOSX 64bits (runs on Resolve 17)
Windows: [not yet available]

To use this plugin, you have to drag and drop it into /Library/OFX/Plugins. When installation is done, the plugin should appear in your host software at the place where it displays OFX plugins.

The full open source Kaliscope project, initially developed by Eloi du Bois

Using the plug-in with DaVinci Resolve

The plug-in is dragged to a node that is applied to a negative image.

The three sliders “Mask color” define the RGB values of the color that is substracted (please read the technical explanation below for details). To start with, one can put the three sliders to the maximum value and then bring them back one by one towards the left. For each channel, when you go towards the left, there is a point where the image stops being modified : stop there. Once the three channels approximately tuned, refine by moving each one slowly from right to left and left to right : one can sense the moment when the image goes from red to cyan, from green to magenta and from blue to yellow.

As an option three sliders can adjust the constrast of each individual channel.

There you go! The end of big money spent in stupid telecines just for editing the film!

A substraction and a multiplication :
How it works from those who like the maths

Let’s begin with a frame of plain color mask, that is to say a frame that contains no image per se.

The RGB value of the pixels will be something like Red 240 ; Green 140 ; Blue 80 if one speaks of a 8 bit coded image, that is to say with 256 levels per channel ranging from 0 for black to 255 for the maximum of each color.

This value actually represents the absolute maximum that each channel reaches, meaning that white in the negative will be close to it and all other colors will have lower R G B values.

For example, in this image :

Neutral grey is around R 180 ; V 85 ; B 50
The red patch is around R 220 ; V 95 ; B 40
The green patch is around R 165 ; V 110 ; B 55

The master idea of the process is to start by mathematically substracting the orange mask, i.e. to keep only the difference between the RGB value of each pixel and the mask as the registered image is all in that difference.

For those who want to try it out, it can be done in Photoshop with the “Apply image” command using the image to be processed as a “source” and an image of the orange mask (of the same negative) as “target”.

Surprise: the image is inverted and becomes a “positive”. Let’s take a look at the RGB values of the patch that used to be red on the negative : :

Mask : R 240 ; V 140 ; B 80
– Red : R 220 ; V 95 ; B 40
= Cyan : R 20 ; V 45 ; B 40

So that’s it with the orange mask. Not bad! But this isn’t the end of the road yet.

First, there are a lot of artefacts dued to the fact that digital camera sensors are in reality quite imperfect when it comes to recording the details of colorimetry of each pixel as they are based on Bayer filter mosaics. It isn’t problematic for an “normal” image but it can make calculus on the image problematic. Hopefully, in our specific case, there is a very simple solution to avoid adding degradation to the image : instead of substracting a real image of the color mask, one can substract a solid color, i.e. an image that has strictly the same value for each pixel. It can be done in Photoshop with the “New fill layer > Solid color” command in which one inputs the desired RGB values.

Then the substraction can be done in the Layers window :

and it gives a much softer image (and this is a particularly grainy 16mm image):

It’s getting better, but there is a second problem : the image is quite dark. That is because the dynamic range of the neg (what is left once the mask is substracted) is quite reduced, far from going from 0 to 255 on each channel.

In Photoshop, it can be corrected very simply with the “New adjustment layer > Curves” command to pull up the the channels individually (the one needing an extra boost being the blue channel, as it is the “thinner” channel on the negative, with a maximum value around 80). This time, what we are doing is simply a multiplication by a factor of 2 to 3.

It this give quite good results :