Back to home

Scanner ICC Profile Generator Accuracy Benchmark

Batch CR2026.01.13 · Scan research/img20260224_1447.tiff
(ColorRuler IT8.7/2, 8-bit RGB, 2217×1580, 300 dpi) · Reference research/CR2026.01.13.txt(batch average, D50 2°)
Participants: ColorRuler engine + 7 commercial generators + ArgyllCMS 3.5.0 (open source) (i1Profiler v3.8.2 / EZcolor v2.6.5 / Basiccolor v5.3.1 / ProfileMaker v5.0.10 / ProfilePrism v6.03 / SilverFast v8.8 / VueScan v9.7.95) · all three rendering intents reported
Referee: LittleCMS (Pillow ImageCms), 8-bit in / 8-bit Lab out; ΔE00 computed with service.metrics.de2000 (coloraide).

1. Key metrics (absolute colorimetric · ΔE2000)

Best, absolute colorimetric (mean ΔE2000)
ColorRuler 0.584
Best, relative colorimetric (mean ΔE2000)
ColorRuler 0.707
Worst, absolute colorimetric (mean ΔE2000)
VueScan 7.16
Participants
9

Mean covers the overall level; the tail covers consistency. ICC quality should be judged together with the hit rates at ≤1/≤2/≤5, the shape of the error distribution, and whether any patches run away.

2. Ranking under the three rendering intents

Intent tags: A2B0 = perceptual, A2B1 = relative colorimetric, A2B2 = saturation; missing tables fall back to A2B0. Primary metric = absolute colorimetric (same semantics as the reference data).

2.1 Absolute colorimetric (primary metric)

Same semantics as the absolutely measured reference data; accuracy is judged on this metric.

#GeneratorΔE76 meanΔE00 meanMedianMaxHits ≤1Hits ≤2Hits ≤5ΔL*
1ColorRuler0.9190.5840.4244.31248279288-0.11
2i1Profiler0.9700.6990.3907.10225267287+0.03
3ArgyllCMS1.0520.7210.4925.81225274286+0.00
4EZcolor1.1970.8420.4888.43216253287+0.24
5Basiccolor1.9421.2100.9135.84154241286-0.04
6ProfileMaker3.6672.4192.2897.341295282-1.81
7ProfilePrism5.0962.7662.3729.2529114260+0.35
8SilverFast4.9773.0922.8907.24859264-1.72
9VueScan12.8557.1597.25513.7601157-4.20

2.2 Relative colorimetric

Media white is mapped to the PCS white point. ArgyllCMS's 3.41 here is not a mapping defect: its wtpt declares the measured paper white (L*≈93.5) and relative colorimetric performs no such white-point rescaling, so the rendering comes out ≈4 L* too bright. The same profile scores 0.72 in absolute colorimetric (ΔL residual 0.00).

#GeneratorΔE76 meanΔE00 meanMedianMaxHits ≤1Hits ≤2Hits ≤5ΔL*
1ColorRuler0.9840.7070.5924.33247279288+0.44
2EZcolor1.1970.8420.4888.43216253287+0.24
3i1Profiler1.6581.1821.0556.95117261287+1.03
4SilverFast2.1221.4020.8968.44156233275-0.19
5Basiccolor2.7311.8711.8216.9834178286+1.60
6ProfileMaker3.6892.4322.3727.6024104279+1.51
7ProfilePrism5.0962.7662.3729.2529114260+0.35
8ArgyllCMS5.0373.4153.8555.23237286+3.96
9VueScan10.4286.0335.92915.9701089-4.20

2.3 Perceptual

This column always uses A2B0; profiles without A2B1/A2B2 fall back to A2B0 in the relative and saturation columns as well. ArgyllCMS ships only A2B0, so its value here equals its relative colorimetric result (see the note under 2.2).

#GeneratorΔE76 meanΔE00 meanMedianMaxHits ≤1Hits ≤2Hits ≤5ΔL*
1ColorRuler0.9840.7070.5924.33247279288+0.44
2SilverFast2.1221.4020.8968.44156233275-0.19
3EZcolor1.9521.4211.2808.5058245287+1.26
4Basiccolor2.7311.8711.8216.9834178286+1.60
5ProfileMaker3.6892.4322.3727.6024104279+1.51
6ProfilePrism5.0962.7662.3729.2529114260+0.35
7i1Profiler5.2113.3663.3779.59228269+3.21
8ArgyllCMS5.0373.4153.8555.23237286+3.96
9VueScan10.4286.0335.92915.9701089-4.20

