how to create a dcp for an artificial light source

Hi,

TL;DR: I’d love to read about your experience in making DCP profiles for artificial light sources.

I’ve been trying to make a DCP for my { current camera + macro lens + LED video light source + target } in the context of scanning film (and inverting it in RawTherapee Film Negative module by @rom9).
I bought a target (Datacolor SpyderCheckr24) - fun fact? I also happen to have bought been scammed into a new old stock sealed faulty calibrite colorchecker passport - it lacks the 24-patch card (!).

After having read rawpedia’s article, I went through Torger’s dcamprof documentation here and there.
I think I need the interaction with the experienced members here :slightly_smiling_face:

So, feel free to comment on how you actually orient, light, shoot and preprocess your target before feeding it through the “basic” dcamprof workflow.

A. Orient the target and the light source:

  1. Datacolor say the light source should be at a 45° angle.
    a. sounds reasonable (to avoid most of the glare),
    b. but in practice, I get some glare, most easily seen on the shiny-grainy texture of the grid of the target → I defocus slightly (just as Torger says).
  2. Datacolor don’t mention anything about target orientation when illumination evenness is compromised (read: I can’t easily light my target evenly). This is where Torger suggests: " If you have visibly uneven light, orient the target such that darker patches are on the bright side, if possible. "
    a. is this enough?
    b. I thought it wasn’t (but I can’t prove it, yet) so I used the Graduated Filter tool in RT to reduce a bit of the lightness gradient I could most visibly see on the grid lines.
    c. flat-field: not sure how I should do it in RT, in this specific case. Get a white non-shiny piece of paper, shoot it in the same lighting conditions and then what? is that so easily applicable to this situation?

B. Target should be flat (in the reference image output): not really a problem, I have a copy stand (Kaiser RS2XA); if it were a problem, I’d retouch perspective in RT.

C. Lens should be closed down sufficiently to get contrast, fall-off problems out of the way. Not a problem. I use the automatic lens corrections anyway in RT.

D. ETTR should be used. Easy for me in-camera with UniWB. Otherwise, I’d check RT raw histogram.

E. Straighten, crop and rotate: OK.

  • the brightest “white” patch must be at the top left corner, per the description of the target in the ref directory of argyllcms
unfold me (datacolor reference guide excerpt)

Lighting the SpyderCheckr

Mount the SpyderCheckr or place in a stable location. Light it from a 45 degree angle. The ideal way to light a target is to use a single lightsource, with no reflector or diffuser, from a long distance. This assures that all portions of the target will have the same amount and and color of light, reducing fall-off and color variation across the width of a target. A good fluorescent proofing lamp placed in front of the target, with the bulb along the length of the target, shining down from above at 45 degrees, will offer even light. The perfect light source (in terms of color quality, as well as being a point source at a great distance) is the sun… but the sun comes with an automatic second light source, diffused, and of a very different color, called sky light. So if you shoot the target using sunlight, its best to do it under an overhang where there is minimal skylight involved.

Honestly, to me, the elephant in the room is the illumination evenness. Do you agree?
Should I solve this before the acquisition? or are the dcamprof features robust enough to compensate for that? I don’t get what the “glare-matching” features do (or how they do it, esp. after looking at the suggested JSON target layout file contents dcamprof/data-examples/cc24-layout.json) :confused: : quoting from the manual:

Once I get this sorted out, I might consider using my faulty colorchecker passport (for skin tones), too, to combine it into the DCP :smiley: (stupid idea?)

Also, can someone dumb down, for me, the process of evaluating the results of the scanin, make-profile, make-dcp sequence?

unfold me for console output
$ scanin -v -p -dipn nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif /opt/homebrew/Cellar/argyll-cms/2.3.0/ref/SpyderChecker24.{cht,cie}
                                                                                                         
Input file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif': w=2971, h=4278, d = 3, bpp = 16
Data input file '/opt/homebrew/Cellar/argyll-cms/2.3.0/ref/SpyderChecker24.cie'
Data output file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'
Chart reference file '/opt/homebrew/Cellar/argyll-cms/2.3.0/ref/SpyderChecker24.cht'
Creating diagnostic tiff file 'diag.tif'
About to allocate scanrd_ object
Verbosity = 2, flags = 0x62a01
About to read input tiff file and discover groups
adivval = 1.000000
About to calculate edge lines
704 useful edges out of 5250
About to calculate perspective correction
Perspective correction factors = -0.000003 0.000004 1485.500000 2139.000000
About to calculate rotation
Mean angle = -0.250376
Standard deviation = 3.321807
Robust mean angle = 0.029528 from 558 lines
About to calculate feature information
About to read reference feature information
Read of chart reference file succeeded
About to match features
Checking xx
Checking yy
Checking xy
Checking yx
Checking xix
Checking yiy
Checking xiy
Checking yix
Axis matches for each possible orientation:
  0: xx  = 0.416864, yy  = 0.332026, xx.sc  = 0.145293, yy.sc  = 0.144657
 90: xiy = 0.311533, yx  = 0.142099, xiy.sc = 0.147144, yx.sc  = 0.280691
180: xix = 0.416864, yiy = 0.354814, xix.sc = 0.145293, yiy.sc = 0.144293
270: xy  = 0.320125, yix = 0.142099, xy.sc  = 0.147096, yix.sc = 0.280691
r0 = 0.530600, r90 = 0.179498, r180 = 0.543654, r270 = 0.183546
bcc = 0.543654, wcc = 0.179498
There are 2 candidate rotations:
cc = 0.530600, irot = 0.029528, xoff = 47.039445, yoff = -55.332419, xscale = 6.882655, yscale = 6.912913
cc = 0.543654, irot = 180.029528, xoff = -2913.665415, yoff = -4236.097761, xscale = 6.882655, yscale = 6.930327
About to compute match transform for rotation 0.029528 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
About to compute match transform for rotation 180.029528 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
Expected value distance values are:
0, rot 0.029528: 2387.960477
1, rot 180.029528: 4936.632612
Chosen rotation 0.029528 deg. as best
About to compute final match transform
Improve match
About to setup value scanrdg boxes
About to read raster values
About to write diag file
Writing output values to file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'

$ ~/programs/dcamprof/dcamprof/src/dcamprof make-profile -g ~/programs/dcamprof/dcamprof/data-examples/cc24-layout.json ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220625/nikon_D750_60mmAFD_CN-T96_spydercheckr24.{ti3,profile.json}

Reading target...
Glare test before glare matching...
Warning: large dynamic range difference detected. Likely glare issue.
Camera G on darkest patch(es) is 274.5% lighter compared to observer Y.
  Y dynamic range is 5.01 stops, G dynamic range is 3.10 stops, difference
  1.90 stops. A small difference is normal, while a large indicates that there
  is glare.
Glare-matching target...
  Minimum Y changed from 0.027800 to 0.132705. Glare was modeled in RGB space.
Testing glare after adjusting reference values (camera G and observer Y should
  be close).
Camera G on darkest patch(es) is -20.6% lighter compared to observer Y.
  Y dynamic range is 2.77 stops, G dynamic range is 3.10 stops, difference
  -0.33 stops. A small difference is normal, while a large indicates that there
  is glare.
