# Is it possible to reproduce a colour tone (of any photos) perfectly (by curves)?

Is it possible to mimic a colour tone perfectly? (most likely using curves.)

For example, I want my photos taken by my digital camera having the colour tone of the film-photographs (let's say Velvia).

Or, for example, I want my photos taken by my Nikon DSLR having the colour tone of my Fujifilm images. (Nikon's Picture Control allows us to set the curves in PC and import them into the camera.)

I know some photographers with very good photo-editing skills can reproduce colour tones of 99% alike. But they are not 100% alike anyway. And post-editing one by one is not time effective.

To achieve this, I have an idea. I don't know if it works or not.

1. Print out a colour board. A simple way of the colour board would contains 3 columns and 16 rows. Each columns would be Red, Green, and Blue. Each row would have gradient of colours from 0 to 255. (A complete way of the colour board would contains 256 x 256 x 256 colours.)

2. Then I use my Fujifilm camera to take a photo of the colour board.

3. Thirdly, having my Nikon DSLR of the same settings as my Fujifilm, and take a photo of "standard" colour tone of the same colour board, under the same environment.

4. What we want now, is a curve that transforms the Nikon's "standard" photo, to the Fujifilm's colour tone.

5. To get that curve, we first analyse the Fujifilm's colour board by the Eyedropper Tool.

6. Ideally, take the Red column as an example, a "Standard" image would result in values (0 0 0), (16 0 0), (32 0 0) ... (240 0 0).

7. But nothing is ideal in real world. There is no problem. We are now analysing the Fujifilm's colour tone of the colour board. Let's say Fujifilm has a darker style: (0 0 0), (15 0 0), (29 0 0) ... (230 0 0).

8. Then we now analyse the Nikon's "Standard" image. Let's say Nikon's image is a bit brighter: (1 0 0), (16 0 0), (33 0 0) ... (241 0 0).

9. Here comes the curve in the Nikon's Picture Control (works also for Photoshop post editing curve). If we set the Red curve's input 1 to output 0, 16 -> 15, 33 -> 29, ... , 241 -> 230, (and so forth for the Green and Blue curves,) I guess, for this colour board image, we can get exactly the Fujifilm's colour tone.

Do you think this "adjustment curve" can theoretically transform every Nikon's "standard" image to a Fujifilm's image?

-
Look into Colour Lookup tables. It's along the lines of what you're describing. – SCB Jul 29 '14 at 9:59
i guess "curve" is doing kind of Colour Lookup Table. But does my method suggested able to mimic any photography? (i doubt.) In another words, is it possible that just one single curve can mimic all photos? Thanks for comment. – midnite Jul 29 '14 at 10:28
I guess you could use a curve to mimic tones of film used in certain contexts, (it probably wouldn't be a particularly easy process) though they would only be a small part of trying to achieve a Fujifilm image with a Nikon. The Dynamic Range, grain, sharpness, detail etc. is very different in film to digital, so even if you have managed to make the tones similar, the images would still be vastly different, and almost guaranteed to be impossible to match up. – SCB Jul 29 '14 at 10:46
Another thing that I just thought of that would probably make it a bit too difficult with a single set of curves, is that the way light interacts with film isn't defined in only RGB, but in all frequencies of the EM spectrum. So the way that yellow waves of light interact with film, might not be able to be represented in a graph that also needs to account for the way that the red and green waves of light interact with the film, AND be combined to make yellow. If that makes sense. – SCB Jul 29 '14 at 10:58
Not to mention that one lot to the next of the same film would show minor variation. Film that had been stored for long periods in moderate or warm temperatures would show even more variation from fresh film recently manufactured and stored in cool temperatures. Color management is not a new thing that began with the dawn of digital photography. It has been around as long as photography has. (Even different B&W emulsions could render the same color different tones of gray.) – Michael Clark Jul 29 '14 at 23:31

Well, let's say camera A is the Velvia, camera B is your Nikon.

• Camera A converts physical colors to virtual colors ("pixels") using funcA.
• Camera B converts physical colors to virtual colors (pixels) using funcB.
• Establish an ICC profile (ICCA) that converts the pixel color to viewing environment color.
• Establish an ICC profile (ICCB) that converts the pixel color to viewing environment color.

When you take a photo of e.g. a physical red, in your viewing environment you will see the same red, no matter whether you are using camera A or B.

Red -> funcA -> ICCA -> monitor color (red) and

Red -> funcB -> ICCB -> monitor color (red).

So you can say that:

any physical color C -> funcB -> ICCB -> invert ICCA == funcA(the physical color C).

And that is cool because funcA(any physical color) is exactly the color output of camera A.

In other words the things to do:

• generate the inverse of ICCA
• apply inverse ICCA to your pixel colors in your viewing environment.

The inverse of ICCA will be three curves, R, G and B. You should make the inverse as high resolution as possible to avoid banding.

What do I mean by "inverse"? It means that if you apply ICCA and then inverse ICCA, then you get back the same original image.

There are quite a few open source tools out there to manipulate ICC data, and with a bit of scripting, you can create the inverting solution.

NOTE: a quick search shows this page, with having the keywords: "inverting ICC profiles; limits to inversion accuracy". So after inverting the profile, you might end up with limited accuracy and probably will need to do manual tuning of the inverted curve.

Also, do not forget that dark regions have much lower information content that bright regions, and you will see more mismatch there because of quantization noise.

-
Thanks v much for answer! I understand Red -> funcB -> ICCB -> invert ICCA == funcA(Red). This is a clever solution. But I am new to ICC profile. I have read Making ICC profiles for devices, Introduction to Icc Profiles, and the wiki. However ICC profile seems dealing with monitor displays and printers. Do I need a monitor color calibration device to get "monitor colour red"? Or "monitor colour red" simply means #FF0000? Please give me some hints. – midnite Jul 30 '14 at 7:21