File talk:Planckian-locus.png
Jump to navigation
Jump to search
MATLAB code[edit]
N=1000; % size of the image x=linspace(0.1,0.45,N); % area of interest y=linspace(0.25,0.4,N*15/35);% area of interest [u,v,Y]=meshgrid(x,y,50); xyz=applycform(cat(3,u,v,Y),makecform('uvl2xyz')); M=max(xyz,[],3); srgb=applycform(xyz./cat(3,M,M,M),makecform('xyz2srgb')); image(x,y,srgb); axis image; set(gca,'YDir','normal'); % right way up hold; [LAMBDA, XFCN, YFCN, ZFCN]=colorMatchFcn('Judd_Vos'); sl=applycform(cat(3,XFCN,YFCN,ZFCN),makecform('xyz2uvl')); sl_loopx=[sl(:,:,1) sl(:,1,1)]; % make a closed polygon sl_loopy=[sl(:,:,2) sl(:,1,2)]; % make a closed polygon set(patch([0.45 0.1 0.1 0.45 sl_loopx 0.45],... [0.4 0.4 0.25 0.25 sl_loopy 0.25],[0.5 0.5 0.5]),'EdgeColor','none'); plot(sl_loopx,sl_loopy,'k-'); % k- means solid (-) black (k) line axis([0.1 0.45 0.25 0.4]); xlabel('u'); ylabel('v'); shg; grid; [lambda,T]=meshgrid(LAMBDA,[1e3:100:1.1e4 2.5e4 5e4 1e5 5e5 1e6]); spd=lambda.^(-5)./(exp(1.4387752e+7./(lambda.*T))-1); XYZbb=spd*[XFCN' YFCN' ZFCN']; uvbb=applycform(XYZbb./(XYZbb(:,2)*[1 1 1]),makecform('xyz2uvl')); plot(uvbb(:,1),uvbb(:,2),'Color',[0.5 0.5 0.5],'LineWidth',1.5); xyz_wp=[ [1 1 1] ; ... whitepoint('a') ; ... whitepoint('c') ; ... whitepoint('d50') ; ... whitepoint('d55') ; ... whitepoint('d65') ]; uvl_wp=applycform(xyz_wp,makecform('xyz2uvl')); plot(uvl_wp(:,1),uvl_wp(:,2),'xk'); slope=diff(uvbb(:,[1 2])); for i=1:10:100 xi=uvbb(i,1); yi=uvbb(i,2); a=-slope(i,1)/slope(i,2); l=0.05/sqrt(1+a^2); plot([xi-l xi+l],[yi-a*l yi+a*l],'Color',[0.5 0.5 0.5]); end