Generating values for the calibration illuminant D50...
The most neutral patch (A06) differs 4.43 DE from actual neutral,
  transforming target reference XYZ values to match, using CAT02.
Automatic LUT relaxation weights assigned.
Making camera profile...
Finding a camera raw RGB to CIE XYZ matrix for calibration illuminant D50...
Warning: whitest (most neutral) patch in target (A06) differs DE 4.43
  from calibration illuminant, matrix precision may suffer.
Inverting to get ColorMatrix:
  {
    "ColorMatrix1": [
      [  1.122317, -0.355064, -0.233984 ],
      [ -0.800380,  1.625453,  0.161850 ],
      [ -0.344698,  0.439426,  0.750296 ]
    ]
  }
Matrix patch match average DE 6.00, DE LCh 2.85 3.52 2.72
                    median DE 6.09, DE LCh 2.95 3.15 3.13
                       p90 DE 8.30, DE LCh 5.21 6.26 4.57
                       max DE 10.47, DE LCh 5.79 9.05 6.37
ColorMatrix optimal white balance for target: 0.540897,1,0.73557 (m1.84878,1,1.35949)
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  {
    "LUTMatrix1": [
      [  0.627650,  0.134828,  0.201740 ],
      [  0.236348,  0.701442,  0.062210 ],
      [  0.000103,  0.042855,  0.782243 ]
    ]
  }
LUTMatrix optimal white balance for target: 0.51573,1,0.773449 (m1.939,1,1.29291)
Matrix patch match average DE 6.75, DE LCh 2.63 3.53 4.03
                    median DE 6.50, DE LCh 2.36 3.45 3.51
                       p90 DE 10.22, DE LCh 6.22 7.78 9.19
                       max DE 12.07, DE LCh 7.37 8.28 10.10
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  Y row limit set to -0.2.
Applying white-balance to get ForwardMatrix:
  {
    "ForwardMatrix1": [
      [  0.578345,  0.166102,  0.219771 ],
      [  0.274867,  0.710576,  0.014557 ],
      [  0.087680, -0.276181,  1.013702 ]
    ]
  }
ForwardMatrix optimal white balance for target: 0.51573,1,0.773449 (m1.939,1,1.29291)
Matrix patch match average DE 5.92, DE LCh 2.83 2.92 3.33
                    median DE 5.64, DE LCh 2.76 3.08 3.31
                       p90 DE 8.53, DE LCh 5.31 5.58 5.40
                       max DE 12.05, DE LCh 5.92 7.98 7.40
Making 2.5D chromaticity-addressed lookup table for XYZ correction...
16.67% of the patches was put in a chromaticity group due to nearby neighbor.
  25.00% of the patches was removed due to being nearby the whitepoint.
  Largest chromaticity group contains 2 patches. Patch count reduced from
  24 to 14. Note that patch matching cannot reach 100% when chromaticity
  groups are formed, as the LUT matches the average within a group.
Lightness axis is disabled. Since lightness affects chroma, the LUT chroma
  control points are recalculated to better match the uncorrected lightness.
  A residual error of up to about 0.2 DE is expected.
Relaxing LUT stretch with up to 2.72 DE. Iterating over 14 patches...
  Lightness correction is disabled.
Average DE for the 14 tested patches increased to 3.02 after LUT relax.
  0.00% could do without LUT correction.
Native LUT patch match average DE 4.24, DE LCh 2.85 1.60 1.73
                        median DE 3.70, DE LCh 2.77 1.11 1.06
                           p90 DE 7.44, DE LCh 5.31 4.38 5.53
                           max DE 11.38, DE LCh 5.92 8.60 8.01
5 worst patches for Overall DE:
  A01 RGB 0.525 1.000 0.763 XYZref 0.757 0.793 0.786 XYZcam 0.960 0.994 0.811 sRGB #D7E8FC #FEFEFC DE 11.38 DE LCh +5.00 -8.60 -5.53 (whitish purple-blue)
  A03 RGB 0.255 0.486 0.366 XYZref 0.422 0.443 0.430 XYZcam 0.471 0.488 0.386 sRGB #A6B3C0 #BBB9B5 DE 9.82 DE LCh +2.13 -5.27 -8.01 (pale purple-blue)
  D03 RGB 0.071 0.161 0.073 XYZref 0.176 0.202 0.124 XYZcam 0.126 0.154 0.073 sRGB #728068 #60734E DE 7.44 DE LCh -5.92 +4.38 -1.09 (grayish yellow-green)
  A04 RGB 0.150 0.285 0.215 XYZref 0.245 0.256 0.236 XYZcam 0.276 0.286 0.227 sRGB #848B92 #93918E DE 6.79 DE LCh +2.49 -2.84 -5.65 (gray 60%)
  C01 RGB 0.270 0.193 0.047 XYZref 0.447 0.366 0.088 XYZcam 0.348 0.282 0.055 sRGB #E88C4C #D17B36 DE 5.97 DE LCh -5.81 +0.33 +1.31 (orange)
5 worst patches for Lightness DE:
  D03 RGB 0.071 0.161 0.073 XYZref 0.176 0.202 0.124 XYZcam 0.126 0.154 0.073 sRGB #728068 #60734E DE 7.44 DE LCh -5.92 +4.38 -1.09 (grayish yellow-green)
  C01 RGB 0.270 0.193 0.047 XYZref 0.447 0.366 0.088 XYZcam 0.348 0.282 0.055 sRGB #E88C4C #D17B36 DE 5.97 DE LCh -5.81 +0.33 +1.31 (orange)
  B06 RGB 0.071 0.193 0.314 XYZref 0.146 0.139 0.312 XYZcam 0.195 0.181 0.392 sRGB #3D68AC #5373BE DE 5.58 DE LCh +5.31 +0.96 +2.40 (purple-blue)
  C06 RGB 0.510 0.548 0.165 XYZref 0.568 0.533 0.133 XYZcam 0.712 0.669 0.168 sRGB #F4B55C #FEC967 DE 5.18 DE LCh +5.05 +1.11 +0.18 (light orange)
  A01 RGB 0.525 1.000 0.763 XYZref 0.757 0.793 0.786 XYZcam 0.960 0.994 0.811 sRGB #D7E8FC #FEFEFC DE 11.38 DE LCh +5.00 -8.60 -5.53 (whitish purple-blue)
5 worst patches for Chroma DE:
  A01 RGB 0.525 1.000 0.763 XYZref 0.757 0.793 0.786 XYZcam 0.960 0.994 0.811 sRGB #D7E8FC #FEFEFC DE 11.38 DE LCh +5.00 -8.60 -5.53 (whitish purple-blue)
  A03 RGB 0.255 0.486 0.366 XYZref 0.422 0.443 0.430 XYZcam 0.471 0.488 0.386 sRGB #A6B3C0 #BBB9B5 DE 9.82 DE LCh +2.13 -5.27 -8.01 (pale purple-blue)
  D03 RGB 0.071 0.161 0.073 XYZref 0.176 0.202 0.124 XYZcam 0.126 0.154 0.073 sRGB #728068 #60734E DE 7.44 DE LCh -5.92 +4.38 -1.09 (grayish yellow-green)
  A04 RGB 0.150 0.285 0.215 XYZref 0.245 0.256 0.236 XYZcam 0.276 0.286 0.227 sRGB #848B92 #93918E DE 6.79 DE LCh +2.49 -2.84 -5.65 (gray 60%)
  B01 RGB 0.060 0.275 0.296 XYZref 0.189 0.252 0.394 XYZcam 0.182 0.233 0.330 sRGB #00A1C3 #0F90AD DE 3.28 DE LCh -1.80 -2.74 -0.22 (blue)
