[argyllcms] Re: Purplish blues with Perceptual in Argyll 1.1.0_RC1

  • From: Elena [service address] <1007140@xxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Sat, 28 Nov 2009 14:19:44 +0100

Hello Graeme

On 28-Nov-2009, Graeme Gill wrote:

> I think that V1.1.0 RC1 does have this tendency more than 1.0.4, but
> it depends a lot on the shapes of the two gamuts involved. I'm working
> on RC2 in light of various feedback, and intend to increase the hue
> error weight, so that the RC2 result in this respect should be much
> closer to 1.0.4.

Well, for your convenience here's colprof output when generating the
same profile (very basic settings, to make things easier). First is
1.0.4, then 1.1.0 RC1. To be more precise, the sRGB pure blue (0,0,255)
with Perceptual intent is mapped to CMYK 69 70 0 0 with 1.0.4, and to
66 69 0 0 with 1.1.0 RC1. It may seem a subtle difference just by
numbers, but the final result is a noticeably more desaturated, or
slighly purplish blue for the eye.

---------------------------------------------------------------------------
D:\>Argyll_V1.0.4\bin\colprof -v -qm -nc -kp 0 .3 1 1 .5 -l300 -L100 -s 
sRGB.icm Elena1105
No CIE data found, switching to spectral with standard observer & D50
Total ink limit being used is 300%
No black ink limit being used
No of test patches = 1320
Estimating white point
Approximate White point XYZ = 0.885148 0.913574 0.837177, Lab = 96.557024 
0.784482 -6.923463
Creating optimised per channel curves
Initial White Point XYZ 0.885148 0.913574 0.837177, Lab 96.557024 0.784482 
-6.923463
About to optimise temporary matrix
...................................
About to optimise input curves and matrix
........................................................................................................................
........................................................................................................................
...........................................................................................
About to optimise output curves and matrix
................................
About to optimise input curves and matrix again
.................................
About to optimise input, matrix and output together
............
About to adjust a and b output curves for white point

About to create grid position input curves

Create final clut from scattered data
************************************************************************************************************************
****************************************************
Doing White point fine tune:
Before fine tune, WP = XYZ 0.955073 0.990788 0.820010, Lab 99.642718 -0.042701 
-0.219982
After fine tune, WP = XYZ 0.876823 0.905176 0.832223, Lab 96.211056 0.747492 
-7.122715
Creating fast inverse input lookups
Compensate scattered data for input curves
White point XYZ = 0.876823 0.905176 0.832223, Lab = 96.211056 0.747492 -7.122715
Find black point
K only value (Lab) = 24.215452 0.421609 0.473384
Black point XYZ = 0.011948 0.012276 0.008932, Lab = 10.759077 0.361640 1.889487
Done A to B table creation
Setting up B to A table lookup
Creating Gamut Mapping
 Finding Source Colorspace Perceptual Gamut
 Finding Destination Gamut
 Creating Gamut match
 Gamut Mapping Specification:
  Description = ' p - Perceptual (Preferred) [ICC Perceptual]'
  Closest ICC intent = 'Perceptual'
  Using Color Apperance Space
  Using Mapping with parameters:
  Grey axis alignment   factor 1.000000
  Grey axis white compression factor 1.000000
  Grey axis white expansion   factor 1.000000
  Grey axis black compression factor 1.000000
  Grey axis black expansion   factor 1.000000
  Grey axis knee        factor 1.000000
  Gamut compression factor 1.000000
  Gamut expansion   factor 0.000000
  Gamut knee        factor 0.500000
  Gamut Perceptual mapping weighting factor 1.000000
  Gamut Saturation mapping weighting factor 0.000000
  Saturation enhancement factor 0.000000
