How to take the color grade from one image and apply it to another?

2 views (last 30 days)
Good Afternoon all,
I was wondering if its possible to take the colors of one image and apply them to another. I want to bascailly convert the theme.
Ive seen this done many times in photoshop for example in this video https://www.youtube.com/watch?v=epPOrHG6SnE .
What steps would i go about doing this in matlab if at all possible? Has anyone done this before?
Thank you all.

Accepted Answer

Image Analyst
Image Analyst on 28 Nov 2022
Sorry but I don't think Walter's suggestion would work.
The best paper I've seen on this is
Sorry but I don't have code for that paper.
  3 Comments
Image Analyst
Image Analyst on 28 Nov 2022
Edited: Image Analyst on 28 Nov 2022
I made a stab at doing what he said but I only got partway until I got into some pretty complicated math for gamut warping that I didn't know to do in MATLAB.
Uh, yeah. 😬
DGM
DGM on 28 Nov 2022
Edited: DGM on 28 Nov 2022
Yeah, same. I didn't get very far either. It's still in my TODO notes ... waaay down at the bottom.

Sign in to comment.

More Answers (2)

Walter Roberson
Walter Roberson on 28 Nov 2022
rgb2ind the base image and save the color map. Now rgb2ind the second image and ind2rgb passing in the saved colormap.
  3 Comments
Walter Roberson
Walter Roberson on 28 Nov 2022
the task is not well defined.
Suppose you took a 3d histogram of HSV. Sort by popularity. Create a cumulative sum so that given a fraction you can look up its associated color bin.
Now take the second image, so the same thing.
Now take the cumulative relative fractions in the second image and look them up against the first image's information to determine an hsv bin. Invert linear bin to hsv value.
If the first image was, for example, mostly pastel purple then the computed version of the second image would be too. However, it would definitely be subject abrupt transitions.
Walter Roberson
Walter Roberson on 28 Nov 2022
I forgot earlier that you can rgb2ind your base image and then rgb2ind the second image passing in the colormap from the first image and then ind2rgb back with the same map. The effect would be to substitute each color with the closest color that exists in the first image. But it does not have to appear much in the original image so this would not tend to shift palettes.

Sign in to comment.


DGM
DGM on 28 Nov 2022
Edited: DGM on 28 Nov 2022
The paper that @Image Analyst linked is good, but I haven't seen any MATLAB implementation. You're free to post it on the File Exchange if you write one.
MIMT imrecolor() is about the closest thing, but it's nowhere near as good as that. Results may end up pretty terrible on photographs, but it was never meant to work on anything but abstract images. It's just an incremental improvement over a basic histogram matching as one would do with imhistmatch().
I wouldn't call it a color grading tool, but I might as well throw that out there. This comment references the paper that @Image Analyst linked and compares to the results using imrecolor() and imhistmatch().

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!