5 worst patches for Hue DE:
  A03 RGB 0.255 0.486 0.366 XYZref 0.422 0.443 0.430 XYZcam 0.471 0.488 0.386 sRGB #A6B3C0 #BBB9B5 DE 9.82 DE LCh +2.13 -5.27 -8.01 (pale purple-blue)
  A04 RGB 0.150 0.285 0.215 XYZref 0.245 0.256 0.236 XYZcam 0.276 0.286 0.227 sRGB #848B92 #93918E DE 6.79 DE LCh +2.49 -2.84 -5.65 (gray 60%)
  A01 RGB 0.525 1.000 0.763 XYZref 0.757 0.793 0.786 XYZcam 0.960 0.994 0.811 sRGB #D7E8FC #FEFEFC DE 11.38 DE LCh +5.00 -8.60 -5.53 (whitish purple-blue)
  A02 RGB 0.373 0.709 0.537 XYZref 0.615 0.640 0.544 XYZcam 0.689 0.713 0.568 sRGB #CED1D4 #DEDBD7 DE 4.54 DE LCh +2.40 +0.32 -3.84 (gray 80%)
  A05 RGB 0.079 0.151 0.113 XYZref 0.158 0.165 0.143 XYZcam 0.146 0.152 0.119 sRGB #6E7174 #6D6C69 DE 3.88 DE LCh -1.68 -0.19 -3.49 (gray 50%)
5 best patches for Overall DE:
  A06 RGB 0.060 0.117 0.090 XYZref 0.112 0.117 0.096 XYZcam 0.112 0.117 0.096 sRGB #5F5F5F #5F5F5F DE 0.00 DE LCh +0.00 +0.00 +0.00 (gray 40%)
  B02 RGB 0.236 0.187 0.218 XYZref 0.368 0.263 0.347 XYZcam 0.370 0.263 0.329 sRGB #C26FB2 #C56EAE DE 1.34 DE LCh -0.00 -0.19 +1.33 (purple)
  C03 RGB 0.283 0.183 0.130 XYZref 0.364 0.266 0.186 XYZcam 0.387 0.284 0.189 sRGB #D06F82 #D67383 DE 1.87 DE LCh +1.45 +0.29 +1.15 (purple-red)
  D02 RGB 0.151 0.308 0.344 XYZref 0.305 0.294 0.478 XYZcam 0.317 0.305 0.459 sRGB #7D91CE #8693CA DE 2.58 DE LCh +0.83 -1.49 +1.14 (purple-blue)
  D06 RGB 0.126 0.165 0.105 XYZref 0.181 0.174 0.122 XYZcam 0.198 0.187 0.125 sRGB #846F69 #8C716A DE 2.59 DE LCh +1.49 +2.12 -0.07 (brown)
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220625/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.json"...
Complete!

$ ~/programs/dcamprof/dcamprof/src/dcamprof make-dcp -n "Nikon D750" -d "NikonD750_60mmAFD_CN-T96" -t acr ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220625/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.{json,dcp} 
Generating 2.5D HueSatMap with 90x30 = 2700 entries...done!
The tone curve's contrast value is 1.30 (=> auto chroma scaling value 1.121)
Generating 3D LookTable with 90x30x30 = 81000 entries for the neutral tone reproduction operator...
  0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..100%
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220625/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.dcp"...
Complete!

Thanks very much for your time and help.

Its interesting that you mention ETTR…I always thought properly exposed for the white patch or as close as you could get was the goal. Other than lens corrections and in some cases wb or no wb…this is all you do to the image… I really have no idea for certain as I am no expert… One reference suggested a bracket be shot and use the one closest to the proper exposure… ~ 92-96 L value for the white patch…any shot requiring a correction greater than a third of a stop should not be used and certainly I would think using a graduated filter would be frowned upon??

It will be interesting to see what people have to say…

Timely, I just did one for a test with @hanatos’ mkssf…

The three things you need to do for a target shot that you wouldn’t normally do:

  1. Minimize the glare. You want the camera to be head-on to the target so the software can align it, but the light source should illuminated it at a 45degree angle.

  2. Underexpose. You don’t want to blow any of the patches, ETTR is good, but you can go even lower than that and things will still work. Blowing any patch, including the white one, will invalidate the profile.

  3. In post-processing, no tone curve, and definitely no white balance. In RT, use the Neutral processing profile, and turn off the white balance.

I just propped the target on its cover, pointed the light, and hand-held the camera. You want it sharp for the registration marks; the patches can be blurry because the software is sampling the overall color.

Same general thing for shooting the daylight target shot. Me, took a few weeks to get a cloudless D65 sky… :crazy_face:

Looking at your processing, you have some not-so-great dE numbers. That could be the glare dcamprof make-profile is reporting, but it could also be overexposure. For a matrix profile, your max dE should be something at or under 6.

Hi @priort and @ggbutcher

Thanks for reacting.

I’ll be quoting from the dcamprof manual

  • about sharpness:

I recommend to defocus very slightly so you won’t capture any structure of the target patches surface and instead get fields of pure color. If your camera lacks anti-alias filter this also makes sure you get no color aliasing issues. Shoot at a typical quite small aperture, say f/8 if using a 135 full-frame camera.

→ on the spydercheck24, I don’t have any registration marks. I’ll share pictures when I can (+ their .pp3).


  • about ETTR: it seems to be fairly applicable to my scenario (I operate with a margin, never all the way to the right), I think, since I’ll be feeding the dcp to RawTherapee (I don’t have Capture One)

If you know what you are doing you can push the exposure a little extra to get optimal “expose to the right” (ETTR) and thus as low noise as possible. But be careful, clipped colors will be a disaster in terms of results. I use to exposure bracket a few shots and check the levels in the linear raw conversion to see that there is no clipping. Note that if you’re making an ICC profile and use a raw converter that pre-process the raw data with a curve that compress highlights, like Capture One, ETTR is not optimal as that will put highlights in the compressed range. If so expose a bit lower (for Capture One putting the white at about 240 is suitable).
[…]

  • If you want to embed a tone-curve and make use of DCamProf’s neutral tone reproduction (which really makes more sense for a general purpose profile), you can do like this:
    • dcamprof make-dcp -n "Camera manufacturer and model" -d "My Profile" -t acr profile.json profile.dcp
  • The DNG profile is now ready to use in your raw converter.

  • about the preprocessing of the .tif to be (the “reference image” in RT terms):

yes, already a profile based off of the “Neutral” setting (difference in demosaic and default lens corrections)
→ quoting rawpedia:

In the Color Management tool click the “Save Reference Image” button, and in the window that appears make sure “Apply white balance” is not checked


  • about performance: there’s probably something here:

the profile is derived from 14 out of 24 patches, so I have 10 outliers. This is nasty.