Gamut map resolution: 25
Neutral axis no-adapt extend and bend
Src colorspace white/black are 99.999299 -1.729331 -1.047519, 8.006853 
-0.475320 -0.287954
Src gamut white/black are      99.999299 -1.729331 -1.047519, 8.006853 
-0.475320 -0.287954
Dst colorspace white/black are 100.000000 -0.674099 0.710695, 12.387116 
0.308240 2.735436
Target (blended) dst wp/bp   = 100.000000 -0.674099 0.710695, 12.387116 
0.308240 2.735436
Adapted target wp/bp         = 100.000000 -0.674099 0.710695, 10.300765 
-0.397821 -0.125693
Adapted & extended tgt wp/bp = 100.000000 -0.674099 0.710695, 10.300765 
-0.397821 -0.125693
Bend target                                              bp = 12.387116 
0.308240 2.735436
Rotate matrix src wp/bp      = 100.000000 -1.729340 -1.047525, 10.307830 
-0.506686 -0.306953
Rotate matrix dst wp/bp      = 100.000000 -0.674099 0.710695, 10.300765 
-0.397821 -0.125693
Rotated source grey axis wp/bp 99.999299 -0.674097 0.710689, 7.999606 -0.390733 
-0.147150
Rotated gamut grey axis wp/bp  99.999299 -0.674097 0.710689, 7.999606 -0.390733 
-0.147150
Destination axis target wp/bp  100.000000 -0.674099 0.710695, 10.300765 
-0.397821 -0.125693
Mapped source grey axis wp/bp  100.028138 -0.674185 0.710958, 10.161280 
-0.397391 -0.126994
Optimizing source to destination mapping...
............
Gamut hull mapping errors: = avg 2.241841, max 10.070078
White is 99.348182 -0.775044 0.940619, should be 100.000000 -0.674099 0.710695
Black is 10.088844 0.063491 1.363004, ideal is 10.300765 0.331633 2.783652
After fine tuning:
White is 100.000000 -0.674099 0.710695, should be 100.000000 -0.674099 0.710695
Black is 10.088844 0.063491 1.363004, ideal is 10.300765 0.331633 2.783652
Creating B to A tables
Rev cache RAM = 1922 Mbytes
There is 1 rev cache instance with 1922 Mbytes limit
100%
Done B to A tables
Creating gamut boundary table
100%
Done gamut boundary table
There is 1 rev cache instance with 1922 Mbytes limit
profile check complete, peak err = 7.901657, avg err = 1.456172



--------------------------------------------------------------------------------
D:\>Argyll_V1.1.0_RC1\bin\colprof -v -D"1.1" -qm -nc -kp 0 .3 1 1 .5 -l300 
-L100 -s sRGB.icm Elena1105
No CIE data found, switching to spectral with standard observer & D50
Total ink limit being used is 300%
No black ink limit being used
No of test patches = 1320
Estimating white point
Approximate White point XYZ = 0.885148 0.913574 0.837177, Lab = 96.557024 
0.784482 -6.923463
Creating optimised per channel curves
Initial White Point XYZ 0.885148 0.913574 0.837177, Lab 96.557024 0.784482 
-6.923463
About to optimise temporary matrix
 100%
About to optimise input curves and matrix
 100%
About to optimise output curves and matrix
 100%
About to optimise input curves and matrix again
 100%
About to optimise input, matrix and output together
 100%
About to adjust a and b output curves for white point
About to create grid position input curves
Create final clut from scattered data
************************************************************************************************************************
************************************************************************************************************************
************************************************************************************************************************
************************************************************************************************************************
************************************************************************************************************************
************************************************************************************************************************
************************************************************************************************************************
***********************************************************************
Doing White point fine tune:
Before fine tune, rel WP = XYZ 0.954646 0.990239 0.818775, Lab 99.621338 
-0.024807 -0.156614
After fine tune, rel WP = XYZ 0.964200 1.000000 0.824900, Lab 100.000000 
-0.000000 -0.000000
Creating fast inverse input lookups
White point XYZ = 0.876415 0.904669 0.830967, Lab = 96.190102 0.762688 -7.057919
Find black point
K only value (Lab) = 24.217209 0.422318 0.474908
Black point XYZ = 0.008336 0.008557 0.005894, Lab = 7.729141 0.347358 2.197771
Done A to B table creation
Setting up B to A table lookup
Creating Gamut Mapping
 Finding Source Colorspace Perceptual Gamut
 Finding Destination Gamut
 Creating Gamut match
 Gamut Mapping Specification:
  Description = ' p - Perceptual (Preferred) (Default) [ICC Perceptual]'
  Closest ICC intent = 'Perceptual'
  Using Color Apperance Space
  Using Mapping with parameters:
  Grey axis alignment   factor 1.000000
  Grey axis white compression factor 1.000000
  Grey axis white expansion   factor 1.000000
  Grey axis black compression factor 1.000000
  Grey axis black expansion   factor 1.000000
  Grey axis knee        factor 1.000000
  Gamut compression factor 1.000000
  Gamut expansion   factor 0.000000
  Gamut knee        factor 0.300000
  Gamut Perceptual mapping weighting factor 1.000000
  Gamut Saturation mapping weighting factor 0.000000
  Saturation enhancement factor 0.000000
