public version 0.2
[OpenColorIO-Configs.git] / aces_1.0.1 / python / aces_ocio / colorspaces / panasonic_gh4.py
index b5cdf28..bf7ef1d 100644 (file)
@@ -170,22 +170,18 @@ styles = {
     254.96413793103449, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0]
 }
 
     254.96413793103449, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0]
 }
 
-def prepare_photostyle_to_linear(style, corr=None, debug_plot=False):
+def prepare_photostyle_to_linear(style, legal_range=False, debug_plot=False):
 
 
-    # 18% gray card correction
+    # 18% gray card exposure offset
     corr = 16.5
     corr = 16.5
-    
-    #if not corr:
-    #    if style == 'V-Log':
-    #        corr = 16.5
-    #    else:
-    #        #corr = 17.3
-    #        corr = 16.5
 
     exp = np.linspace( (corr-39)/3.0, corr/3.0, 40)
     l = np.power(2, exp) * 0.18
     vals = np.array(styles[style])
 
     exp = np.linspace( (corr-39)/3.0, corr/3.0, 40)
     l = np.power(2, exp) * 0.18
     vals = np.array(styles[style])
-    vals = vals/255
+    if legal_range:
+        vals = vals/255.0 * (235-16)/255.0 + 16/255.0
+    else:
+        vals = vals/255.0
 
     # remove visible edges at some exposure values
     print 'DIR:', dir()
 
     # remove visible edges at some exposure values
     print 'DIR:', dir()
@@ -220,7 +216,9 @@ def create_gh4_style(gamut,
                      lut_directory,
                      lut_resolution_1d,
                      aliases,
                      lut_directory,
                      lut_resolution_1d,
                      aliases,
-                     style=None):
+                     legal_range,
+                     style,
+                     variant=''):
     """
     Creates colorspace covering the conversion from GH4 picture styles 
     to ACES based on empirical data
     """
     Creates colorspace covering the conversion from GH4 picture styles 
     to ACES based on empirical data
