史蒂夫在图像处理与matlab

图像处理概念,算法和matlab

绘制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.gif.

内音域是什么$ 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种不同颜色。)
lmin-to-lmax.gif
|
  • 打印
  • 发送电子邮件

注释

请点击留下评论在这里登录到你的MathWorks帐户或创建一个新的。