I have a good understanding of conventional photographic processes, can print color neg, B&W with reasonable skill etc, some limited math (should have paid attention more in class), and some basic understanding of the digital scanning processes. I am attempting to use imagemagick with some additional scripts to provide a better software solution for scanning film (both B&W and color).

I have read a few papers on the topic and my limited knowledge tell me that simply using a function to 'Invert' like negate on its own will not work with a film negative.

Some scanner software have film profiles, which I suspect, is a function using the film base as 'black point' and characteristic curve of the film to the inversion.

I am currently using a script that uses the following algorithm (which I got from a script):

1. Determine the RGB values of the film base, and the RGB of brightest area of series of shots (in similar lighting) from a linear scan of the negative

using -format fx: minima.r maxima.r

2. calculate the following values

a. calculate the value to subtract from each channel using the max and min from red channel

Take a look at my unix bash shell scripts, neg2pos and negative2positive, at my link below.

Thanks I did take a look at those, but my understanding of how both those scripts work, is they use the -negate to invert the image, before attempting to make a colour correction, am I correct on that point?

The trouble with using -negate is (or at least my understanding is) that it works by simply subtracting the current value of the pixel from the 'white' value. By doing that you destroy the color fidelity of the image, I was hoping to discuss alternative methods that do not just -negate the negative.

In a way each film stock/paper combination has it's own unique 'colorspace', that needs to taken into account.

Negative2positive has some code in it to use profiles to change from cmyk to srgb for example rather than just negate. But I have not included the input arguments to provide the profiles. If that is important, I can add those.