史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

策划*和b *颜色

今天的博客文章来自于计划一个主题,然后采取完全锋利的左转和做其他的事情。我在思考写作相关的东西 meshgrid ,所以我在看一些古老的博客文章中 meshgrid 是使用。例如, meshgrid 本文使用的是 30 - 12月- 2010 关于*和b *组件在实验室中颜色空间。
在阅读旧邮政,但是,我意识到我犯了一个相当令人震惊的概念错误。我绘制的颜色域 -100美元\ leq ^ * \ leq 100美元 , -100美元\ b leq ^ * \ leq 100美元 ,使用 L ^ * = 90美元 ,而没有意识到或者解释大部分的 $ (b L ^ * ^ * ^ *)美元 远的sRGB域组合。换句话说,他们并不是真正的可显示的(即使它们监视器)。同时,当时使用的功能我已经取代了新功能,不仅更容易使用,但也更有帮助看着in-gamut与out-of-gamut问题。
因此,我决定到旧邮政更新和改进。

显示美元(a ^ * ^ *)美元对于一个固定的颜色L ^ * $美元

正如我上次,我将开始 L ^ * = 90美元 ,它是明亮的。选择的 L ^ * $美元 ,我们看到的颜色 美元(a ^ * ^ *)美元 飞机的样子,考虑颜色的色域。
清晰的
关闭所有
一个= 110:0.4:110;
b = 110:0.4:110;
(aa、bb) = meshgrid (a, b);
L = 90;
你= L *的(大小(aa));
实验室=猫(3 LL aa、bb);
在旧的帖子,我使用 makecform applycform 将实验室值sRGB值。这次,我将使用 lab2rgb
rgb = lab2rgb(实验室);
当使用 lab2rgb ,out-of-gamut值输出值大于1或小于0。
out_gamut_mask = ((rgb > 1) | (rgb < 0), 3);
我们替换out-of-gamut颜色用灰色和显示结果。设置 y 方向的图像显示 “正常” 所以,积极 ^ * $ $ b 顶部,这是通常的惯例,这些情节。同时,显示轴扁虱和标签。
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”b“YData”,)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
标题(的L ^ * = 90美元,“翻译”,“乳胶”)
正如您可以看到的, L ^ * = 90美元 ,只有相对较小的一部分 美元(a ^ * ^ *)美元 飞机在色域。

黄色是最明亮的颜色

让我们重复这一过程,更加美好 L ^ * $美元 价值,几乎所有的白色。
L = 96;
你= L *的(大小(aa));
实验室=猫(3 LL aa、bb);
rgb = lab2rgb(实验室);
out_gamut_mask = ((rgb > 1) | (rgb < 0), 3);
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”b“YData”,)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
标题(的L ^ * = 96美元,“翻译”,“乳胶”)
上面的图表明,黄色是唯一的颜色可以显示一样明亮的白色。

蓝色是最黑暗的颜色

现在,让我们尝试一些黑暗。
L = 25;
你= L *的(大小(aa));
实验室=猫(3 LL aa、bb);
rgb = lab2rgb(实验室);
out_gamut_mask = ((rgb > 1) | (rgb < 0), 3);
rgb (repmat (out_gamut_mask, 1, 1, 3)) = 0.6;
imshow (rgb,“XData”b“YData”,)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
标题(L ^ * = 25美元的,“翻译”,“乳胶”)
尽管你可以辨认出一些相对不饱和的绿色和红色区域,蓝色是唯一完全饱和的颜色。

什么是in-gamut美元(a ^ * ^ *)美元对于每一个地区L ^ * $美元吗?

现在,我想要的多维数据集 L ^ * $美元 , $ ^ * $ , ^ * $ $ b 整个范围和计算值in-gamut颜色。
找到 L ^ * $美元 , $ ^ * $ , ^ * $ $ b 值填充三维区域。转换sRGB的三元组。
L = 0:100;
(噢,bb, aa) = ndgrid (L b);
rgb = lab2rgb ([LL (:) aa (:) bb (:)));
重塑这颜色组件是在第四维度。做一个三维out-of-gamut面具。用灰色代替out-of-gamut值。
rgb =重塑(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“YData”,)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
标题(L ^ * = 50美元的,“翻译”,“乳胶”)
这是一个动画,创建使用 imwrite 的值,显示了in-gamut颜色 L ^ * $美元 从0到100不等。
varying-L.gif

什么是in-gamutL ^ * $美元范围的美元(a ^ * ^ *)美元飞机吗?

这些实验使我想知道如何想象色彩的范围更广泛,同时保持的可视化 美元(a ^ * ^ *)美元 飞机。这里有一个相关的问题:给定的特定 $ ^ * $ ^ * $ $ b 价值观,什么是最低的 L ^ * $美元 在色域值吗?最高的价值是什么?此外,我们才能判断 没有 L ^ * $美元 值为一个特定的范围 $ ^ * $ ^ * $ $ b 吗?
我出来工作基于上述计算多维数组。
找到最低in-gamut值 数组的第一个维度,利用这一事实 最小值 函数忽略了 默认值。使用 挤压 函数来消除第一个维度,这后的尺寸是1 最小值 操作。
LL_min =你;
LL_min(面具)=南;
LL_min =挤压(min (LL_min [], 1));
一个类似的过程后,发现最大in-gamut值 数组的第一个维度。
LL_max =你;
LL_max(面具)=南;
LL_max =挤压(max (LL_max [], 1));
这里有最黑暗、最聪明的in-gamut L ^ * $美元 值的 美元(a ^ * ^ *)美元 飞机,显示灰度colormap,连同相关的颜色。
tiledlayout (2, 2)
nexttile (1)
imshow (LL_min [],“XData”一个,“YData”,b)
xy
标题(“最低in-gamut L ^ * $美元”,“翻译”,“乳胶”)
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
nexttile (2)
imshow (LL_max [],“XData”一个,“YData”,b)
xy
标题(“最大in-gamut $ L ^ * $”,“翻译”,“乳胶”)
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
nexttile (3)
(aa、bb) = meshgrid (a, b);
rgb_min = lab2rgb(猫(3 LL_min aa、bb));
imshow (rgb_min“XData”一个,“YData”,b)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
nexttile (4)
rgb_max = lab2rgb(猫(3 LL_max aa、bb));
imshow (rgb_max“XData”一个,“YData”,b)
xy
包含(“$ ^ * $”,“翻译”,“乳胶”)
ylabel (“$ b ^ * $”,“翻译”,“乳胶”)
最后,我想做一个动画显示的颜色在上面的情节变化,他们从最黑暗的颜色最轻的,从另一个四维立方体的RGB图像:
N = 96;
[bb2组,aa2] = ndgrid (b);
rgb_scan = 0([大小(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账户登录或创建一个新的。