The Natural-100 reflectance chart

We designed a color chart containing 100 natural surfaces reflectances, including a neutral (achromatic) series. Germain et al., IS&T/SPIE, 2015

The Natural-100 chart contains many more surfaces than the classic Macbeth Color Checker. While the MCC is useful for certain extreme color reproduction tests, the N-100 chart is useful for testing more practical color algorithms including people.

We show both how to create several types of reflectance charts using the reflectance data included in ISET. We also show how to store the parameters so you can recreate the same chart at a later time.

See also: sceneCreate, sceneReflectanceChart, sceneAdjustIlluminant, s_sceneReflectanceChartBasisFunctions

Copyright ImagEval Consultants, LLC, 2010.

Contents

ieInit

Default usage with sceneCreate

scene = sceneCreate('reflectance chart');
ieAddObject(scene);
sceneWindow;

Create your own chart

% The files containing the reflectances are in ISET format, readable by
% s = ieReadSpectra(sFiles{1});
sFiles = cell(1,4);
sFiles{1} = which('MunsellSamples_Vhrel.mat');
sFiles{2} = which('Food_Vhrel.mat');
sFiles{3} = which('DupontPaintChip_Vhrel.mat');
sFiles{4} = which('HyspexSkinReflectance.mat');

%{
sFiles{1} = fullfile(isetRootPath,'data','surfaces','reflectances','MunsellSamples_Vhrel.mat');
sFiles{2} = fullfile(isetRootPath,'data','surfaces','reflectances','Food_Vhrel.mat');
sFiles{3} = fullfile(isetRootPath,'data','surfaces','reflectances','DupontPaintChip_Vhrel.mat');
sFiles{4} = fullfile(isetRootPath,'data','surfaces','reflectances','HyspexSkinReflectance.mat');
%}

% The number of samples from each of the data sets, respectively
sSamples = [12,12,24,24];    %

% How many row/col spatial samples in each patch (they are square)
pSize    = 24;           % Patch size
wave     = [];           % Whatever is in the reflectance data file
grayFlag = 0;            % No gray strip
sampling = 'no replacement';

scene = sceneCreate('reflectance chart',pSize,sSamples,sFiles,wave,grayFlag,sampling);

% The chart parameters are attached to the scene object
sceneGet(scene,'chart parameters')

% Show it on the screen
ieAddObject(scene); sceneWindow;
ans = 

  struct with fields:

      sFiles: {1×4 cell}
    sSamples: {1×4 cell}
    grayFlag: [0]
    sampling: 'no replacement'
       pSize: [24]
        wave: [31×1 single]
         XYZ: [9×8×3 single]
      rowcol: [9 8]
     rIdxMap: [216×192 double]

Change the illumination from the default illuminant (equal energy) to D65

wave = sceneGet(scene,'wave');  d65 = ieReadSpectra('D65',wave);
sceneD65 = sceneAdjustIlluminant(scene,d65);
sceneD65 = sceneSet(sceneD65,'name','Reflectance Chart D65');
ieAddObject(sceneD65); sceneWindow;

Add a gray strip column

grayStrip = 1;
sceneGray = sceneReflectanceChart(sFiles,sSamples,pSize,wave,grayStrip);
sceneGray = sceneSet(sceneGray,'name','Reflectance Chart EE Gray Strip');

ieAddObject(sceneGray); sceneWindow;

Store the parameters needed to make exactly the same chart

[sceneOriginal, storedSamples] = sceneReflectanceChart(sFiles,sSamples,pSize);
sceneOriginal = sceneSet(sceneOriginal,'name','Original');
ieAddObject(sceneOriginal); sceneWindow;

sceneReplica = sceneReflectanceChart(sFiles,storedSamples,pSize);
sceneReplica = sceneSet(sceneReplica,'name','Replica');
ieAddObject(sceneReplica); sceneWindow;