Micro 4/3 I made a software to find settings that match the JPEG output between cameras

Hi all!

This project has been dormant for a bit as I have been busy with other stuff.
I plan to come back to it soon, though!


I may record a brief video explaining the commands and the overall process. I'm still learning about which software would be the most suitable for this kind of task.


The basic process would be the same. However, the analog process would introduce additional variables which are eventually sources of error, as you point out.


  • What do you mean by "If you just add needed additional values like white balance, tint shifts, exposure compensation or whatever for accurate results let me know."?
  • Running the software and producing the profiles is much more time intensive than taking the shots and producing the input images! :) In that sense, whatever pace you could manage is probably still above what I could manage to keep up with! There's hope that if I make an explanatory video of the whole process, people would be able to do it by themselves, though!
Dunno, just did not fully understand which settings are crucial for a propper representation of the film sims so I just mentioned it 😉

A video explanation would be nice I think as more people get to know the technique. For me I'm an absolute noob in programming with (insert language here 😅)
Just wanted to help and provide images as I have the time to do so and yes, can't deny a certain degree of self interest. At thus point I would just sent them over or archive them and provide them as needed because I have a Fuji for sale and the Pen-F in use 😉
 
Hi all!

This project has been dormant for a bit as I have been busy with other stuff.
I plan to come back to it soon, though!


I may record a brief video explaining the commands and the overall process. I'm still learning about which software would be the most suitable for this kind of task.

Thanks!

For image manipulation at the "matrix" level, I always loved what I could do with this library https://github.com/JuliaImages/Images.jl. It is not in Python though, so it depends on your interest in programming language in general.

Cheers, will keep an eye on the project :)
 
I do have another slightly off-topic, PEN F related question:
Is there a way to associate save composure compensation with the C1-C4 profiles? As far as I can tell it will always use whatever the exposure compensation dial is set to.
This would make it easier to switch easily between different presets (such as the Fuji Classic Negative that requires a -0.7 exposure compensation).
And another question, is it possible to store the white balance adjustments with a color profile somehow? E.g. if I chose Color Profile 1 set White Balance to A+3 G+4, but something else for Color profile 2.
 
The software consists of three parts:
  1. Iterative global optimization. This first script analyzes the target color, the source color, and adjustment changes in the JPEG output to find an optimal transformation in 3D L*a*b* space as a linear combination of adjustments. Since the effects of color adjustments in the JPEG output are highly non-linear, this step is repeated 5-10 times until a rough convergence is reached.
  2. Hill climbing. This is a local optimization that has its starting point in the output from the first script. It offers an easy way to quickly test small adjustments, allowing you to fine-tune the profile to reach an optimal solution.
  3. Evaluation and plotting. This script visualizes the alignment of the ColorChecker squares in the L*a*b* color space. This is useful for analysis.

Hi ibd,

Thanks for sharing the scripts.

Could you clarify the output for the iterative global optimization script? An example is shown below:
Processing reference image...
Processing test image...
Found 1 delta images.
Processing Portra-out.jpg...
Color discrepancy before adjustments: 129.41
Idealized discrepancy after adjustments: 126.91

Do I want the idealized discrepancy after adjustment to be closer to the color discrepancy before adjustments?

Thanks!
 
Last edited:
Hi ibd,

Thanks for sharing the scripts.

Could you clarify the output for the iterative global optimization script? An example is shown below:


Do I want the idealized discrepancy after adjustment to be closer to the color discrepancy before adjustments?

Thanks!

Hi boysbytes,
Sorry for the delayed response. I got busy with a bunch of other projects and life in general!

I see you were able to get the script running, which is a good start!
The scripts are not very user friendly at all. Let me try to explain the basics of the first step.

For the iterative optimization, you will need three things. All of them need to contain the color calibration target (either a ColorChecker chart or an IT8 type chart) visible in the image so that the software can analyze it.
1. The reference image. This is a JPEG image with your desired color profile applied.
2. Your own developed JPEG with the last or default settings applied. This is what the script calls "test" image.
3. A folder of images, each of which is the same as your own developed JPEG but with one additional settings knob applied. These are what the script calls "delta" images.

For example, 3. could contain the following images:
  • The same as the exported image from 2., but with an EV correction of +0.1. For example, this can be named "EV0.1.jpg".
  • The same as the exported image from 2., but with a saturation boost of +1 step. For example, this can be named "sat1.jpg".
  • The same as 2., but with contrast dialed up by +1 step. Example name: "cont1.jpg".
  • [...] and so on.

Given these three as file paths, you will need to call the script in the following way:
Code:
python iterative_opt.py path/to/reference.jpg path/to/test.jpg path/to/delta/images

The script will then compute the necessary adjustments that will minimize the color discrepancy. It will reference the file names of the delta images, which is why we gave them meaningful names in the step above.
The score after applying all these (ideal) adjustments is the idealized color discrepancy.
Afterwards, you can update your "test" image with these new adjustments and repeat the process until it doesn't improve the score (much) further.
This repetition is why it's called the "iterative" optimization.

Please let me know if this makes sense!

(The instructions above assume that you're using a ColorChecker target, which gets detected automatically. For using an IT8 type chart, things get a bit more complicated, as you need to supply pixel coordinates for each of the corners of the
chart. To get started, I recommend getting the ColorChecker version working first before trying the more advanced IT8 chart calibration.)
 
Hi ibd,

Thanks for the detailed explanation on how to use the script. I haven't had time to try out the script in the manner that you described, but I didn't want to wait too long before giving you a reply. :D

And yes, I do use the ColorChecker target.


Thanks for the scripts!
 
Back
Top