refine
Author: Graeme Gill

## tweak/refine

### Summary

Refine creates an abstract profile, by comparing CIE measurement values from two test charts. The charts will usually be in .ti3 format, but only XYZ, Lab or spectral values will be used (ie. all device space values are ignored). Typically the charts would be printed on a target system (the one being emulated, say a printing press, or created using an ideal target profile such as Rec709), and the proofing system (the device that is being profiled). The abstract profile that refine produces will be a correction that makes the proofing system behave more like the target. This can then be used to recreate the proofing systems ICC profile, or device link. By feeding a previous abstract correction profile in as well, iterative improvement can be made to the proofing reproduction.
colverify is a useful tool to use on the two test charts, to check how well the refinement is proceeding. If a white point relative match is being created (refine -R), then use veryify -N.

### Usage Summary

`usage: refine [-options] cietarget ciecurrent [outdevicc] [inabs] outabs``
` `-v Verbose``
` `-c Create initial abstract correction profile``
` `-g Don't impose output device gamut limit``
` `-r res Set abstract profile clut resolution (default 33)``
` `-d factor Override default damping factor (default 0.950000)``
` `-R Aim for white point relative match rather than absolute``
` `-f [illum] Use Fluorescent Whitening Agent compensation [opt. simulated inst. illum.:``
` `M0, M1, M2, A, C, D50 (def.), D50M2, D65, F5, F8, F10 or file.sp]``
` `-i illum Choose illuminant for computation of CIE XYZ from spectral data & FWA:``
` `A, C, D50 (def.), D50M2, D65, F5, F8, F10 or file.sp``
` `-o observ Choose CIE Observer for spectral data:``
` `1931_2, 1964_10, 2012_2 (def.), 2012_10, S&B 1955_2, J&V 1978_2 or file.cmf``
` `cietarget Target CIE or spectral values, CGATS file (e.g. .ti3)``
` `ciecurrent Actual CIE or spectral values, CGATS file (e.g. .ti3)``
` `[outdevicc] Output device ICC profile to set gamut limit (not used if -g)``
` `[inabs] Previous abstract correction ICC profile (not used if -c)``
` `outabs Created/refined abstract correction ICC profile`

### Usage Details

refine provides a way of improving the profile accuracy of a proofing system.
The -v flag prints out extra information during the checking, and prints each patch value, rather than just a summary.
The -c option is used when refine is being used for the first time, and there is no previous abstract profile to continue refining. If -c is used, then the name of the previous abstract correction profile should not be supplied.
If the -g flag indicates that an output device profile is not being supplied, and that corrections should be attempted, even if the colors are outside the devices gamut. Normally an output device profile is supplied, and corrections aren't applied to colors outside the devices gamut, since this will not achieve anything useful, and can distort the results.
If the -r parameter overrides the resolution of the CLUT grid used in the abstract profile. By default the value is 33, but other
values can be chosen. An odd number is recommended.
If the -d parameter sets how aggressively refine should try and correct errors. Normally it will try and exactly compensate for the color errors revealed in comparing the two measurement files, but if the device behaviour is unusual, or not very repeatable, this may result in successive applications of refine making things worse, rather than better. If this is the case, try using a smaller number, such as 0.8, or 0.5.
If the -R flag is used, then refine creates an abstract profile for improving the match of the patch values when interpreted in a white point relative (ie. Relative Colorimetric) intent. If used to create a corrected device link profile using collink, remember to create a Relative colorimetric intent device link profile.
The -f flag enables Fluorescent Whitening Agent (FWA) compensation. This only works if spectral data is available and, the instrument is not UV filtered. FWA compensation adjusts the spectral samples so that they appear to have been measured using an illuminant that has a different level of Ultra Violet to the one the instrument actually used in the measurement. The optional illumination parameter allows specifying a standard or custom illumination spectrum to be used as the similated instrument illuminant, overriding the default D50 or CIE computation illuminant used for FWA (see -i below). See colprof -f for a fuller explanation. The same value should be used as was used during the creation of the profile.
The -i flag allows specifying a standard or custom illumination spectrum, applied to the spectral test point values to compute CIE tristimulus values. A, D50, D50M2, D65, F5, F8, F10 are a selection of standard illuminant spectrums, with D50 being the default. If a filename is specified instead, it will be assumed to be an Argyll specific .sp spectrum file. If FWA compensation is used during measurement, this illuminant will be used by default as the simulated instrument illuminant. The same value should be used as was used during the creation of the profile.
The -o flag allows specifying a tristimulus observer, and is used to compute CIE tristimulus values. The following choices are available:
1931_2 selects the standard CIE 1931 2 degree observer.
1964_10 selects the standard CIE 1964 10 degree observer.
2012_2 selects the proposed CIE 2012 2 degree observer
2012_10 selects the proposed CIE 2012 10 degree observer
1955_2 selects the Stiles and Birch 1955 2 degree observer
1978_2 selects the Judd and Voss 1978 2 degree observer
shaw selects the Shaw and Fairchild 1997 2 degree observer
file.cmf selects an observer specified by the given .cmf file.
If both CIE and spectral values are present in the input files, the CIE values will be used by default. Using the -i, -o or -f flag will force spectral values to be used. The the -i, -o or -f flags will apply to both the target and measured input files.
cietarget Is the filename of the target CIE or spectral values. This is a CGATS file (e.g. a .ti3 made using chartread). These are the color values wanted for each patch in the test chart, typically the product of the target print system.
ciecurrent Is the filename of the actual, current measured CIE or spectral values. This is a CGATS file (e.g. a .ti3 made using chartread). The errors between these patches and the patches in the cietarget file will be used to create a correction profile.
[outdevicc] If the -g flag is not used, then the output device ICC profile should be supplied here, to allow refine to limit its corrections to colors that are within the gamut of the device.
[inabs] After the first correction has been created, subsequent corrections need to improve upon previous ones, so the previous correction profile should be provided here. For the first correction, the -c flag should be used, and this argument is omitted.
outabs The name of the created or refined abstract correction ICC profile

