色度图绘制

close all; clear all; clc
clear

% ref: https://blog.csdn.net/sns1991sns/article/details/100516724
% ——有详细代码解释
% ref: https://www.bilibili.com/read/cv6220717/

data=[380 0.1741 0.0050; %波长380nm~780nm x,y data
385 0.1740 0.0050;
390 0.1738 0.0049;
395 0.1736 0.0049;
400 0.1733 0.0048;
405 0.1730 0.0048;
410 0.1726 0.0048;
415 0.1721 0.0048;
420 0.1714 0.0051;
425 0.1703 0.0058;
430 0.1689 0.0069;
435 0.1669 0.0086;
440 0.1644 0.0109;
445 0.1611 0.0138;
450 0.1566 0.0177;
455 0.1510 0.0227;
460 0.1440 0.0297;
465 0.1355 0.0399;
470 0.1241 0.0578;
475 0.1096 0.0868;
480 0.0913 0.1327;
485 0.0687 0.2007;
490 0.0454 0.2950;
495 0.0235 0.4127;
500 0.0082 0.5384;
505 0.0039 0.6548;
510 0.0139 0.7502;
515 0.0389 0.8120;
520 0.0743 0.8338;
525 0.1142 0.8262;
530 0.1547 0.8059;
535 0.1929 0.7816;
540 0.2296 0.7543;
545 0.2658 0.7243;
550 0.3016 0.6923;
555 0.3373 0.6589;
560 0.3731 0.6245;
565 0.4087 0.5896;
570 0.4441 0.5547;
575 0.4788 0.5202;
580 0.5125 0.4866;
585 0.5448 0.4544;
590 0.5752 0.4242;
595 0.6029 0.3965;
600 0.6270 0.3725;
605 0.6482 0.3514;
610 0.6658 0.3340;
615 0.6801 0.3197;
620 0.6915 0.3083;
625 0.7006 0.2993;
630 0.7079 0.2920;
635 0.7140 0.2859;
640 0.7190 0.2809;
645 0.7230 0.2770;
650 0.7260 0.2740;
655 0.7283 0.2717;
660 0.7300 0.2700;
665 0.7311 0.2689;
670 0.7320 0.2680;
675 0.7327 0.2673;
680 0.7334 0.2666;
685 0.7340 0.2660;
690 0.7344 0.2656;
695 0.7346 0.2654;
700 0.7347 0.2653;
705 0.7347 0.2653;
710 0.7347 0.2653;
715 0.7347 0.2653;
720 0.7347 0.2653;
725 0.7347 0.2653;
730 0.7347 0.2653;
735 0.7347 0.2653;
740 0.7347 0.2653;
745 0.7347 0.2653;
750 0.7347 0.2653;
755 0.7347 0.2653;
760 0.7347 0.2653;
765 0.7347 0.2653;
770 0.7347 0.2653;
775 0.7347 0.2653;
780 0.7347 0.2653];


l=data(:,1);x=data(:,2);y=data(:,3); %插值加密色度图边缘

li=min(l):0.2:max(l);ll=ceil(length(li)/3);

xi=interp1(l,x,li,'pchip');yi=interp1(l,y,li,'pchip');

xii=linspace(x(end),x(1),ll);yii=linspace(y(end),y(1),ll);

li=[li, max(li)+(1:ll-2)];xi=[xi,xii(2:end-1)];yi=[yi,yii(2:end-1)];


R=700;G=546;B=436; %三基色颜色的波长

RG=fliplr(find(li>G&li<=R));

GB=fliplr(find(li>B&li<=G));

BR=fliplr([find(li>=R),find(li<=B)]);


li=li([RG GB BR]);xi=xi([RG GB BR]);yi=yi([RG GB BR]);%将边缘顺序调整为R-G-B-R一圈

RG=1:(length(RG)+1);GB=length(RG)+(1:length(GB)+1);

BR=length(RG)+length(GB)-2+(1:length(BR));


ti=unwrap(atan2(yi-1/3,xi-1/3));%计算边缘以(1/3,1/3)为中心的角度

ti=ti-ti(1);

tt=ti(1:end-1)+diff(ti)/2;


H=interp1([ti(RG(1)),ti(RG(end))],[0,1/3],tt(RG(1:end-1)));%插值计算各个方向的颜色

H=[H, interp1([ti(GB(1)),ti(GB(end))],[1/3,2/3],tt(GB(1:end-1)))];

H=[H, interp1([ti(BR(1)),ti(BR(end))],[2/3,1],tt(BR(1:end-1)))];


colormap(hsv(1024)); %利用hsv的colormap填充彩色的色度图

surf([xi;ones(size(xi))/3],[yi;ones(size(xi))/3],zeros(2,size(xi,2)),H,'edgecolor','none');

hold on;

plot([0 1 0 0],[0 0 1 0],'linewidth',1,'color',[0.8 0.8 0.8]);%画三角

plot(xi,yi,'k','linewidth',1);%画边缘

hold off;grid on;axis equal;axis([-0.1 1 -0.1 1]);

set(gca,'XTick',0:0.1:1,'Ytick',0:0.1:1);

原文地址:https://www.cnblogs.com/carl2380/p/14749687.html