绘制a*和b*颜色
今天的博客帖子来自规划一个主题,但随后左转左转并完全做其他事情。我正在考虑写作与之相关的东西
meshgrid.
,所以我正在看一些旧博客帖子
meshgrid.
是使用。例如,
meshgrid.
用了这个
30 - 12月- 2010
关于实验室颜色空间中的A *和B *组件。
然而,在阅读那个旧的帖子时,我意识到我在其中做出了相当恶劣的概念错误。我绘制了域上的颜色
$ -100 \leq a^* \leq 100 $
那
$ -100 \ LEQ B ^ * \ LEQ 100 $
,使用
$ l ^* = 90 $
,不实现或解释大多数人
$ (b L ^ * ^ * ^ *)美元
组合远远超出sRGB范围。换句话说,它们不能真正显示(即使是在宽色域显示器上)。此外,我当时使用的功能已经被新功能所取代,这些新功能不仅更容易使用,而且在查看域内和域外问题时也更有帮助。
因此,我决定更新和改进旧帖子。
显示美元(a ^ * ^ *)美元固定的颜色$ l ^ * $
就像我上次做的那样,我将从
$ l ^ * = 90 $
,这是在天平的一端。对于这个选择
$ l ^ * $
,让我们看看什么颜色
美元(a ^ * ^ *)美元
飞机看起来像,考虑到可能出歌剧院的颜色。
清除
关闭全部
a = -110:0.4:110;
B = -110:0.4:110;
(aa、bb) = meshgrid (a, b);
L = 90;
ll = l *α(尺寸(aa));
实验室=猫(3,LL,AA,BB);
在以前的帖子里,我用的是
makecform.
和
applycomform.
将Lab值转换为sRGB值。这一次,我将使用
lab2rgb
.
RGB = Lab2RGB(实验室);
使用时
lab2rgb
,域外值由大于1或小于0的输出值表示。
Out_gamut_mask = any((rgb > 1) | (rgb < 0),3);
让我们用灰色替换出色域并显示结果。设置
y
图像显示到的方向
'普通的'
所以,积极
$ b ^ * $
是顶部,这是对这些类型的平常惯例。此外,显示轴滴答声和标签。
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”B,B,'ydata',一种)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
标题(的L ^ * = 90美元那“翻译”那“乳胶”)
正如你可以看到的那样
$ l ^ * = 90 $
,只有相对较小的一部分
美元(a ^ * ^ *)美元
飞机在域中。
黄色是最亮的颜色
让我们重复一个更明亮的过程
$ l ^ * $
价值,几乎一直到白色。
L = 96;
ll = l *α(尺寸(aa));
实验室=猫(3,LL,AA,BB);
RGB = Lab2RGB(实验室);
Out_gamut_mask = any((rgb > 1) | (rgb < 0),3);
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”B,B,'ydata',一种)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
标题(的L ^ * = 96美元那“翻译”那“乳胶”)
上面的图表明黄色是唯一一种可以显示几乎和白色一样亮的颜色。
蓝色是最暗的颜色
现在让我们尝试黑暗的东西。
l = 25;
ll = l *α(尺寸(aa));
实验室=猫(3,LL,AA,BB);
RGB = Lab2RGB(实验室);
Out_gamut_mask = any((rgb > 1) | (rgb < 0),3);
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”B,B,'ydata',一种)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
标题(L ^ * = 25美元的那“翻译”那“乳胶”)
虽然您可以在上面制作一些比较不饱和的绿色和红色区域,但蓝色是唯一完全饱和的颜色。
内音域是什么美元(a ^ * ^ *)美元对于每一个地区$ l ^ * $?
现在我要做多维立方体
$ l ^ * $
那
$ a ^ * $
, 和
$ b ^ * $
它们整个范围内的值并立即计算域中的颜色。
找到
$ l ^ * $
那
$ a ^ * $
那
$ b ^ * $
填充三维区域的值。将三元组转换为SRGB。
l = 0:100;
[ll,bb,aa] = ndgrid(l,b,a);
rgb = lab2rgb([LL(:) aa(:) bb(:)]));
重塑使颜色组件处于第4维。制作一个三维的域外蒙版。用灰色替换域外值。
RGB = REPAPE(RGB,[大小(LL)3]);
面膜=任何((RGB> 1)|(RGB <0),4);
rgb (repmat(面具,1,1,3))= 0.6;
显示的一组颜色
$ l ^ * = 50 $
(对应于第一维中的索引51)。在第一个维度中索引51,使用
挤
在显示为图像之前消除该维度。
RGB_50 =挤压(RGB(51,:::,:));
imshow(rgb_50,“XData”B,B,'ydata',一种)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
标题(L ^ * = 50美元的那“翻译”那“乳胶”)
这是一个动画,创造使用
imwrite
,显示值的内域颜色
$ l ^ * $
范围从0到100。
内音域是什么$ l ^ * $范围到处都是美元(a ^ * ^ *)美元飞机?
这些实验让我想知道如何更广泛地想象颜色的范围,同时保持可视化
美元(a ^ * ^ *)美元
飞机。这里有一个相关的问题:特定的
$ a ^ * $
和
$ b ^ * $
值,最低的是什么
$ l ^ * $
它的色域值是多少?什么值最高?更进一步,我们能知道是否
不
$ l ^ * $
价值是特定的曲目
$ a ^ * $
和
$ b ^ * $
?
我是根据上面计算的多维数组算出来的。
的最小域内值
二
数组的第一个维度,利用
最小值
函数忽略了
南
默认值。使用
挤
消除第一维的功能,其大小为1后
最小值
操作。
ll_min = ll;
LL_min(面具)=南;
LL_min =挤压(min (LL_min [], 1));
中找到最大的域内值
二
沿第一维数组。
ll_max = ll;
ll_max(mask)= nan;
LL_max =挤压(max (LL_max [], 1));
这是最暗和最亮的酒吧
$ l ^ * $
价值观
美元(a ^ * ^ *)美元
平面,用灰度ColorMap显示,以及相关的颜色。
Tiledlayout(2,2)
nexttile (1)
imshow(ll_min,[],“XData”,一种,'ydata',b)
轴xy
轴上
标题(“最低in-gamut L ^ * $美元”那“翻译”那“乳胶”)
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
nexttile (2)
imshow(ll_max,[],“XData”,一种,'ydata',b)
轴xy
轴上
标题(“最大in-gamut $ L ^ * $”那“翻译”那“乳胶”)
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
nexttile (3)
(aa、bb) = meshgrid (a, b);
rgb_min = lab2rgb(猫(3 LL_min aa、bb));
imshow(rgb_min,“XData”,一种,'ydata',b)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
nexttile (4)
rgb_max = lab2rgb(猫(3 LL_max aa、bb));
imshow(rgb_max,“XData”,一种,'ydata',b)
轴xy
轴上
包含('$ a ^ * $'那“翻译”那“乳胶”)
ylabel (“$ b ^ * $”那“翻译”那“乳胶”)
最后,我想制作一个动画,展示上述图中的颜色如何从最暗的颜色变为最亮的颜色,从另一个四维立方体的RGB图像开始:
n = 96;
[BB2,AA2] = ndGrid(b,a);
RGB_Scan =零([尺寸(BB2)3(n + 1)]);
ll_diff = ll_max - ll_min;
为了k = 0: N
L_k = LL_min + (LL_diff * (k/N));
rgb_scan (::,:, k + 1) = lab2rgb (cat (3 L_k aa2、bb2组));
结尾
这是由此产生的动画,也创建使用
imwrite
.(注意,动画质量受到GIF限制,每帧不超过256种不同颜色。)
|
注释
请点击留下评论在这里登录到你的MathWorks帐户或创建一个新的。