I’ve found in this profiling process that it’s important to eliminate the variables. First is to get a decent exposure, and that’s about getting each pixel out of sensor saturation. Really, I think you can be a stop or more below ETTR and get a proper profile, because the process is all about how the various values relate, not about how “strong” they are. The “25.00% of the patches was removed due to being nearby the white point” indicates to me that exposure is too high. Get that under control and you can sort out the rest…

Post your target shot raw. With rawproc I can easily see the state of exposure…

The blurring can also be about noise… depending on the shot and the camera the patches can have a lot of contamination from color noise so the blurring also helps with this if it is present…

I think x-rite suggests to use a gray card for exposure with their cards so ie flip your spyderchecker or use that gray portion of whatever colorchecker is in use with auto exp or manually adjust to get the correct exposure for the 18% gray. If you fill the frame with the gray and expose then the exposure should be correct for thetest shot with the card in that light and the color data for the patches should be intact and accurate across the board wrt each other I would think…

1 Like

@ggbutcher
@priort
again, thanks for responding.

Notes: adding to my TODO:

  1. Once I get this sorted out, I might consider using my faulty colorchecker passport (for skin tones), too, to combine it into the DCP :smiley:
  2. almost same as (1), use “stacking”: shoot target from different relative orientations (NSWE :eight_pointed_black_star: ) to homogenise illumination in “pre”-processing. Is this done with the merging targets option in dcamprof?
  3. read the workflows Torger suggests here

Google Drive gave me “404 error: not found”…

In the histogram, that little green blip at the right indicates clipping somewhere in the frame. It might be glare-glint on some peripheral thing like text, but it could be in a patch.

Same here

Gee, don’t know why there was a typo in the link. Anyway. Fixed.

I’m still picking at it, right now I think that glare impinges on the patches at the “top” of the target shot. The patch report for the .dcp I generated, sorted by dE, looks like this:

  A02 DE 0.00 DE LCh +0.00 +0.00 +0.00 (gray 90%)
  B05 DE 0.75 DE LCh +0.26 +0.08 -0.70 (yellow-green)
  C06 DE 0.98 DE LCh -0.04 -0.32 -0.92 (light yellow)
  C05 DE 1.70 DE LCh +1.19 +0.57 -1.07 (light yellow-green)
  B03 DE 2.09 DE LCh -1.64 +1.07 -0.74 (light yellow)
  B04 DE 2.81 DE LCh -2.69 +0.25 -0.76 (red)
  D02 DE 2.81 DE LCh -1.60 -2.57 -0.39 (purple-blue)
  C03 DE 2.95 DE LCh -2.80 +0.23 +0.90 (purple-red)
  D04 DE 2.97 DE LCh +1.54 -2.20 -2.66 (purple-blue)
  B02 DE 3.27 DE LCh -2.88 -1.04 +1.12 (purple)
  D06 DE 3.86 DE LCh -2.92 +2.52 +0.01 (brown)
  D05 DE 3.90 DE LCh +3.78 -0.41 +0.88 (pink)
  A04 DE 5.00 DE LCh -1.69 -4.16 -2.20 (gray 70%)
  C02 DE 5.25 DE LCh -5.06 -2.56 -2.50 (purple-blue)
  B01 DE 6.36 DE LCh -6.03 -2.03 -0.20 (blue)
  A05 DE 6.80 DE LCh -6.44 -0.86 -2.01 (gray 60%)
  B06 DE 6.85 DE LCh +6.57 +1.84 -0.13 (purple-blue)
  A06 DE 7.16 DE LCh -6.92 +1.67 -0.68 (gray 50%)
  C04 DE 7.62 DE LCh -7.06 +2.73 -0.64 (grayish purple)
  D01 DE 7.75 DE LCh -7.67 -0.57 -0.96 (light cyan)
  A03 DE 8.03 DE LCh -1.10 -7.32 -3.11 (pale purple-blue)
  A01 DE 11.04 DE LCh +3.81 -10.36 +0.36 (whitish purple-blue)
  C01 DE 13.05 DE LCh -13.01 +0.35 -1.05 (light orange)
  D03 DE 15.02 DE LCh -15.01 +0.05 -0.60 (grayish yellow-green)

I use a ColorChecker24 Passport, and I find it easy to control the glare. I borrowed an IT8 when I was doing the SSF profile campaign, and it’s glare was horrid.

So, I think it’s the glare. A01 and C01, 3rd and 2nd highest dE, are on the edge impinged by the glare. D03, highest dE isn’t and it doesn’t look compromised, though.

Thing is, the target shot patches don’t look compromised. Anyway, if you can get a shot that minimizes the glare, you can go from there with other causes.

Thanks for having a look @ggbutcher
I’ll see how I can improve my initial capture (in a few weeks).
There’s probably something worth exploring when it comes to the distance of the light source (about sqrt(2)*80cm) - I need to find a way to position it farther away for the shot (for the relative falloff across the board).

1 Like

Hi @ggbutcher,

In today’s session, I’ve managed to light the target from about twice the distance I originally had.
I’ve also captured a flat-field shot (with plain A4 stacked sheets of paper) - I wonder if it’s used by the “Save Reference Image” feature, though :thinking:

  • The drive folder is updated.

  • For some reason, dcamprof complains about inability to match glare. Not sure why, though → I’ve generated the profile without that -g option.

  • achieved DeltaE looks better

  • but I’m still losing quite a few patches (8, this time)

unfold console output
$ scanin -v -p -dipn nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif /opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.{cht,cie}                                                                                                         
Input file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif': w=2805, h=4164, d = 3, bpp = 16
Data input file '/opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.cie'
Data output file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'
Chart reference file '/opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.cht'
Creating diagnostic tiff file 'diag.tif'
About to allocate scanrd_ object
Verbosity = 2, flags = 0x62a01
About to read input tiff file and discover groups
adivval = 1.000000
About to calculate edge lines
492 useful edges out of 1272
About to calculate perspective correction
Perspective correction factors = 0.000000 0.000000 1402.500000 2082.000000
About to calculate rotation
Mean angle = -0.051559
Standard deviation = 0.670876
Robust mean angle = -0.053280 from 420 lines
About to calculate feature information
About to read reference feature information
Read of chart reference file succeeded
About to match features
Checking xx
Checking yy
Checking xy
Checking yx
Checking xix
Checking yiy
Checking xiy
Checking yix
Axis matches for each possible orientation:
  0: xx  = 0.389006, yy  = 0.245273, xx.sc  = 0.146864, yy.sc  = 0.148771
 90: xiy = 0.266793, yx  = 0.144126, xiy.sc = 0.149801, yx.sc  = 0.286343
180: xix = 0.431623, yiy = 0.368707, xix.sc = 0.146401, yiy.sc = 0.146343
270: xy  = 0.258940, yix = 0.144126, xy.sc  = 0.149298, yix.sc = 0.286343
r0 = 0.453979, r90 = 0.158637, r180 = 0.567443, r270 = 0.154514
bcc = 0.567443, wcc = 0.154514
There are 2 candidate rotations:
cc = 0.453979, irot = -0.053280, xoff = -13.988076, yoff = -22.791769, xscale = 6.809022, yscale = 6.721734
cc = 0.567443, irot = 179.946720, xoff = -2823.851503, yoff = -4160.456273, xscale = 6.830565, yscale = 6.833241
About to compute match transform for rotation -0.053280 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
About to compute match transform for rotation 179.946720 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
Expected value distance values are:
0, rot -0.053280: 3173.299860
1, rot 179.946720: 4917.389895
Chosen rotation -0.053280 deg. as best
About to compute final match transform
Improve match
About to setup value scanrdg boxes
About to read raster values
About to write diag file
Writing output values to file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'

