X-Git-Url: http://users.mur.at/ms/git/gitweb/?p=OpenColorIO-Configs.git;a=blobdiff_plain;f=aces_1.0.1%2Fpython%2Faces_ocio%2Fcolorspaces%2Fpanasonic_gh4.py;h=bf7ef1da22f90c06429c7608e6f3893eeb01d777;hp=1d0c95b76c5edd4bc057620fdd657cf4033410c6;hb=576b6267be0b98bc64fb64c0a026b35a9c105fc7;hpb=53086cf74147603796da1ab49798f75ecce655d9 diff --git a/aces_1.0.1/python/aces_ocio/colorspaces/panasonic_gh4.py b/aces_1.0.1/python/aces_ocio/colorspaces/panasonic_gh4.py index 1d0c95b..bf7ef1d 100644 --- a/aces_1.0.1/python/aces_ocio/colorspaces/panasonic_gh4.py +++ b/aces_1.0.1/python/aces_ocio/colorspaces/panasonic_gh4.py @@ -5,7 +5,7 @@ Implements support for *Panasonic GH4* colorspaces conversions and transfer functions based on empirical data. """ -# from panasonic_gh4_data import * +from panasonic_gh4_data import * import numpy as np from scipy import interpolate @@ -170,22 +170,18 @@ styles = { 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 - - #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]) - 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() @@ -220,7 +216,8 @@ def create_gh4_style(gamut, lut_directory, lut_resolution_1d, aliases, - style=None, + legal_range, + style, variant=''): """ Creates colorspace covering the conversion from GH4 picture styles @@ -238,6 +235,8 @@ def create_gh4_style(gamut, 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 @@ -249,18 +248,24 @@ def create_gh4_style(gamut, A ColorSpace container class referencing the LUTs, matrices and identifying information for the requested colorspace. """ - - name = ('GH4-%s - GH4-%s-Gamut %s' % (transfer_function, gamut, variant)).strip() + + 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 == '': name = ('Linear - GH4-%s-Gamut %s' % (gamut, variant)).strip() 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.family = 'Input/Panasonic/GH4' + cs.family = 'Input/Panasonic/GH4 %s' %style cs.is_data = False # A linear space needs allocation variables @@ -271,11 +276,13 @@ def create_gh4_style(gamut, 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) @@ -290,7 +297,6 @@ def create_gh4_style(gamut, 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, @@ -354,15 +360,18 @@ def create_gh4_style(gamut, return cs if variant == ('Calibrated'): - # wb = [0.]*16 - # wb[0] = calibration_wb[style][0] - # wb[5] = calibration_wb[style][1] - # wb[10] = calibration_wb[style][2] - # wb[15] = 1.0 - # cs.to_reference_transforms.append({ - # 'type': 'matrix', - # 'matrix': wb, - # 'direction': 'forward'}) + wb = [0.]*16 + 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'}) + + # calibrat_matrices = clibration_matrices_argyll + cs.to_reference_transforms.append({ 'type': 'matrix', 'matrix': (calibration_matrices[style][0] + [0.0] + @@ -376,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.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', - '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'}) @@ -446,101 +455,89 @@ def create_colorspaces(lut_directory, lut_resolution_1d): 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' % style, - style, - lut_directory, - lut_resolution_1d, - ['gh4_%s_xyz' % style.lower().replace('-','_')], - variant='XYZ') - 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' % 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, - ['gh4_%s_gh4_calibrated_gamut'% style.lower().replace('-','_')], - style, - variant='Calibrated') - 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, - ['lin_gh4_%s_calibrated_gamut'%style.lower().replace('-','_')], + ['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, - variant='Calibrated') - colorspaces.append(style_6) + '', + 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 - -calibration_matrices = { - -'Cinelike-D': [[1.165504, 0.251869, -0.118313], - [-0.369525, 1.80097, -0.096786], - [-0.05245, 0.097669, 1.326889]], - 'Cinelike-V': [[1.060891, 0.353566, -0.102382], - [-0.460172, 1.927755, -0.122295], - [-0.129601, 0.137134, 1.373328]], - 'Custom': [[0.946141, 0.485274, -0.087787], - [-0.555203, 2.05073, -0.100206], - [-0.128126, 0.12821, 1.426733]], - 'Natural': [[0.874551, 0.439286, -0.085863], - [-0.516138, 1.916301, -0.11907], - [-0.071172, 0.056567, 1.347203]], - 'Portrait': [[0.660386, 0.650877, -0.060211], - [-0.600758, 1.998228, -0.085769], - [-0.110666, 0.124363, 1.339439]], - 'Scenery': [[0.812315, 0.534553, -0.098869], - [-0.542253, 1.934419, -0.071867], - [-0.123626, 0.142352, 1.292352]], - 'Standard': [[0.886056, 0.415669, -0.073317], - [-0.482919, 1.84707, -0.088924], - [-0.117718, 0.126855, 1.321097]], - 'V-Log': [[1.127527, 0.284008, -0.033005], - [-0.192653, 1.619262, -0.030388], - [-0.080181, 0.057527, 1.39992]], - 'Vivid': [[0.754924, 0.526196, -0.061668], - [-0.503233, 1.851748, -0.065254], - [-0.197153, 0.267533, 1.212053]] - -}