Search code examples
image-processingcolorsscikit-image

Is it possible to calculate the color curve currection applied between two images, and apply it to many others?


I need to keep color corrections aligned across a set of images.

Currently the workflow is:

  • make some color edits to an image
  • record (hopefully) the edits (this is the part that usually fails, as it entails a ton of back-and-forths in Photoshop)
  • make the same edits to all other images manually

I would like instead to:

  • make some edits to a small set of images
  • calculate what is the color correction that has been applied
  • apply same transformation to all other images

I am thinking of a workflow that is based on something similar to scikit's histogram matching, but kind of in reverse.

Is that possible at all? and if yes how?

Ideally python + scikit.image


Solution

  • Given a LUT, exported as a CUBE or CSP, that you authored with Photoshop using its adjustment layers:

    Photshop Adjustment Layers Photoshop Export LUT Photoshop Export LUT

    You can use Colour to read the LUT, the image, decode it and then apply the LUT.

    import colour
    
    LUT = colour.read_LUT("~/Downloads/MyLUT.CUBE")
    
    image = colour.read_image("~/Downloads/MyImage.png")
    image = colour.cctf_decoding(image)
    image = LUT.apply(image)
    
    colour.plotting.plot_image(colour.cctf_encoding(image))
    

    Colour - LUT Applied