$ ~/programs/dcamprof/dcamprof/src/dcamprof make-profile -g ~/programs/dcamprof/dcamprof/data-examples/cc24-layout.json ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.{ti3,profile.json}
Reading target...
Glare test before glare matching...
Warning: large dynamic range difference detected. Likely glare issue.
Camera G on darkest patch(es) is 72.6% lighter compared to observer Y.
  Y dynamic range is 5.01 stops, G dynamic range is 4.22 stops, difference
  0.79 stops. A small difference is normal, while a large indicates that there
  is glare.
Glare-matching target...
Error: JCh value out of range. Too saturated reference XYZ values in target?

$ [1] ~/programs/dcamprof/dcamprof/src/dcamprof make-profile ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.{ti3,profile.json}
Reading target...
Warning: large dynamic range difference detected. Likely glare issue.
Camera G on darkest patch(es) is 72.6% lighter compared to observer Y.
  Y dynamic range is 5.01 stops, G dynamic range is 4.22 stops, difference
  0.79 stops. A small difference is normal, while a large indicates that there
  is glare.
Generating values for the calibration illuminant D50...
The most neutral patch (A03) differs 13.03 DE from actual neutral,
  transforming target reference XYZ values to match, using CAT02.
Automatic LUT relaxation weights assigned.
Making camera profile...
Finding a camera raw RGB to CIE XYZ matrix for calibration illuminant D50...
Warning: whitest (most neutral) patch in target (A03) differs DE 13.03
  from calibration illuminant, matrix precision may suffer.
Inverting to get ColorMatrix:
  {
    "ColorMatrix1": [
      [  0.968343, -0.239733, -0.088787 ],
      [ -0.472599,  1.258586,  0.243703 ],
      [ -0.136168,  0.227176,  0.640814 ]
    ]
  }
Matrix patch match average DE 1.70, DE LCh 0.83 0.60 0.98
                    median DE 1.67, DE LCh 0.43 0.40 0.54
                       p90 DE 3.40, DE LCh 2.13 1.67 2.42
                       max DE 5.08, DE LCh 4.94 1.87 3.83
ColorMatrix optimal white balance for target: 0.61822,1,0.62219 (m1.61755,1,1.60722)
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  {
    "LUTMatrix1": [
      [  0.655952,  0.126738,  0.181529 ],
      [  0.277746,  0.667885,  0.054369 ],
      [  0.000564,  0.002121,  0.822516 ]
    ]
  }
LUTMatrix optimal white balance for target: 0.544253,1,0.732324 (m1.83738,1,1.36552)
Matrix patch match average DE 5.24, DE LCh 2.56 3.47 2.97
                    median DE 5.57, DE LCh 2.72 3.50 2.35
                       p90 DE 9.79, DE LCh 4.84 7.87 6.44
                       max DE 10.32, DE LCh 8.89 8.66 8.45
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  Y row limit set to -0.2.
Applying white-balance to get ForwardMatrix:
  {
    "ForwardMatrix1": [
      [  0.719464,  0.148370,  0.096384 ],
      [  0.279271,  0.859873, -0.139144 ],
      [  0.059508, -0.312347,  1.078041 ]
    ]
  }
ForwardMatrix optimal white balance for target: 0.544253,1,0.732324 (m1.83738,1,1.36552)
Matrix patch match average DE 1.99, DE LCh 1.30 0.67 1.01
                    median DE 1.74, DE LCh 1.11 0.47 0.65
                       p90 DE 4.55, DE LCh 3.22 1.60 2.22
                       max DE 5.33, DE LCh 5.32 2.73 3.73
Making 2.5D chromaticity-addressed lookup table for XYZ correction...
8.33% of the patches was put in a chromaticity group due to nearby neighbor.
  25.00% of the patches was removed due to being nearby the whitepoint.
  Largest chromaticity group contains 2 patches. Patch count reduced from
  24 to 16. Note that patch matching cannot reach 100% when chromaticity
  groups are formed, as the LUT matches the average within a group.
Lightness axis is disabled. Since lightness affects chroma, the LUT chroma
  control points are recalculated to better match the uncorrected lightness.
  A residual error of up to about 0.2 DE is expected.
Relaxing LUT stretch with up to 4.00 DE. Iterating over 16 patches...
  Lightness correction is disabled.
Average DE for the 16 tested patches increased to 2.24 after LUT relax.
  43.75% could do without LUT correction.
Native LUT patch match average DE 1.98, DE LCh 1.26 0.87 0.78
                        median DE 1.74, DE LCh 0.85 0.53 0.78
                           p90 DE 3.86, DE LCh 3.22 3.04 1.51
                           max DE 5.33, DE LCh 5.32 3.69 2.06
5 worst patches for Overall DE:
  A06 RGB 0.029 0.053 0.040 XYZref 0.029 0.030 0.026 XYZcam 0.051 0.053 0.046 sRGB #303031 #404043 DE 5.33 DE LCh +5.32 +0.37 -0.14 (gray 20%)
  B06 RGB 0.039 0.109 0.186 XYZref 0.070 0.054 0.223 XYZcam 0.096 0.079 0.262 sRGB #004096 #1A4BA0 DE 4.72 DE LCh +4.60 -1.07 -1.45 (dark purple-blue)
  B04 RGB 0.183 0.077 0.044 XYZref 0.226 0.128 0.041 XYZcam 0.260 0.152 0.060 sRGB #BB2D3A #C43849 DE 3.86 DE LCh +3.22 -0.53 -2.06 (strong red)
  B03 RGB 0.414 0.546 0.128 XYZref 0.680 0.694 0.071 XYZcam 0.653 0.667 0.113 sRGB #FED400 #FDD043 DE 3.80 DE LCh -0.88 -3.69 -0.26 (light vivid yellow)
  C05 RGB 0.213 0.438 0.140 XYZref 0.394 0.493 0.093 XYZcam 0.370 0.457 0.117 sRGB #B0C43F #AABD54 DE 3.75 DE LCh -1.66 -3.12 +1.25 (light strong yellow-green)
5 worst patches for Lightness DE:
  A06 RGB 0.029 0.053 0.040 XYZref 0.029 0.030 0.026 XYZcam 0.051 0.053 0.046 sRGB #303031 #404043 DE 5.33 DE LCh +5.32 +0.37 -0.14 (gray 20%)
  B06 RGB 0.039 0.109 0.186 XYZref 0.070 0.054 0.223 XYZcam 0.096 0.079 0.262 sRGB #004096 #1A4BA0 DE 4.72 DE LCh +4.60 -1.07 -1.45 (dark purple-blue)
  B04 RGB 0.183 0.077 0.044 XYZref 0.226 0.128 0.041 XYZcam 0.260 0.152 0.060 sRGB #BB2D3A #C43849 DE 3.86 DE LCh +3.22 -0.53 -2.06 (strong red)
  B01 RGB 0.063 0.274 0.287 XYZref 0.134 0.195 0.310 XYZcam 0.152 0.213 0.342 sRGB #009CB7 #009DBC DE 2.48 DE LCh +1.99 -0.36 +1.44 (blue)
  B02 RGB 0.217 0.168 0.188 XYZref 0.314 0.203 0.254 XYZcam 0.338 0.220 0.254 sRGB #BF569B #C75A9B DE 2.34 DE LCh +1.78 -0.10 +1.51 (purple-red)