### Discussion

Refine is typically used in a proofing situation, in which a verification chart is being used to check the accuracy of a proofing system. (It might also be used for more arbitrary color alterations by created two test chart files by hand.) By using the errors between the target chart and the measured values, refine attempts to improve the match between the proofing system and its target.
There is facility in collink, colprof and revfix to incorporate an abstract profile.
For systems using two device profiles or a device link to convert between the target space printing files and the proofing device space, the following would be a typical scenario:
We have a reference set of test chart values, read from the target system reference.ti3. The ICC profile for the target system is target.icm. The ICC profile for the proofing system is proofer.icm. If using a device link, the device link used to print proofer test charts is currently target_proofer.icm:
First we print the test chart out on the proofing system and read it in, resulting in a chart1.ti3 file.
Lets check how well the proofing system current matches using colverify:
colverify reference.ti3 chart1.ti3
We then create our initial abstract correction fix profile fix1.icm using refine:
refine -v -c reference.ti3 chart1.ti3 proofer.icm fix1.icm
Applying this to your process for creating the proofer device profile or target to proofing device link (choose one of the three options below, depending whether you are using the proofer profile and just want to alter its colorimetric B2A table using revfix, whether you are going to recreate the proofer file from the original measurement data using colprof, or whether you are using a device link profile created using collink):
revfix -v -1 -ke -p fix1.icm proofer.icm proofer_fix1.icm
or
copy proofer.ti3 proofer_fix1.ti3
colprof -v -p fix1.icm proofer_fix1
or
collink -v -s -ia -oa -p fix1.icm target.icm proofer.icm target_proofer_fix1.icm
Note that the above example is a simple one - you should use all the same options as you used to create your initial proofer.icm or target_proofer.icm, with the addition of the "-p fix1.icm" option to specify the abstract correction profile be applied.
Use the proofer_fix1.icm or target_proofer_fix1.icm to print out the test chart again, and read it in, resulting in chart2.ti3 file.
Lets check how well the proofing system matches after this first round of refinement using colverify:
colverify reference.ti3 chart2.ti3
>>>
We can then start another round of improvement:
We refine our previous abstract correction fix profile using refine:
refine -v reference.ti3 chart2.ti3 proofer.icm fix1.icm fix2.icm
Applying this new abstract profile to our process for creating the proofing device profile or link again:
revfix -v -1 -ke -p fix2.icm proofer.icm proofer_fix2.icm
or
copy proofer.ti3 proofer_fix2.ti3
colprof -v -p fix2.icm proofer_fix2
or
collink -v -s -ia -oa -p fix2.icm target.icm proofer.icm target_proofer_fix2.icm
Use the proofer_fix2.icm or target_proofer_fix2.icm to print out the test chart again, and read it in, resulting in chart3.ti3 file.
Check again how well the proofing system matches after this first round of refinement using colverify:
colverify reference.ti3 chart3.ti3
Rounds of improvements can be continues by looping back to >>>, being careful to increment the names of the fixN.icm, proofer_fixN.icm or target_proofer_fixN.icm and chartN.ti3files. Stop when exhausted, or if it looks like things are getting worse, rather than better. If the latter happens, it might be good to revert to the results from a previous round.