How to calculate RP-177 3×3 matrices in Matlab

How to calculate RP-177 3×3 matrices in Matlab.

The Matlab code is made by Tinna Lif Gunnarsdottir.

To make DCPs in DCI-P3 D6O, D61, D65 or Rec 709 D60, D61, D65 you can use SMPTE RP-177:1993 3×3 NPMs to transfer from RGB to XYZ.

NPM = normalized primary matrix

For more info on the math see SMPTE EG 432-1-10 and How to make 3D LUTs in Nuke (R´B´G´to X´Y´Z´)

update:

Here are some 3D LUTS made with these 3×3 matrices

Example: DCI-P3 D6O

Here is the matlab code to calculate the correct RP-177 RGB-XYZ matrices to go from DCI-P3 D6O to XYZ.

MATLAB CODE
#DCI-P3 Primaries

R = [0.68 ; 0.320 ; 0];
G = [0.265 ; 0.690 ; 0.045];
B = [0.150 ; 0.060 ; 0.79];

P = [R G B];

#DCI- P3 D60 Whitepoint

X = 0.3217;
Y = 0.3378;
Z = 0.3405;

W = [X/Y ; 1 ; Z/Y];

CC = P \ W;

C = [ CC(1,1) 0 0 ; 0 CC(2,1) 0 ; 0 0 CC(3,1)];

NPM = P * C

NPM =

0.504739646629896 0.264744009223770   0.182855006076470 0.237524539590539 0.689333457978873   0.073142002430588
0                                               0.044956529868187   0.963036365336076

END MATLAB CODE

Pasted into a Nuke color matrix node:
0.50473965   0.26474401     0.18285501
0.23752454    0.68933346    0.073142
0                            0.04495653   0.96303637

The middle row sum to 1
0.23752454+0.68933346+0.073142=1

Other 3X3 NPM matrices

The Rec709 and DCI-P3 D65 3×3 matrices is also used in this post

DCI-P3 D65

WHITE POINT
X = 0.3127;
Y = 0.3290;
Z = 0.3583;

NPM from matlab:
0.486570948648216 0.265667693169093 0.198217285234362
0.228974564069749 0.691738521836506 0.0792869140937450
0                                               0.045113381858903 1.043944368900976

Pasted into a Nuke color matrix node:
0.48657095  0.26566769  0.19821729
0.22897457   0.69173852    0.07928691
0                           0.04511338    1.04394437

The middle row sums to 1
0.22897457+0.69173852+0.07928691 = 1


DCI-P3 D61

WHITE POINT
X = 0.3198;
Y = 0.3360;
Z = 0.3442;

NPM from matlab:
0.500852913533834 0.264968867481203  0.185963933270677
0.235695488721804 0.689918937969925  0.0743855733082713
0                                              0.044994713345865  0.979410048558897

Pasted into a Nuke color matrix node:
0.50085291 0.26496887 0.18596393
0.23569549 0.68991894 0.07438557
0                          0.04499471 0.97941005

Middle row sums to 1
0.23569549+0.68991894+0.07438557=1

DCI-P3 DCI-WHITE

WHITE POINT
X = 0.314;
Y = 0.351;
Z = 0.335;

NPM from matlab
0.445169815564552 0.277134409206778   0.172282669815565 0.209491677912731   0.721595254161044    0.068913067926226
0                                              0.047060560053981 0.907355394361973

Pasted into a Nuke color matrix node:
0.44516982 0.27713441     0.17228267
0.20949168 0.72159525    0.06891307
0                         0.04706056   0.90735539

Middle row sums to 1
0.20949168+0.72159525+0.06891307=1

REC 709
REC 709 D65, D60, D61 fits inside DCI-P3 and can be used in DCPs.

REC709 Primaries
R = [0.640 ; 0.330 ; 0.030];
G = [0.300 ; 0.600 ; 0.100];
B = [0.150 ; 0.060 ; 0.790];

REC 709 D65

D65 WHITE POINT
X = 0.3127;
Y = 0.3290;
Z = 0.3583;

NPM from matlab:
0.412390799265959 0.357584339383878 0.180480788401834
0.212639005871510   0.715168678767756   0.072192315360734
0.019330818715592   0.119194779794626   0.950532152249661

Pasted into a Nuke color matrix node:
0.4123908  0.3575843   0.18048079
0.21263901 0.71516867 0.07219232
0.01933082 0.1191948   0.95053215

The middle row should sum to 1 according to RP-177 so I changed 0.71516868 to 0.71516867.


REC 709 D60

D60 WHITE POINT
X = 0.3217;
Y = 0.3378;
Z = 0.3405;

NPM from matlab:
0.431575918832227 0.355727231008106 0.165035512089804
0.222531333147867 0.711454462016212   0.066014204835922
0.020230121195261 0.118575743669369  0.869187030339634

Pasted into a Nuke color matrix node:
0.43157592 0.35572723 0.16503551
0.22253133 0.71145447  0.0660142
0.02023012 0.11857574 0.86918703

Changed 0.71145446 to 0.71145447 so the middle row sums to 1
0.22253133+0.71145447+0.0660142= 1

REC 709 D61

D61 WHITE POINT

X = 0.3198;
Y = 0.3360;
Z = 0.3442;

NPM from matlab:
0.427462229871868 0.356162746222987 0.168160738190859
0.220410212277682  0.712325492445975 0.067264295276343
0.020037292025244 0.118720915407662 0.885646554471856

Pasted into a Nuke color matrix node:
0.42746223 0.35616275 0.16816074
0.22041021  0.71232549 0.0672643
0.02003729 0.11872092 0.88564655
Middle row sums to 1
0.22041021+0.71232549+0.0672643=1

 

2 Replies to “How to calculate RP-177 3×3 matrices in Matlab”

Leave a Reply

Your email address will not be published. Required fields are marked *