Gamut map resolution: 25
Neutral axis no-adapt extend and bend
Vertex count: mult. = 2.500824, src 607, img 607 dst 591, target 1425
Average number of length guide neigbours = 151.491228, min = 73
Average number of direction guide neigbours = 99.443509, min = 56
Optimizing source to destination mapping...
.......
Creating rspl..
Gamut hull mapping errors: = avg 0.969741, max 4.011488
Fine tuning white and black point mapping
Creating B to A tables
Rev cache RAM = 1122 Mbytes
There is 1 rev cache instance with 1122 Mbytes limit
There are 2 rev cache instances with 561 Mbytes limit
100%
Done B to A tables
Creating gamut boundary table
100%
Done gamut boundary table
There is 1 rev cache instance with 1122 Mbytes limit
profile check complete, peak err = 5.861244, avg err = 1.130242, RMS = 1.389105


>>    //www.freelists.org/post/argyllcms/profile-black-generation,8
>
> My experience with this is that it's a combination of both the profile
> itself (per channel curve shapes, clut grid resolution) and the black
> generation parameters being used.

Btw, the grey scale is always homogeneous and shows no irregularities.

> Changing the black generation
> curve shape can have a big influence on the bumps, so it's worth
> exploring the settings using xicclu -g, and then re-creating
> the profile.

I made an experiment generating a profile with -ni -no -np, resulting with
straight curves. Bumps are less noticeable here, but basically are still
here.

> Basically the current algorithm doesn't make
> any attempt at guaranteeing black smoothness (or putting it
> another way, minimizing dramatic changes in the ink
> combinations), so choosing a black curve that is sympathetic
> to the values at the gamut edges helps minimize the "bumps".
> Increasing table resolution helps too, but at the cost of
> processing time.

Oh I tried making a devicelink with -G and using it for an rgb->cmyk
conversion. Bumps seems definitely gone aways with this path. I see
other, differents irregularities which seem more related to the
profile gamut shape, instead, but which aren't really problematic.

> It can be slow, depending on the nature of the device and the size of the
> profile. One thing to check is whether your machine is running out
> of memory and swapping to disk. This makes things very, very slow.
> Basically Argyll assumes that most of the memory is available to it,
> and attempts to use as much as possible to speed things up.
> If there are other applications present that are also using
> noticeable chunks of memory (ie. Firefox etc. is pretty bad),
> then Argyll will start to swap. Looking at the performance
> monitor will give you a hint - if one CPU is not at 100%,
> then it's swapping. In this case you either need to
> shut down other applications, and/or reduce the amount
> of memory Argyll is attempting to use by setting the
> ARGYLL_REV_CACHE_MULT environment variable to a value
> less than 1.0 (See <http://www.argyllcms.com/doc/Performance.html>).

Yesterday I tried to generate a profile with -qh avoiding the Saturation
table, which I really don't need (-s versus -S). Yes, it took perhaps
a couple of hours, a definitely more feasable job. I of course received
the message "cell exhausted - proceeding in chunks". I have 2GB RAM,
no other apps running. I augmented MULT to 1.5 but I see the
same effect. Not a major issue, however.

bye
/&

Other related posts: