X Rite Color Checker Video & Digital SG implementation

BlazingBlackBeard

New Member
There seems to be a complete lack of color checker card video camera calibration functionality in OBS Studio as far as natural light response color checker cards are concerned. By this I mean cards that are produced to reflect the same spectrum as the natural tones they are designed to emulate, such as skin, wood, foliage etc.

X Rite manufacture these cards and their respective color patches to precisely reflect the same spectrum that their real world counterparts would. They are used for live and post-production to color match cameras. Many people have multiple webcams that can be manually locked and then color corrected with a snapshot of the X Rite Color Checker Video or Digital SG but unfortunately there's nowhere to input this snapshot for auto calibration. A simple dynamic translation matrix in the OBS GPU filters is all that's needed for this live color correction/grading and would provide an invaluable tool in OBS studio and replace heavy filter stacking.

Every single one of my webcams and even my professional video cameras are all different. I have to stack multiple filters to gain some kind of results and even then the output is less than ideal, bordering on unusable. Stacking filters to achieve this becomes extremely processor intensive and is very time consuming using the basic controls already in OBS (gamma, contrast, brightness, saturation, hue shift, color cast).

This method is wholly inadequate and seriously flawed (highlights are lost/blown out/over exposed, shadows are crushed and the resulting contrast becomes very noticeable with heavy color banding and other heavy processing artefacts) and can't possibly correct multiple response differences between different camera sensors. This could easily be remedied by OBS implementing calibration with a translation filter where a simple masked snapshot could provide a representation of camera sensor response and the translation filter would generate a translation table for the correct display colors for each live camera in just a few clicks.
 
Last edited:

dodgepong

Administrator
Forum Admin
Last edited:

TeqStar

New Member
Check out this automated way to take a snapshot of your color chart like X Rite or DGK Color chart, then process it online to create & download a LUT for OBS Studio to make the color adjustments.

YouTube:
GitHub:

Steve Seguin originally posted the tool here in Oct 2019:

I haven't seen anyone talking about this tool by Steve Seguin -- not anywhere here on the forum either. I think many people are more typically invested in a quick eyeball adjustments and style instead of color accuracy.

I bought this DGK color card on Amazon: https://www.amazon.com/dp/B00AWT2QCE/ref=cm_sw_em_r_mt_dp_U_lR0wEbR91YHFH

When using the tool in GitHub referring colab.reference.google page for the project (Step 2), use the following code for this DGK color chart:

total_rows = 3 # Change to the number of rows in your color chart total_columns = 6 # Change to the number of columns in your color chart # Update the follow values with your RGB values. right = [[255,255,255],[179,179,179],[150,150,150],[119,119,119],[89,89,89],[0,0,0], [238,31,36],[255,242,0],[103,188,69],[0,173,238],[0,27,84],[237,0,140], [173,50,58],[210,126,41],[9,137,164],[189,88,150],[201,159,138],[184,147,125]] ## [[RGB],[RGB],...[RGB]] Modify with the RGB values of each color, in the order that you read a book test = np.array(right).reshape((total_rows,total_columns,3)).astype("uint8") test = cv2.cvtColor(test, cv2.COLOR_RGB2BGR) test = cv2.resize(test,(200,150),interpolation=cv2.INTER_NEAREST) cv2_imshow(test) ## If the colors don't match, something is wrong. This is our color target for the output wrong = np.zeros_like(right)
 

TeqStar

New Member
Oh man, this didn't work for me using the 3 x 6 color card as mentioned above. :(

Step 4:
ValueError
Code:
Line 10: plt.subplot(3,3,j)
1030:  a = fig.add_subplot(*args, **kwargs)
1419:  a = subplot_class_factory(projection_class)(self, *args, **kwargs)
---
66:  f"num must be 1 <= num <= {rows*cols}, not {num}")
---
ValueError: num must be 1 <= num <= 9, not 10


I used the following code for Step 2:
Code:
total_rows = 3  # Change to the number of rows in your color chart
total_columns = 6 # Change to the number of columns in your color chart

# Update the follow values with your RGB values.
right = [[255,255,255],[179,179,179],[150,150,150],[119,119,119],[89,89,89],[0,0,0],
[238,31,36],[255,242,0],[103,188,69],[80,169,50],[0,27,84],[237,0,140],
[173,50,58],[210,126,41],[9,137,164],[189,88,150],[201,159,138],[184,147,125]]

Create-LUT-color-card-2.png
 
Last edited:
Top