Contents
clear all; close all;
MB色度図内にスペクトル軌跡を描く
whichCones = 'StockmanSharpe';
[S_cones, T_cones, S_Y, T_Y] = SetFundamentals2(whichCones);
[val,index] = max(T_cones(3,:)./T_Y);
s_scaler = 1/(T_cones(3,index)/T_Y(index));
ls = OurLMSToMacBoyn2(T_cones,T_cones,T_Y,s_scaler);
ourStep = 1:4:S_cones(3);
figure;
plot(ls(1,:),ls(2,:),'k-'); hold on;
plot(ls(1,ourStep),ls(2,ourStep),'ko');
axis([-0.02 1.02 -0.02 1.02]);
axis equal;
xlabel('l_M_B', 'FontSize', 16');
ylabel('s_M_B', 'FontSize', 16');
spd_EEW = ones(S_cones(3),1);
cones_EEW = T_cones*spd_EEW;
ls_EEW = OurLMSToMacBoyn2(cones_EEW,T_cones,T_Y,s_scaler);
plot(ls_EEW(1),ls_EEW(2),'ks','MarkerEdgeColor','k','MarkerFaceColor',[0,0,0]);
白色点付近を拡大
ourStep = 1:4:S_cones(3);
figure;
plot(ls(1,:),ls(2,:),'k-'); hold on;
plot(ls(1,ourStep),ls(2,ourStep),'ko');
axis([0.4 1.02 -0.02 0.2]);
axis square;
xlabel('l_M_B', 'FontSize', 16');
ylabel('s_M_B', 'FontSize', 16');
plot(ls_EEW(1),ls_EEW(2),'ks','MarkerEdgeColor','k','MarkerFaceColor',[0,0,0]);
等エネルギー白色に対してsMB=1.0とする。monitor primaryもプロット。
s_scaler = 1 * 683;
spd_EEW = ones(S_cones(3),1);
cones_EEW = T_cones*spd_EEW;
ls_EEW = OurLMSToMacBoyn2(cones_EEW,T_cones,T_Y,s_scaler);
s_scaler = 683/ls_EEW(2);
ls = OurLMSToMacBoyn2(T_cones,T_cones,T_Y,s_scaler);
ls_EEW = OurLMSToMacBoyn2(cones_EEW,T_cones,T_Y,s_scaler);
ourStep = 1:4:S_cones(3);
figure;
plot(ls(1,:),ls(2,:),'k-'); hold on;
plot(ls(1,ourStep),ls(2,ourStep),'ko');
xlabel('l_M_B', 'FontSize', 16');
ylabel('s_M_B', 'FontSize', 16');
plot(ls_EEW(1),ls_EEW(2),'ks','MarkerEdgeColor','k','MarkerFaceColor',[0,0,0]);
cal = LoadCalFile('PTB3TestCal');
cal = SetGammaMethod(cal,0);
cal_cones = SetSensorColorSpace(cal,T_cones,S_cones);
settings_RGB = eye(3);
cones_RGB = SettingsToSensor(cal_cones, settings_RGB);
ls_RGB = OurLMSToMacBoyn2(cones_RGB,T_cones,T_Y,s_scaler);
plot([ls_RGB(1,:) ls_RGB(1,1)],[ls_RGB(2,:) ls_RGB(2,1)],'k');
plot(ls_RGB(1,1),ls_RGB(2,1),'ro','MarkerEdgeColor','r','MarkerFaceColor',[1,0,0]);
plot(ls_RGB(1,2),ls_RGB(2,2),'go','MarkerEdgeColor','g','MarkerFaceColor',[0,1,0]);
plot(ls_RGB(1,3),ls_RGB(2,3),'bo','MarkerEdgeColor','b','MarkerFaceColor',[0,0,1]);
axis([0.5 0.9 -0.02 8]);
axis square;
比較のため、xy色度図で同様の計算を行う
load T_xyz1931;
spd_EEW = ones(S_xyz1931(3),1);
CIE_x = T_xyz1931(1,:) ./ sum(T_xyz1931);
CIE_y = T_xyz1931(2,:) ./ sum(T_xyz1931);
ourStep = 1:4:S_xyz1931(3);
figure;
plot(CIE_x,CIE_y,'k-'); hold on;
plot(CIE_x(ourStep),CIE_y(ourStep),'ko');
axis equal;
axis([-0.02 1.02 -0.02 1.02]);
xlabel('x', 'FontSize', 16');
ylabel('y', 'FontSize', 16');
cal_XYZ = SetSensorColorSpace(cal,T_xyz1931,S_xyz1931);
XYZ_RGB = SettingsToSensor(cal_XYZ, settings_RGB);
xyY_RGB = XYZToxyY(XYZ_RGB);
plot([xyY_RGB(1,:) xyY_RGB(1,1)],[xyY_RGB(2,:) xyY_RGB(2,1)],'k');
plot(xyY_RGB(1,1),xyY_RGB(2,1),'ro','MarkerEdgeColor','r','MarkerFaceColor',[1,0,0]);
plot(xyY_RGB(1,2),xyY_RGB(2,2),'go','MarkerEdgeColor','g','MarkerFaceColor',[0,1,0]);
plot(xyY_RGB(1,3),xyY_RGB(2,3),'bo','MarkerEdgeColor','b','MarkerFaceColor',[0,0,1]);
XYZ_EEW = T_xyz1931*spd_EEW;
xyY_EEW = XYZToxyY(XYZ_EEW);
plot(xyY_EEW(1),xyY_EEW(2),'ks','MarkerEdgeColor','k','MarkerFaceColor',[0,0,0]);
おまけで、uv色度図にもプロットしてみる
figure;
uvY_CIE = XYZTouvY(T_xyz1931);
ourStep = 1:4:S_xyz1931(3);
plot(uvY_CIE(1,:),uvY_CIE(2,:),'k-'); hold on;
plot(uvY_CIE(1,ourStep),uvY_CIE(2,ourStep),'ko');
axis equal;
axis([-0.02 0.9 -0.02 0.7]);
xlabel('u', 'FontSize', 16');
ylabel('v', 'FontSize', 16');
uvY_RGB = XYZTouvY(XYZ_RGB);
plot([uvY_RGB(1,:) uvY_RGB(1,1)],[uvY_RGB(2,:) uvY_RGB(2,1)],'k');
plot(uvY_RGB(1,1),uvY_RGB(2,1),'ro','MarkerEdgeColor','r','MarkerFaceColor',[1,0,0]);
plot(uvY_RGB(1,2),uvY_RGB(2,2),'go','MarkerEdgeColor','g','MarkerFaceColor',[0,1,0]);
plot(uvY_RGB(1,3),uvY_RGB(2,3),'bo','MarkerEdgeColor','b','MarkerFaceColor',[0,0,1]);
uvY_EEW = XYZTouvY(XYZ_EEW);
plot(uvY_EEW(1),uvY_EEW(2),'ko','MarkerEdgeColor','k','MarkerFaceColor',[0,0,0]);