Creating your own reflectance chart
Create a set of surface reflectance samples to use in establishing sensor correction values.
See also: s_sceneReflectanceCharts, s_sceneReflectanceChartBasisFunctions
Copyright ImagEval Consultants, LLC, 2013.
Contents
ieInit
Randomly select reflectances
% 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 = [24,24,24,24]; % How many row/col spatial samples in each patch (they are square) wave = 400:5:700; sampling = 'no replacement'; [reflectance, sSamples] = ieReflectanceSamples(sFiles,sSamples,wave,sampling);
Plot the samples
vcNewGraphWin; plot(wave,reflectance) xlabel('Wavelength (nm)'); ylabel('Reflectance')

Statistics
% Scale the reflectance samples to equal vector length s = reflectance'*reflectance; s = diag(s); r = reflectance*diag(1./(s.^0.5)); vcNewGraphWin; plot(wave,r) xlabel('Wavelength (nm)'); ylabel('Reflectance') nSamples = size(reflectance,2); mn = mean(r,2); sValues = svd(r - repmat(mn,1,nSamples)); vcNewGraphWin; plot(sValues) grid on xlabel('Principal component') ylabel('Singular value')


Control the surface reflectance samples more finely
sFiles = cell(1,2); sFiles{1} = which('MunsellSamples_Vhrel.mat'); sFiles{2} = which('DupontPaintChip_Vhrel.mat'); %{ sFiles{1} = fullfile(isetRootPath,'data','surfaces','reflectances','MunsellSamples_Vhrel.mat'); sFiles{2} = fullfile(isetRootPath,'data','surfaces','reflectances','DupontPaintChip_Vhrel.mat'); %} sSamples = [12,12]*5; [reflectances, sList] = ieReflectanceSamples(sFiles,sSamples,wave); vcNewGraphWin; plot(wave,reflectances); xlabel('Wavelength (nm)'); ylabel('Reflectance') grid on

The first call specified
reflectances2 = ieReflectanceSamples(sFiles,sList,wave); vcNewGraphWin; plot(reflectances(:),reflectances2(:),'.') xlabel('Set 1') ylabel('Set 2')