5 worst patches for Chroma DE:
  B03 RGB 0.414 0.546 0.128 XYZref 0.680 0.694 0.071 XYZcam 0.653 0.667 0.113 sRGB #FED400 #FDD043 DE 3.80 DE LCh -0.88 -3.69 -0.26 (light vivid yellow)
  C05 RGB 0.213 0.438 0.140 XYZref 0.394 0.493 0.093 XYZcam 0.370 0.457 0.117 sRGB #B0C43F #AABD54 DE 3.75 DE LCh -1.66 -3.12 +1.25 (light strong yellow-green)
  C06 RGB 0.344 0.348 0.094 XYZref 0.549 0.482 0.063 XYZcam 0.523 0.466 0.090 sRGB #FBA626 #F2A544 DE 3.26 DE LCh -0.74 -3.04 -0.93 (light strong orange)
  B05 RGB 0.080 0.260 0.108 XYZref 0.160 0.249 0.078 XYZcam 0.162 0.244 0.093 sRGB #4E9849 #509653 DE 2.40 DE LCh -0.44 -1.94 +1.34 (yellow-green)
  C04 RGB 0.058 0.082 0.101 XYZref 0.100 0.075 0.138 XYZcam 0.103 0.081 0.139 sRGB #5E4076 #5E4576 DE 1.89 DE LCh +1.11 -1.46 -0.62 (dark purple)
5 worst patches for Hue DE:
  B04 RGB 0.183 0.077 0.044 XYZref 0.226 0.128 0.041 XYZcam 0.260 0.152 0.060 sRGB #BB2D3A #C43849 DE 3.86 DE LCh +3.22 -0.53 -2.06 (strong red)
  C01 RGB 0.284 0.199 0.049 XYZref 0.420 0.320 0.045 XYZcam 0.413 0.313 0.051 sRGB #E97C27 #E77A2F DE 1.83 DE LCh -0.52 -0.68 -1.62 (strong orange)
  B02 RGB 0.217 0.168 0.188 XYZref 0.314 0.203 0.254 XYZcam 0.338 0.220 0.254 sRGB #BF569B #C75A9B DE 2.34 DE LCh +1.78 -0.10 +1.51 (purple-red)
  B06 RGB 0.039 0.109 0.186 XYZref 0.070 0.054 0.223 XYZcam 0.096 0.079 0.262 sRGB #004096 #1A4BA0 DE 4.72 DE LCh +4.60 -1.07 -1.45 (dark purple-blue)
  B01 RGB 0.063 0.274 0.287 XYZref 0.134 0.195 0.310 XYZcam 0.152 0.213 0.342 sRGB #009CB7 #009DBC DE 2.48 DE LCh +1.99 -0.36 +1.44 (blue)
5 best patches for Overall DE:
  A03 RGB 0.207 0.381 0.279 XYZref 0.368 0.381 0.315 XYZcam 0.368 0.381 0.315 sRGB #A5A5A5 #A5A5A5 DE 0.00 DE LCh +0.00 +0.00 +0.00 (gray 70%)
  A02 RGB 0.342 0.628 0.461 XYZref 0.613 0.635 0.527 XYZcam 0.606 0.628 0.520 sRGB #D0D0D1 #CFCFCF DE 0.29 DE LCh -0.25 -0.14 +0.03 (gray 80%)
  A01 RGB 0.541 0.990 0.731 XYZref 0.968 1.000 0.831 XYZcam 0.958 0.990 0.826 sRGB #FEFEFE #FEFDFE DE 0.32 DE LCh -0.21 +0.07 -0.23 (white)
  A04 RGB 0.111 0.204 0.150 XYZref 0.199 0.206 0.171 XYZcam 0.197 0.204 0.169 sRGB #7D7D7D #7D7C7C DE 0.35 DE LCh -0.23 +0.19 +0.18 (gray 50%)
  D04 RGB 0.092 0.234 0.237 XYZref 0.186 0.201 0.295 XYZcam 0.187 0.203 0.289 sRGB #547FA5 #5680A4 DE 0.81 DE LCh +0.29 -0.63 -0.78 (purple-blue)
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.json"...
Complete!
cynamon@Francoiss-MBP D750/spyderchecker_24/D750_60mm_CN-T96_20220724$ ~/programs/dcamprof/dcamprof/src/dcamprof make-dcp -n "Nikon D750" -d "NikonD750_60mmAFD_CN-T96" -t acr ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.{json,dcp}
Generating 2.5D HueSatMap with 90x30 = 2700 entries...done!
The tone curve's contrast value is 1.30 (=> auto chroma scaling value 1.121)
Generating 3D LookTable with 90x30x30 = 81000 entries for the neutral tone reproduction operator...
  0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..100%
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.dcp"...
Complete!

Thanks for your future comments :slight_smile:

EDIT: I've just tried without applying the flat-field feature in RT, and `dcamprof` does not complain about the `-g` glare-matching option. I get slightly different results, too
$ scanin -v -p -dipn nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif /opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.{cht,cie}                                                                                                         
Input file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.tif': w=2805, h=4164, d = 3, bpp = 16
Data input file '/opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.cie'
Data output file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'
Chart reference file '/opt/homebrew/Cellar/argyll-cms/2.3.1/ref/SpyderChecker24.cht'
Creating diagnostic tiff file 'diag.tif'
About to allocate scanrd_ object
Verbosity = 2, flags = 0x62a01
About to read input tiff file and discover groups
adivval = 1.000000
About to calculate edge lines
510 useful edges out of 1670
About to calculate perspective correction
Perspective correction factors = 0.000000 0.000000 1402.500000 2082.000000
About to calculate rotation
Mean angle = -0.053305
Standard deviation = 1.008911
Robust mean angle = -0.044384 from 451 lines
About to calculate feature information
About to read reference feature information
Read of chart reference file succeeded
About to match features
Checking xx
Checking yy
Checking xy
Checking yx
Checking xix
Checking yiy
Checking xiy
Checking yix
Axis matches for each possible orientation:
  0: xx  = 0.395826, yy  = 0.275036, xx.sc  = 0.146802, yy.sc  = 0.146177
 90: xiy = 0.272850, yx  = 0.142274, xiy.sc = 0.145725, yx.sc  = 0.286400