@@ -237,6 +235,12 @@ def create_gh4_style(gamut,
         The resolution of generated 1D LUTs
     aliases : list of str
         Aliases for this colorspace
         The resolution of generated 1D LUTs
     aliases : list of str
         Aliases for this colorspace
+    legal_range: bool
+        Add legal range shaper
+    style : str
+        Associated Photo Style
+    variant : str
+        Variant of processing
 
     Returns
     -------
 
     Returns
     -------
@@ -244,18 +248,24 @@ def create_gh4_style(gamut,
     A ColorSpace container class referencing the LUTs, matrices 
     and identifying information for the requested colorspace.
     """
     A ColorSpace container class referencing the LUTs, matrices 
     and identifying information for the requested colorspace.
     """
-
-    name = 'GH4-%s - GH4-%s-Gamut' % (transfer_function, gamut)
+    
+    if legal_range:
+        legal_str = 'Legal range '
+    else:
+        legal_str = ''
+        
+    name = ('%sGH4-%s - GH4-%s-Gamut %s' % ( legal_str, transfer_function,
+                                            gamut, variant)).strip()
     if transfer_function == '':
     if transfer_function == '':
-        name = 'Linear - GH4-%s-Gamut' % gamut
+        name = ('Linear - GH4-%s-Gamut %s' % (gamut, variant)).strip()
     if gamut == '':
     if gamut == '':
-        name = 'Curve - GH4-%s' % transfer_function
+        name = 'Curve - %sGH4-%s' % (legal_str, transfer_function)
 
     cs = ColorSpace(name)
     cs.description = name
     cs.aliases = aliases
     cs.equality_group = ''
 
     cs = ColorSpace(name)
     cs.description = name
     cs.aliases = aliases
     cs.equality_group = ''
-    cs.family = 'Input/Panasonic/GH4'
+    cs.family = 'Input/Panasonic/GH4 %s' %style
     cs.is_data = False
 
     # A linear space needs allocation variables
     cs.is_data = False
 
     # A linear space needs allocation variables
@@ -266,11 +276,13 @@ def create_gh4_style(gamut,
     cs.to_reference_transforms = []
 
     if transfer_function != '':
     cs.to_reference_transforms = []
 
     if transfer_function != '':
-        f = prepare_photostyle_to_linear(transfer_function)
+
+        if legal_range:
+            lut = 'gh4_%s_legal_to_linear.spi1d' % transfer_function.lower()
+        else:
+            lut = 'gh4_%s_to_linear.spi1d' % transfer_function.lower()
+        f = prepare_photostyle_to_linear(transfer_function, legal_range)
         
         
-        #data = array.array('f', '\0' * lut_resolution_1d * 4)
-        #for c in range(lut_resolution_1d):
-        #    data[c] = v_log_to_linear(float(c) / (lut_resolution_1d - 1))
         dom = np.linspace(0.0, 1.0, lut_resolution_1d)
         data = f(dom)
 
         dom = np.linspace(0.0, 1.0, lut_resolution_1d)
         data = f(dom)
 
@@ -285,7 +297,6 @@ def create_gh4_style(gamut,
             else:
                 data[i] = data_max
         
             else:
                 data[i] = data_max
         
-        lut = 'gh4_%s_to_linear.spi1d' % transfer_function
         genlut.write_SPI_1d(
             os.path.join(lut_directory, lut),
             0.0,
         genlut.write_SPI_1d(
             os.path.join(lut_directory, lut),
             0.0,
@@ -344,20 +355,23 @@ def create_gh4_style(gamut,
                        0, 0, 0, 1.0],
             'direction': 'forward'})
 
                        0, 0, 0, 1.0],
             'direction': 'forward'})
 
-        if gamut.endswith('XYZ'):
+        if variant == ('XYZ'):
             cs.from_reference_transforms = []
             return cs
 
             cs.from_reference_transforms = []
             return cs
 
-        if gamut.endswith('Calibrated'):
+        if variant == ('Calibrated'):
             wb = [0.]*16
             wb = [0.]*16
-            wb[0] = calibration_wb[style][0]
-            wb[5] = calibration_wb[style][1]
-            wb[10] = calibration_wb[style][2]
+            wb[0] = 1/calibration_wb[style][0]
+            wb[5] = 1/calibration_wb[style][1]
+            wb[10] = 1/calibration_wb[style][2]
             wb[15] = 1.0
             cs.to_reference_transforms.append({
                 'type': 'matrix',
                 'matrix': wb,
                 'direction': 'forward'})
             wb[15] = 1.0
             cs.to_reference_transforms.append({
                 'type': 'matrix',
                 'matrix': wb,
                 'direction': 'forward'})
+
+            # calibrat_matrices = clibration_matrices_argyll
+            
             cs.to_reference_transforms.append({
                 'type': 'matrix',
                 'matrix': (calibration_matrices[style][0] + [0.0] +
             cs.to_reference_transforms.append({
                 'type': 'matrix',
                 'matrix': (calibration_matrices[style][0] + [0.0] +
@@ -371,14 +385,14 @@ def create_gh4_style(gamut,
         # colour.chromatic_adaptation_matrix_VonKries(
         #   colour.xy_to_XYZ(colour.ILLUMINANTS[
         #     'CIE 1931 2 Degree Standard Observer']['D50']),
         # colour.chromatic_adaptation_matrix_VonKries(
         #   colour.xy_to_XYZ(colour.ILLUMINANTS[
         #     'CIE 1931 2 Degree Standard Observer']['D50']),
-        #   colour.xy_to_XYZ(colour.V_GAMUT_COLOURSPACE.whitepoint),
+        #   colour.xy_to_XYZ(colour.ACES_2065_1_COLOURSPACE.whitepoint),
         #   'CAT02')
         
         cs.to_reference_transforms.append({
             'type': 'matrix',
         #   'CAT02')
         
         cs.to_reference_transforms.append({
             'type': 'matrix',
-            'matrix': [ 0.95991641, -0.02931741,  0.06566143, 0.0,
-                        -0.02119542,  0.99887268,  0.02613247, 0.0,
-                        0.00137075,  0.00443593,  1.31260073, 0.0,
+            'matrix': [ 9.71197151e-01,  -2.17328334e-02,  4.59761326e-02, 0.0,
+                        -1.56890302e-02,  1.00002082e+00,  1.83070138e-02, 0.0,
+                        9.70076767e-04,   3.08175255e-03,  1.21767128e+00, 0.0,
                         0, 0, 0, 1.0],
             'direction': 'forward'})
 
                         0, 0, 0, 1.0],
             'direction': 'forward'})
 
@@ -441,67 +455,89 @@ def create_colorspaces(lut_directory, lut_resolution_1d):
     
     styles_sort = styles.keys()
     styles_sort.sort()
     
     styles_sort = styles.keys()
     styles_sort.sort()
-    
-    for style in styles_sort: 
 
 
-        # Full conversion
-        style_1 = create_gh4_style(
-            style,
-            style, 
-            lut_directory,
-            lut_resolution_1d,
-            ['gh4_%s_gh4_gamut' % style.lower().replace('-','_')])
-        colorspaces.append(style_1)
-
-        # Linearization Only
-        style_2 = create_gh4_style(
-            '',
-            style,
-            lut_directory,
-            lut_resolution_1d,
-            ['crv_gh4_%s' % style.lower().replace('-','_')])
-        colorspaces.append(style_2)
-
-        # Linearization and XYZ conversion
-        style_3 = create_gh4_style(
-            '%s-XYZ' % style,
-            style,
-            lut_directory,
-            lut_resolution_1d,
-            ['gh4_%s_xyz' % style.lower().replace('-','_')])
-        colorspaces.append(style_3)
-
-        # Primaries Only
-        style_4 = create_gh4_style(
-            style,
-            '',
-            lut_directory,
-            lut_resolution_1d,
-            ['lin_gh4_%s_gamut' % style.lower().replace('-','_')])
-        colorspaces.append(style_4)
+    for legal_range in [True, False]:
+        
+        for style in styles_sort: 
 
 
-        if style != 'BW':
-            
-            # Full conversion calibrated
-            style_5 = create_gh4_style(
-                '%s-Calibrated' % style,
+            if legal_range:
+                lower_style='%s_legal' % style.lower().replace('-','_')
+            else:
+                lower_style='%s' % style.lower().replace('-','_')
+
+            # Full conversion
+            style_1 = create_gh4_style(
+                style,
                 style, 
                 lut_directory,
                 lut_resolution_1d,
                 style, 
                 lut_directory,
                 lut_resolution_1d,
-                ['gh4_%s_gh4_calibrated_gamut'% style.lower().replace('-','_')],
-                style)
-            colorspaces.append(style_5)
+                ['gh4_%s_gh4_gamut' % lower_style],
+                legal_range=legal_range,
+                style=style)
+            colorspaces.append(style_1)
 
 
-            # Primaries Only calibrated
-            style_6 = create_gh4_style(
-                '%s-Calibrated' % style,
+            # Linearization Only
+            style_2 = create_gh4_style(
                 '',
                 '',
+                style,
                 lut_directory,
                 lut_resolution_1d,
                 lut_directory,
                 lut_resolution_1d,
-                ['lin_gh4_%s_calibrated_gamut'%style.lower().replace('-','_')],
-                style)
-            colorspaces.append(style_6)
+                ['crv_gh4_%s' % lower_style],
+                legal_range=legal_range,
+                style=style)
+            colorspaces.append(style_2)
+
+            # # Linearization and XYZ conversion
+            # # only necessary for matrix calculation
+            #
+            # style_3 = create_gh4_style(
+            #     style,
+            #     style,
+            #     lut_directory,
+            #     lut_resolution_1d,
+            #     ['gh4_%s_xyz' % lower_style],
+            #     legal_range=legal_range,
+            #     style=style,
+            #     variant='XYZ')
+            # colorspaces.append(style_3)
+
+            # Primaries Only
+            style_4 = create_gh4_style(
+                style,
+                '',
+                lut_directory,
+                lut_resolution_1d,
+                ['lin_gh4_%s_gamut' % lower_style],
+                legal_range=legal_range,
+                style=style
+            )
+            colorspaces.append(style_4)
+
+            if style != 'BW':
+
+                # Full conversion calibrated
+                style_5 = create_gh4_style(
+                    style,
+                    style, 
+                    lut_directory,
+                    lut_resolution_1d,
+                    ['gh4_%s_gh4_calibrated_gamut'% lower_style],
+                    legal_range=legal_range,
+                    style=style,
+                    variant='Calibrated')
+                colorspaces.append(style_5)
+
+                # Primaries Only calibrated
+                style_6 = create_gh4_style(
+                    style,
+                    '',
+                    lut_directory,
+                    lut_resolution_1d,
+                    ['lin_gh4_%s_calibrated_gamut'%lower_style],
+                    legal_range=legal_range,
+                    style=style,
+                    variant='Calibrated')
+                colorspaces.append(style_6)
 
             
     return colorspaces
 
             
     return colorspaces
-