Color Checker Calibrator

After doing a few addons and releasing them to the Blender Market, I noticed something that Blender didn’t have that some image compositors might want - a color checker calibrator. I made this mockup and tested it on a few images of my own, and it works fairly well.

If you have a color checker, do me a favor: check out the addon repository below and test it on your own images/videos. Does it work? In what ways could it be better? The first things I will look into is more color options (maybe a systematic way of adding/removing colors?) and calibration for black, midtones and white points.

I studied color spaces, LUTs, and color matching for a while, but I am very young in this field. So I need your help. This is going to be a public project because this is an application that I feel many would like to see in Blender (or at least for free). So please feel free to clone the repo, make changes (which I will be doing as well), and let me know so I can merge them for everyone’s benefit.

Feel free to ask questions and discuss :grin:

4 Likes

Haven’t tried the addon but I’m having a problem with color and this might help.
I have a render with some furniture in it. A closet needs to be an exact color so I’d like to give it that color in the compositor via some nodes. But filmic is causes it to be a different color

This because of how filmic works. So can your addon help with this?

The addon currently supports calculating colors to match a color passport. However, a next step in developing the addon would be to add your own colors so you could do something like this.

For now (if this is urgent or for a client), I would look into the hue correct node. That’s what my addon uses, so this will give you more flexibility to solve the problem than my addon currently does.

Thx Magnusson,

Indeed have been using other techniques to do so but it is fiddely to say the least.
keep me posted of your addon :wink:

Haha will do, I try to update my addon posts for each update. Unfortunately, due to many big life changes and school I’ve had little time to develop :sweat_smile: hopefully that changes soon.

1 Like

“One year later” :smile:

Hello @MagnussonProductions

I do have an Andoer color checker (the cheapo one, around $20) so I modified your script accordingly. Here’s the PR: https://github.com/semagnum/blender_colorchecker/pull/1

It has an error though about index size (9, not 6 or 7), I can’t find it. Please review and correct it before merging.

This project is very interesting, because Resolve is limited to other checkers, you can’t add yours and, AFAIK, there’s nothing easy as Blender to color correct images.

However, eye-dropper is picking a pixel, not a zone like Resolve, and the noise (you can see it in the indoor image I added) is messing with precision. At least you can zoom and pick the best average value to your eye :slight_smile:
I might take an outdoor shot later.

haha it was a crazy year :sweat_smile: Life events kept getting delayed. I added a comment on Github, but I think the issue is just that the hue node doesn’t have enough points to match the array in the operator. There simply needs to be another loop to add more points as needed.
I can correct it later this weekend, but here’s a link that may help for the syntax.

That’s funny with the color picker average. I actually have a color picker for such an occasion. You could either use the addons in tandem, or a future feature could be implementing it within this addon.

To help you all out:

You can use colorsys for the rgb_to_hsv function:

import bpy
import colorsys

print(colorsys.rgb_to_hsv(0.095307, 0.056129, 0.043735))

When adding points, I’ll just remove all the points but 2 (the curve needs 2 points) and then add 23 more (it’s not the best code, but it works):

        hh_points = hue_node.mapping.curves[0].points
        while len(hue_node.mapping.curves[0].points) > 2:
            p = hue_node.mapping.curves[0].points[0]
            hue_node.mapping.curves[0].points.remove(p)
        i = 2
        while i < 25:
            hue_node.mapping.curves[0].points.new((1.0/24)*i,0.5)
            i = i + 1

Still a lot to do. Saturation gets value of 0 when in the desaturated colors. You cannot divide by 0.

2021-11-09 01_39_52-Window
The curves gets the values from the checkerboard. That should not be the case. It should calculate the difference between the original location and picked one.

1 Like

Appreciate you being willing to create a profile and make this suggestion, thank you. I did not know about the colorsys function - I just made a function that matched the one used by Blender (which has it in C++, otherwise I’d just call it).

There’s several reasons I could give for not contributing since the initial commits - life changes, busy with work and family, starting my next paid addon nView, etc. - but most of all, I have heard little feedback apart from earlier in the year with a few comments here and an unfinished PR that wasn’t up to par (simply added more variables, where I’d rather have it be more scalable for users via presets with add or remove functionality). I have no idea if anyone uses it, let alone would like to still contribute. If I learn that lots of people are using this addon, then I’d be happy to give it more priority. But I have received too little of feedback to be proven otherwise.

1 Like

New commit on the repo - nothing groundbreaking, but a stepping stone for any future features (presets, value adjustment). I changed the static list to be dynamic collection so colors can be added and removed.

Here’s a comparison picture I tested with, showing the raw image, the black and white adjusted (not in the addon, just to make results more visible), and the hue and saturation adjusted:

The final result is oversaturated, but the factor node can tone it down as much as needed.

So how does this work? Do I need to add in all of the Color Checkers HEX values individually and then remap them with a rendered colour checker? I’m kind of lost here.

Maybe I’m barking up the wrong tree, but I’ll ask here since it’s kind of related.

I’ve been doing a lot of scanning and I use a colour checker when shooting the stuff for use in Reality Capture. The images are processed in Lightroom beforehand using the colour checker so my colours are pretty solid. So far so good.

After I process everything and have a model ready, can I assume that when I render it in a neutral light setup that the colours are totally accurate to what I shot? So if I mimic my studio setup where I shot the object it should look correct, right? Is this how it’s done when you see the renders of items with a colour checker and a chrome and neutral grey ball?

I’m also new to keeping the colours correct the whole way through the process so any help is appreciated.

Hi!

Regarding your case, yes, your assumption is correct. Since you have done all the calibration in Lightroom, your colors should be more physically correct, and therefore similar lighting and 3D camera settings should yield similar results. Granted, any shadows during your scans will affect the colors, but your calibration will minimize it. The chrome and neutral grey ball is usually to match reflections and general lighting, not just the colors.

For this add-on, yes, you would add each hex color (the ideal and what’s seen in the image), then save it as a preset. And then the add-on would apply it in the compositor.

I should mention here that the repository has been archived for a couple reasons: firstly, I haven’t found this add-on to be effective except for relatively simple cases (partially because the Blender nodes used are limited in how they apply color changes). Secondly, I haven’t dived far enough down into color checkers to really solve the problem within Blender. And as you’ve said, Lightroom and others are already perfect at this.

1 Like

Yeah, I’m trying to shoot with the light as flat as possible to avoid shadows as much as possible. Each scan is getting better as I improve my setup and knowledge about the whole process.

As for the addon, I was already hoping there would be some presets for the most common colour checkers in there already and I run that against my render. But, as I thought, and you confirmed, if my 3D scene is as simillar to my shooting conditions, then it shouldn’t matter too much if my colour process remains fairly consistent across the pipeline.

1 Like

With Blender presets, once you make them, it persists locally so you can reuse them. But I do not have defaults set up :confused:

I hope your scans continue to go well!

1 Like

Ha, asking for presets is just me being lazy :sweat_smile:

I just have been informed that I have a ton of shiny jewelry to scan on Monday. Time to break out the baby powder!