180: xix = 0.428007, yiy = 0.263672, xix.sc = 0.146430, yiy.sc = 0.146010
270: xy  = 0.285262, yix = 0.142274, xy.sc  = 0.145854, yix.sc = 0.286400
r0 = 0.479945, r90 = 0.156570, r180 = 0.501262, r270 = 0.162341
bcc = 0.501262, wcc = 0.156570
There are 2 candidate rotations:
cc = 0.479945, irot = -0.044384, xoff = -15.284704, yoff = -34.926774, xscale = 6.811896, yscale = 6.841045
cc = 0.501262, irot = 179.955616, xoff = -2823.046997, yoff = -4212.120231, xscale = 6.829193, yscale = 6.848861
About to compute match transform for rotation -0.044384 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
About to compute match transform for rotation 179.955616 deg.
About to setup value scanrdg boxes
About to read raster values
About to compute expected value correlation
Expected value distance values are:
0, rot -0.044384: 3152.732481
1, rot 179.955616: 4915.339234
Chosen rotation -0.044384 deg. as best
About to compute final match transform
Improve match
About to setup value scanrdg boxes
About to read raster values
About to write diag file
Writing output values to file 'nikon_D750_60mmAFD_CN-T96_spydercheckr24.ti3'

$ ~/programs/dcamprof/dcamprof/src/dcamprof make-profile -g ~/programs/dcamprof/dcamprof/data-examples/cc24-layout.json ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.{ti3,profile.json}
Reading target...
Glare test before glare matching...
Warning: large dynamic range difference detected. Likely glare issue.
Camera G on darkest patch(es) is 107.8% lighter compared to observer Y.
  Y dynamic range is 5.01 stops, G dynamic range is 3.95 stops, difference
  1.06 stops. A small difference is normal, while a large indicates that there
  is glare.
Glare-matching target...
  Minimum Y changed from 0.027800 to 0.030330. Glare was modeled in RGB space.
Testing glare after adjusting reference values (camera G and observer Y should
  be close).
Warning: large dynamic range difference detected. Likely glare issue.
Camera G on darkest patch(es) is 91.2% lighter compared to observer Y.
  Y dynamic range is 4.89 stops, G dynamic range is 3.95 stops, difference
  0.94 stops. A small difference is normal, while a large indicates that there
  is glare.
Generating values for the calibration illuminant D50...
The most neutral patch (A02) differs 10.94 DE from actual neutral,
  transforming target reference XYZ values to match, using CAT02.
Automatic LUT relaxation weights assigned.
Making camera profile...
Finding a camera raw RGB to CIE XYZ matrix for calibration illuminant D50...
Warning: whitest (most neutral) patch in target (A02) differs DE 10.94
  from calibration illuminant, matrix precision may suffer.
Inverting to get ColorMatrix:
  {
    "ColorMatrix1": [
      [  0.922050, -0.237297, -0.089149 ],
      [ -0.416511,  1.167346,  0.240297 ],
      [ -0.102895,  0.195014,  0.642755 ]
    ]
  }
Matrix patch match average DE 2.97, DE LCh 2.09 1.33 0.87
                    median DE 2.92, DE LCh 1.54 1.05 0.62
                       p90 DE 4.64, DE LCh 4.50 2.63 1.39
                       max DE 7.07, DE LCh 7.03 3.37 3.35
ColorMatrix optimal white balance for target: 0.599767,1,0.649568 (m1.66731,1,1.53948)
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  {
    "LUTMatrix1": [
      [  0.615083,  0.139120,  0.210015 ],
      [  0.274295,  0.660884,  0.064821 ],
      [  0.008659,  0.016613,  0.799929 ]
    ]
  }
LUTMatrix optimal white balance for target: 0.542687,1,0.73839 (m1.84268,1,1.3543)
Matrix patch match average DE 6.77, DE LCh 3.43 4.99 2.53
                    median DE 7.28, DE LCh 3.55 6.07 2.10
                       p90 DE 9.76, DE LCh 5.85 9.10 5.44
                       max DE 13.53, DE LCh 11.99 9.54 7.21
Finding a camera raw RGB to CIE XYZ matrix for connection space illuminant D50...
  Y row limit set to -0.2.
Applying white-balance to get ForwardMatrix:
  {
    "ForwardMatrix1": [
      [  0.691589,  0.180565,  0.092065 ],
      [  0.261856,  0.871919, -0.133775 ],
      [  0.047142, -0.294619,  1.072679 ]
    ]
  }
ForwardMatrix optimal white balance for target: 0.542687,1,0.73839 (m1.84268,1,1.3543)
Matrix patch match average DE 3.52, DE LCh 2.44 1.77 1.25
                    median DE 3.79, DE LCh 1.93 1.08 1.15
                       p90 DE 5.43, DE LCh 5.03 3.73 3.39
                       max DE 7.64, DE LCh 7.17 4.38 3.98
Making 2.5D chromaticity-addressed lookup table for XYZ correction...
8.33% of the patches was put in a chromaticity group due to nearby neighbor.
  25.00% of the patches was removed due to being nearby the whitepoint.
  Largest chromaticity group contains 2 patches. Patch count reduced from
  24 to 16. Note that patch matching cannot reach 100% when chromaticity
  groups are formed, as the LUT matches the average within a group.
Lightness axis is disabled. Since lightness affects chroma, the LUT chroma
  control points are recalculated to better match the uncorrected lightness.
  A residual error of up to about 0.2 DE is expected.
Relaxing LUT stretch with up to 4.00 DE. Iterating over 16 patches...
  Lightness correction is disabled.
Average DE for the 16 tested patches increased to 3.34 after LUT relax.
  43.75% could do without LUT correction.
Native LUT patch match average DE 3.46, DE LCh 2.43 1.52 0.94
                        median DE 3.54, DE LCh 1.93 1.46 1.02
                           p90 DE 5.18, DE LCh 5.03 3.26 1.66
                           max DE 7.35, DE LCh 7.24 3.39 2.22
5 worst patches for Overall DE:
  B06 RGB 0.046 0.129 0.222 XYZref 0.074 0.054 0.250 XYZcam 0.118 0.095 0.339 sRGB #0044A0 #1652B4 DE 7.35 DE LCh +7.24 -0.57 -1.60 (dark strong purple-blue)
  A06 RGB 0.034 0.065 0.050 XYZref 0.030 0.032 0.028 XYZcam 0.062 0.064 0.057 sRGB #303134 #46474A DE 7.17 DE LCh +7.17 +0.23 +0.13 (gray 20%)
  B04 RGB 0.199 0.084 0.048 XYZref 0.215 0.123 0.043 XYZcam 0.275 0.161 0.062 sRGB #B62E3C #CA394A DE 5.18 DE LCh +5.03 +0.67 -1.02 (red)
  B01 RGB 0.062 0.274 0.288 XYZref 0.125 0.189 0.339 XYZcam 0.161 0.216 0.346 sRGB #00A2C4 #0098BA DE 4.68 DE LCh +3.08 -3.06 +1.66 (blue)
  D06 RGB 0.094 0.113 0.068 XYZref 0.114 0.101 0.055 XYZcam 0.149 0.132 0.074 sRGB #735146 #825C52 DE 4.49 DE LCh +4.47 +0.38 -0.32 (dark grayish red)
