1 | function test_colorimetry |
---|
2 | % TEST_COLORIMETRY Test color space conversion functons |
---|
3 | |
---|
4 | [a,b]= meshgrid(0:.01:1,0:.01:1) ; |
---|
5 | c = ones(size(a)) ; |
---|
6 | d = zeros(size(a)) ; |
---|
7 | |
---|
8 | % 2-D charts |
---|
9 | figure(1) ; set(gcf,'Renderer','OpenGL') ; clf ; test('CIE') ; |
---|
10 | figure(2) ; set(gcf,'Renderer','OpenGL') ; clf ; test('Adobe') ; |
---|
11 | |
---|
12 | % 3-D charts |
---|
13 | figure(3) ; clf ; test3('CIE') ; |
---|
14 | |
---|
15 | % -------------------------------------------------------------------- |
---|
16 | function test(ws) |
---|
17 | % -------------------------------------------------------------------- |
---|
18 | % xy + Luv + Lab diagrams |
---|
19 | [a,b]= meshgrid(0:.01:1,0:.01:1) ; |
---|
20 | c = ones(size(a)) ; |
---|
21 | d = zeros(size(a)) ; |
---|
22 | |
---|
23 | draw(a,b,c,ws) ; |
---|
24 | draw(c,a,b,ws) ; |
---|
25 | draw(b,c,a,ws) ; |
---|
26 | |
---|
27 | % -------------------------------------------------------------------- |
---|
28 | function test3(ws) |
---|
29 | % -------------------------------------------------------------------- |
---|
30 | % 3-D Lab diagram |
---|
31 | |
---|
32 | [a,b]= meshgrid(0:.01:1,0:.01:1) ; |
---|
33 | c = ones(size(a)) ; |
---|
34 | d = zeros(size(a)) ; |
---|
35 | |
---|
36 | draw3(a,b,c,ws) ; |
---|
37 | draw3(c,a,b,ws) ; |
---|
38 | draw3(b,c,a,ws) ; |
---|
39 | draw3(a,b,d,ws) ; |
---|
40 | draw3(d,a,b,ws) ; |
---|
41 | draw3(b,d,a,ws) ; |
---|
42 | set(gca,'Box','on') ; |
---|
43 | |
---|
44 | function draw(r,g,b,ws) ; |
---|
45 | |
---|
46 | I = cat(3,r,g,b) ; |
---|
47 | J = rgb2xyz(I,ws) ; |
---|
48 | |
---|
49 | X = J(:,:,1) ; |
---|
50 | Y = J(:,:,2) ; |
---|
51 | Z = J(:,:,3) ; |
---|
52 | |
---|
53 | x = X./(X+Y+Z) ; |
---|
54 | y = Y./(X+Y+Z) ; |
---|
55 | |
---|
56 | J = xyz2luv( cat(3,X,Y,Z) ) ; |
---|
57 | u = J(:,:,2) ; |
---|
58 | v = J(:,:,3) ; |
---|
59 | |
---|
60 | J = xyz2lab( cat(3,X,Y,Z) ) ; |
---|
61 | L = J(:,:,1) ; |
---|
62 | a = J(:,:,2) ; |
---|
63 | b = J(:,:,3) ; |
---|
64 | |
---|
65 | xc = mean(x(:)) ; |
---|
66 | yc = mean(y(:)) ; |
---|
67 | |
---|
68 | uc = mean(u(:)) ; |
---|
69 | vc = mean(v(:)) ; |
---|
70 | |
---|
71 | ac = mean(a(:)) ; |
---|
72 | bc = mean(b(:)) ; |
---|
73 | |
---|
74 | tightsubplot(4,1,'Box','outer') ; hold on ;title([ws ' RGB gamut in xyY']) ; |
---|
75 | z0 = zeros(size(X)) ; |
---|
76 | h=mesh(x,y,z0) ; |
---|
77 | set(h, 'CData', I, 'FaceColor', 'texturemap') ; |
---|
78 | campos([xc,yc,1]) ; |
---|
79 | camtarget([xc,yc,0]) ; |
---|
80 | axis square ; |
---|
81 | xlabel('y') ; |
---|
82 | ylabel('b') ; |
---|
83 | |
---|
84 | tightsubplot(4,2,'Box','outer') ; hold on ; title([ws ' RGB gamut in Luv']) ; |
---|
85 | h=mesh(u,v,z0) ; |
---|
86 | set(h, 'CData', I, 'FaceColor', 'texturemap') ; |
---|
87 | campos([uc,vc,1]) ; |
---|
88 | camtarget([uc,vc,0]) ; |
---|
89 | axis square ; |
---|
90 | xlabel('u') ; |
---|
91 | ylabel('v') ; |
---|
92 | |
---|
93 | tightsubplot(4,3,'Box','outer') ; hold on ; title([ws ' RGB gamut in Lab']) ; |
---|
94 | h=mesh(a,b,z0) ; |
---|
95 | set(h, 'CData', I, 'FaceColor', 'texturemap') ; |
---|
96 | campos([ac,bc,1]) ; |
---|
97 | camtarget([ac,bc,0]) ; |
---|
98 | axis square ; |
---|
99 | xlabel('a') ; |
---|
100 | ylabel('b') ; |
---|
101 | |
---|
102 | % -------------------------------------------------------------------- |
---|
103 | function draw3(r,g,b,ws) |
---|
104 | % -------------------------------------------------------------------- |
---|
105 | |
---|
106 | I = cat(3,r,g,b) ; |
---|
107 | J = rgb2xyz(I,ws) ; |
---|
108 | |
---|
109 | X = J(:,:,1) ; |
---|
110 | Y = J(:,:,2) ; |
---|
111 | Z = J(:,:,3) ; |
---|
112 | |
---|
113 | J = xyz2lab( cat(3,X,Y,Z) ) ; |
---|
114 | L = J(:,:,1) ; |
---|
115 | a = J(:,:,2) ; |
---|
116 | b = J(:,:,3) ; |
---|
117 | |
---|
118 | hold on ; |
---|
119 | title([ws ' RGB gamut in Lab space']) ; |
---|
120 | h=mesh(a,b,L) ; |
---|
121 | set(h, 'CData', I, 'FaceColor', 'texturemap') ; |
---|
122 | xlabel('a') ; |
---|
123 | ylabel('b') ; |
---|
124 | zlabel('L') ; |
---|
125 | axis square ; |
---|
126 | grid on ; |
---|