3. Mean ΔE00 under absolute colorimetric

0.58ColorRuler0.70i1Profiler0.72ArgyllCMS0.84EZcolor1.21Basiccolor2.42ProfileMaker2.77ProfilePrism3.09SilverFast7.16VueScan

4. Profile structure

GeneratorVersionICC versionPCSSizeCreatorHeader intent
ColorRuler—2.2Lab 223 KBCRLRperceptual
i1Profilerv3.8.24.3Lab 284 KBXRCMperceptual
ArgyllCMSv3.5.02.2Lab 256 KBarglrelative
EZcolorv2.6.52.0Lab 191 KB—perceptual
Basiccolorv5.3.12.0Lab 261 KBbICCperceptual
ProfileMakerv5.0.102.4Lab 122 KBLOGOperceptual
ProfilePrismv6.032.0Lab 205 KB—perceptual
SilverFastv8.82.1XYZ 213 KB—perceptual
VueScanv9.7.952.3XYZ 1 KBlcmsperceptual

Column notes: "Header intent" is the rendering-intent field at ICC header offset 64 — a vendor-declared default that CMMs ignore when the caller specifies an intent explicitly.

5. Method and reproduction

Common input: all 288 device RGB patches come from the project's own targeting (detect_any_angle + robust_extract, rotation −0.900°).
Referee: LittleCMS (Pillow ImageCms), 8-bit in / 8-bit Lab out; ΔE00 computed with service.metrics.de2000 (coloraide).

Test dataset download

Complete test dataset (ZIP):Download

The archive contains the scan (img20260224_1447.tiff), the reference color values, the 9 ICC profiles evaluated here (including the ArgyllCMS build, ArgyllCMS v3.5.0.icm) and the evaluation script eval_all_v2.py; download it to reproduce the reported numbers.

6. Scope and caveats

Four statements to read before the tables: they determine what the numbers can and cannot be read as, and they are why this report argues about ranking and order of magnitude rather than about "a 0.05 gap proves superiority".

  1. In-sample data: every profile evaluated here — ColorRuler's included — was built from the same 288 measured patches used for the evaluation. The numbers therefore measure how well a generator fits (interpolates) colours it has already seen, not how well it generalises to unseen colours; there is no hold-out set and no cross-validation. Higher-parameter models benefit most from this setup (LUT-based profiles most of all, low-parameter matrix profiles such as VueScan least).
  2. Gamut clipping: when a device RGB falls outside a profile's gamut, LittleCMS maps it onto the gamut boundary, so the resulting ΔE00 contains clipping error rather than interpolation error. The perceptual intent is by specification allowed to compress the whole gamut, so the numbers in 2.3 are not an accuracy metric; of the three intents only absolute colorimetric shares the semantics of the reference data (absolutely measured, paper white L*≈93.8). Relative colorimetric is covered by the last statement.
  3. Quantisation uncertainty: the referee chain is 8-bit in / 8-bit Lab out, and Pillow's LAB image quantises a*/b* to integers (step 1.0; L* step 0.39). Measured on this panel, that adds a floor of about +0.26 to the per-patch ΔE00 (≈+0.40 for ΔE76, max 0.70). The floor is of the same order for every participant, so it does not reorder the table but makes the absolute values slightly pessimistic; gaps of the order of 0.1 should not be read into. The project's direct 16-bit CLUT path only covers LUT-based profiles (matrix profiles have no CLUT to read, and v4 mAB tables have to be located heuristically), so this report deliberately uses one real CMM for all nine participants instead.
  4. White-point convention: generators do not agree on how to declare the media white point — per spec it should equal the absolute PCS coordinates of the white that the CLUT treats as 100. Declaring the measured paper white (ArgyllCMS, L*≈93.5) versus a normalised white produces a global L* shift under relative colorimetric. That is a convention difference, not a mapping-capability difference: the same profile scores 3.41 there and 0.72 under absolute colorimetric. This is also why absolute colorimetric is the primary metric here.