s_HumanColorBlind
Render images using the Brettell, Vienot, Mollon 1997 method for showing appearance to the color blind.
The algorithm converts XYZ values and a white XYZ into LMS values that can be shown as color image.
(c) ImagEval 2012
Contents
Create an image and get the XYZ of the image and white
scene = sceneCreate; imgXYZ = sceneGet(scene,'xyz'); whiteXYZ = sceneGet(scene,'illuminant xyz'); vcAddAndSelectObject(scene); sceneWindow
ans =
sceneWindow_App with properties:
figure1: [1×1 Figure]
FileMenu: [1×1 Menu]
menuFileLoad: [1×1 Menu]
menuFileSave: [1×1 Menu]
menuSaveImage: [1×1 Menu]
menuFileRefresh: [1×1 Menu]
menuFileClose: [1×1 Menu]
menuEdit: [1×1 Menu]
menuEditSceneName: [1×1 Menu]
menuEditNewScene: [1×1 Menu]
menuCopyScene: [1×1 Menu]
menuEditDelete: [1×1 Menu]
menuEditDeleteSome: [1×1 Menu]
menuSpectral: [1×1 Menu]
menuSPDdiv: [1×1 Menu]
menuSPDMult: [1×1 Menu]
menuEditSetIlluminant: [1×1 Menu]
menuResampleWave: [1×1 Menu]
menuEditAdjustMonochrome: [1×1 Menu]
menuEditTransform: [1×1 Menu]
menuEditScaleSize: [1×1 Menu]
editCrop: [1×1 Menu]
menuEditTranspose: [1×1 Menu]
menuEditRotate: [1×1 Menu]
menuEditRotCW: [1×1 Menu]
menuEditRotCCW: [1×1 Menu]
menuEditFlip: [1×1 Menu]
menuEditFlipHorizontal: [1×1 Menu]
menuEditFlipVertical: [1×1 Menu]
menuEditFontSize: [1×1 Menu]
menuEditClearWindow: [1×1 Menu]
menuEditViewer: [1×1 Menu]
PlotMenu: [1×1 Menu]
menuPlotRadiance: [1×1 Menu]
menuPlotRadianceE: [1×1 Menu]
menuPlotRadImGrid: [1×1 Menu]
menuPlotIllumPhotons: [1×1 Menu]
menuPlotIlluminant: [1×1 Menu]
menuPlotIlluminantImage: [1×1 Menu]
menuPlotReflectance: [1×1 Menu]
menuPlotImTrueSize: [1×1 Menu]
menuPlotMultipleRGB: [1×1 Menu]
menuPlotImageSpectral: [1×1 Menu]
menuPlotDepth: [1×1 Menu]
menuPlotDepthContour: [1×1 Menu]
menuScene: [1×1 Menu]
menuSceneMacbeth: [1×1 Menu]
menuSceneMacbethTungsten: [1×1 Menu]
menuSceneMacbethD50: [1×1 Menu]
menuSceneMacbethD65: [1×1 Menu]
menuSceneMacbethC: [1×1 Menu]
menuSceneMacbethFluorescent: [1×1 Menu]
menuSceneMacbethVisIR: [1×1 Menu]
menuSceneLstar: [1×1 Menu]
menuScenesTest: [1×1 Menu]
menuScenesSweep: [1×1 Menu]
menuHarmonic: [1×1 Menu]
menuSceneFreqOrient: [1×1 Menu]
menuSceneSlantedBar: [1×1 Menu]
menuSceneZonePlate: [1×1 Menu]
menuSceneMackay: [1×1 Menu]
menuSceneCheckerboard: [1×1 Menu]
menuScenePointArray: [1×1 Menu]
menuSceneGridLines: [1×1 Menu]
menuSceneTestLine: [1×1 Menu]
menuSceneRadialLines: [1×1 Menu]
menuUniform: [1×1 Menu]
menuSceneUniformPhoton: [1×1 Menu]
menuSceneUniformEE: [1×1 Menu]
menuUniformD65: [1×1 Menu]
menuSceneUniformEESpecify: [1×1 Menu]
menuSceneUniformBBspecify: [1×1 Menu]
menuScenesRamp: [1×1 Menu]
menuSceneNoise: [1×1 Menu]
menuSceneFile: [1×1 Menu]
menuSceneMultiSpec: [1×1 Menu]
menuSceneChooseRGB: [1×1 Menu]
menuFileChooseFileMono: [1×1 Menu]
menuAn: [1×1 Menu]
menuAnalyzeLine: [1×1 Menu]
menuAnalyzeLineH: [1×1 Menu]
menuAnalyzeLineV: [1×1 Menu]
menuAnalyzeLFFTH: [1×1 Menu]
menuAnalyzeLFFTv: [1×1 Menu]
menuAnalyzeLineWave: [1×1 Menu]
menuAnalyzeLWH: [1×1 Menu]
menuAnalyzeLWV: [1×1 Menu]
menuAnalyzeROI: [1×1 Menu]
menuLuminance: [1×1 Menu]
menuAnalyzeChromaticity: [1×1 Menu]
menPlotLumLin: [1×1 Menu]
PlotLuminance: [1×1 Menu]
menuAnIlluminantCCT: [1×1 Menu]
menuHelp: [1×1 Menu]
menuHelpSceneProgrammers: [1×1 Menu]
menuHelpProgGuide: [1×1 Menu]
menuHelpAppNotes: [1×1 Menu]
UITable: [1×1 Table]
Panel: [1×1 Panel]
txtMessage: [1×1 Label]
Panel_2: [1×1 Panel]
popupRender: [1×1 DropDown]
text21: [1×1 Label]
txtDisplayGamma: [1×1 Label]
editGamma: [1×1 EditField]
btnPrev: [1×1 Button]
btnNext: [1×1 Button]
popupSelectScene: [1×1 DropDown]
sceneImage: [1×1 UIAxes]
MoreinfoButton: [1×1 Button]
boxDescription: [1×1 ButtonGroup]
txtSceneDescription: [1×1 Label]
boxScene: [1×1 ButtonGroup]
txtM: [1×1 Label]
txtDist: [1×1 Label]
editDistance: [1×1 EditField]
txtDeg: [1×1 Label]
txtFOV: [1×1 Label]
editHorFOV: [1×1 EditField]
txtCDM2: [1×1 Label]
txtLum: [1×1 Label]
editLuminance: [1×1 EditField]
imageMenu: [1×1 ContextMenu]
HorLumLineMenu: [1×1 Menu]
RefreshMenu: [1×1 Menu]
Convert to color blind appearance and then image as srgb
% Show color images in a window vcNewGraphWin; for cbType = 1:3 lms = xyz2lms(imgXYZ, cbType, whiteXYZ); cbXYZ = imageLinearTransform(lms, colorTransformMatrix('lms2xyz')); subplot(3,1,cbType), imagesc(xyz2srgb(cbXYZ)); axis image; axis off end
To visualize where the values are in 3-space do this In general for the Brettell algorithm, the data are in a bi-plane, not a single plane. In this case, the biplane is onlyk visible for the tritan data, not the protan or deutan data.
vcNewGraphWin; for cbType = 1:3 lms = xyz2lms(imgXYZ, cbType, whiteXYZ); cbXYZ = imageLinearTransform(lms, colorTransformMatrix('lms2xyz')); tmp = RGB2XWFormat(cbXYZ); subplot(3,1,cbType), plot3(tmp(:,1),tmp(:,2),tmp(:,3),'.'); grid on end
Change the scene illumination
scene = sceneFromFile('StuffedAnimals_tungsten-hdrs.mat','multispectral'); imgXYZ = sceneGet(scene,'xyz'); whiteXYZ = sceneGet(scene,'illuminant xyz'); % vcAddAndSelectObject(scene); sceneWindow % Show color images in a window vcNewGraphWin; for cbType = 1:3 lms = xyz2lms(imgXYZ, cbType, whiteXYZ); cbXYZ = imageLinearTransform(lms, colorTransformMatrix('lms2xyz')); subplot(3,1,cbType), imagesc(xyz2srgb(cbXYZ)); axis image; axis off end
Reading multispectral data with mcCOEF. Saved using svd method
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');
%}
sSamples = [12,12,25,25]*5; nSamples = sum(sSamples);
pSize = 24;
[scene, samples] = sceneReflectanceChart(sFiles,sSamples,pSize);
scene = sceneAdjustLuminance(scene,100);
vcAddAndSelectObject(scene); sceneWindow;
imgXYZ = sceneGet(scene,'xyz');
whiteXYZ = sceneGet(scene,'illuminant xyz');
vcNewGraphWin;
for cbType = 1:3
lms = xyz2lms(imgXYZ, cbType, whiteXYZ);
cbXYZ = imageLinearTransform(lms, colorTransformMatrix('lms2xyz'));
subplot(3,1,cbType), imagesc(xyz2srgb(cbXYZ)); axis image; axis off
end