5 worst patches for Lightness DE:
  B06 RGB 0.046 0.129 0.222 XYZref 0.074 0.054 0.250 XYZcam 0.118 0.095 0.339 sRGB #0044A0 #1652B4 DE 7.35 DE LCh +7.24 -0.57 -1.60 (dark strong purple-blue)
  A06 RGB 0.034 0.065 0.050 XYZref 0.030 0.032 0.028 XYZcam 0.062 0.064 0.057 sRGB #303134 #46474A DE 7.17 DE LCh +7.17 +0.23 +0.13 (gray 20%)
  B04 RGB 0.199 0.084 0.048 XYZref 0.215 0.123 0.043 XYZcam 0.275 0.161 0.062 sRGB #B62E3C #CA394A DE 5.18 DE LCh +5.03 +0.67 -1.02 (red)
  D06 RGB 0.094 0.113 0.068 XYZref 0.114 0.101 0.055 XYZcam 0.149 0.132 0.074 sRGB #735146 #825C52 DE 4.49 DE LCh +4.47 +0.38 -0.32 (dark grayish red)
  A05 RGB 0.063 0.115 0.085 XYZref 0.086 0.089 0.077 XYZcam 0.111 0.116 0.094 sRGB #525456 #5F5F5E DE 4.38 DE LCh +4.01 -0.94 -1.49 (gray 40%)
5 worst patches for Chroma DE:
  B03 RGB 0.433 0.570 0.134 XYZref 0.674 0.696 0.073 XYZcam 0.680 0.692 0.117 sRGB #FED500 #FED345 DE 3.65 DE LCh -0.12 -3.39 -1.34 (light vivid yellow)
  C05 RGB 0.240 0.495 0.158 XYZref 0.404 0.519 0.095 XYZcam 0.421 0.517 0.132 sRGB #AFCA3E #B5C75A DE 3.37 DE LCh -0.08 -3.35 -0.29 (light strong yellow-green)
  A01 RGB 0.541 1.000 0.743 XYZref 0.902 0.938 0.820 XYZcam 0.962 0.997 0.826 sRGB #F3F8FE #FEFEFE DE 3.54 DE LCh +1.36 -3.26 +0.20 (white)
  A03 RGB 0.220 0.405 0.298 XYZref 0.385 0.403 0.357 XYZcam 0.390 0.405 0.332 sRGB #A5AAB0 #AAAAA9 DE 3.87 DE LCh +0.14 -3.16 -2.22 (gray 70%)
  B01 RGB 0.062 0.274 0.288 XYZref 0.125 0.189 0.339 XYZcam 0.161 0.216 0.346 sRGB #00A2C4 #0098BA DE 4.68 DE LCh +3.08 -3.06 +1.66 (blue)
5 worst patches for Hue DE:
  A03 RGB 0.220 0.405 0.298 XYZref 0.385 0.403 0.357 XYZcam 0.390 0.405 0.332 sRGB #A5AAB0 #AAAAA9 DE 3.87 DE LCh +0.14 -3.16 -2.22 (gray 70%)
  B02 RGB 0.221 0.171 0.192 XYZref 0.323 0.202 0.282 XYZcam 0.343 0.221 0.276 sRGB #C153A3 #C759A1 DE 2.68 DE LCh +1.93 -0.84 +1.66 (purple-red)
  B01 RGB 0.062 0.274 0.288 XYZref 0.125 0.189 0.339 XYZcam 0.161 0.216 0.346 sRGB #00A2C4 #0098BA DE 4.68 DE LCh +3.08 -3.06 +1.66 (blue)
  B06 RGB 0.046 0.129 0.222 XYZref 0.074 0.054 0.250 XYZcam 0.118 0.095 0.339 sRGB #0044A0 #1652B4 DE 7.35 DE LCh +7.24 -0.57 -1.60 (dark strong purple-blue)
  C02 RGB 0.057 0.160 0.238 XYZref 0.130 0.113 0.358 XYZcam 0.137 0.124 0.344 sRGB #145BB8 #2761B4 DE 1.93 DE LCh +1.61 -1.71 -1.58 (dark purple-blue)
5 best patches for Overall DE:
  A02 RGB 0.353 0.650 0.480 XYZref 0.627 0.650 0.536 XYZcam 0.627 0.650 0.536 sRGB #D2D2D2 #D2D2D2 DE 0.00 DE LCh +0.00 +0.00 +0.00 (gray 80%)
  D05 RGB 0.306 0.376 0.232 XYZref 0.449 0.402 0.227 XYZcam 0.484 0.433 0.252 sRGB #D59C8B #DBA292 DE 1.83 DE LCh +1.68 -0.04 -0.73 (red)
  D03 RGB 0.063 0.136 0.061 XYZref 0.108 0.134 0.057 XYZcam 0.112 0.138 0.053 sRGB #596C44 #5D6D40 DE 1.89 DE LCh +0.59 +0.94 -1.52 (yellow-green)
  C02 RGB 0.057 0.160 0.238 XYZref 0.130 0.113 0.358 XYZcam 0.137 0.124 0.344 sRGB #145BB8 #2761B4 DE 1.93 DE LCh +1.61 -1.71 -1.58 (dark purple-blue)
  D02 RGB 0.144 0.284 0.308 XYZref 0.257 0.240 0.417 XYZcam 0.280 0.261 0.434 sRGB #7483C3 #7D87C6 DE 2.25 DE LCh +1.88 -0.41 +0.93 (purple-blue)
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.json"...
Complete!

$ ~/programs/dcamprof/dcamprof/src/dcamprof make-dcp -n "Nikon D750" -d "NikonD750_60mmAFD_CN-T96" -t acr ~/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.{json,dcp}
Generating 2.5D HueSatMap with 90x30 = 2700 entries...done!
The tone curve's contrast value is 1.30 (=> auto chroma scaling value 1.121)
Generating 3D LookTable with 90x30x30 = 81000 entries for the neutral tone reproduction operator...
  0%..10%..20%..30%..40%..50%..60%..70%..80%..90%..100%
Writing output to "/Users/cynamon/Pictures/D750/spyderchecker_24/D750_60mm_CN-T96_20220724/nikon_D750_60mmAFD_CN-T96_spydercheckr24.profile.dcp"...
Complete!

Just tried the new target shot, and I get the dcamprof glare complaint also. What’s the angle of the light relative to the target-camera tangent?

Hi Glenn,
Not sure I understand your question but I’ll try to explain:

  • camera is mounted on a copy stand, looking down
  • target is lying (in landscape orientation, same as the camera sensor) on the copy stand table
  • I am standing about 1.6 m from the target, to the side whose width has the “black” patch.
  • I am holding the light about 1.6 m from the ground and shining it on the target at a 45°-ish angle.

Maybe that’s still a bit too close for the falloff gradient across the target. Maybe I need to be more accurate when orienting the light. But that error message aside, it seems I am reaching better figures. What do you think? Should I consider plotting everything?

45 is a decent angle…

I think you’re going to be fighting glare with that target no matter what angle, distance, or prayer. I remember dealing with the coloraid.de IT8 target, didn’t matter what I did, I always got a little glare somewhere.

diffusing the light might help, but that would just introduce its own bias to the spectral power distribution of the light source you’re trying so hard to present as 3200K.

At this point, I’d recommend procuring a dcamprof-supported matte target…

Well, the Datacolor Spydercheckr 24 is rather matte.
The only grainy-shiny (but not really reflective as on a transparency or glossy paper) stuff is the grid, not the patches themselves.

I’m already diffusing the light a bit : it’s a CN-T96 (a 96-LED panel for video lighting), boxed and with a white diffuser on top (for shining through film). And it’s kind of daylight balanced, so we’re far from 3200K and close to 5000K.