MATLAB中的灰度图像和L * a * b空间

时间:2014-12-02 00:11:32

标签: matlab colors lab-color-space

我有一堆图像,其中绝大多数是彩色(rgb)图像。我需要在Lab颜色空间的三个不同通道中应用一些空间特征。通过rgb2gray可以直接从RGB颜色空间到Lab颜色空间的转换。但是,当图像为灰度时,这自然会失败(仅由一个通道组成,数值表示为doubleuint8,真的是任何东西。

我熟悉Lab颜色空间的“亮度”(L)通道基本上是灰度级原始RGB图像。然而,这个问题具有不同的性质;我要问的是:给定一个已经是灰度的图像,我很容易在Lab色彩空间中得到L通道。 a和b频道应该?它们应该为零吗?以下示例使用预构建的“辣椒”图像,显示了这样做的视觉效果:

I = imread('peppers.png');
figure; imshow(I, []);
Lab = rgb2gray(I);
Lab(:, :, 2) = 0;
Lab(:, :, 3) = 0;
figure; imshow(Lab, []);

如果您运行此代码,您会注意到第二个imshow输出第一个图像的红色版本,类似于旧的黑暗房间。我承认不了解a和b颜色通道代表什么,以便了解我应该如何处理灰度图像,并寻求一些帮助。

1 个答案:

答案 0 :(得分:0)

XY类型的问题。

在CIELAB中,a *和b *为0表示没有色度:即为灰度。

还有更多信息! 。如果您遇到问题,那是因为那不是您需要回答的实际问题:

错误的假设

首先,不,L*a*b*的L *不是亮度,并且与亮度不同。

亮度(L或Y)是光线的线性度量。

L * (* Lstar)是感知上的亮度,它遵循人类的感知(或多或少,取决于不计其数的上下文事物)。

rgb2grey

rgb2grey无法转换为L*a*b*

不幸的是,不幸的是,某些用于色彩空间的MATLAB函数在实现中存在错误。

如果要将sRGB颜色/图像/像素转换为LAB,则需要遵循以下流程图:

sRGB->线性RGB-> CIEXYZ-> CIELAB

如果只需要灰度或亮度信息,而没有颜色,则可以:

sRGB->线性RGB-> CIE Y (光谱加权)-> L * (感知亮度)

我讨论了sRGB to L* in this post

的简单方法

如果您想了解更多详细信息,请I suggest Bruce Lindbloom.