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

MATLAB中的灰度图像与L*a*b空间,matlab,colors,lab-color-space,Matlab,Colors,Lab Color Space,我有很多图像,其中绝大多数是彩色(rgb)图像。我需要在实验室颜色空间的三个不同通道中应用一些空间特征。通过rgb2gray可以直接将RGB颜色空间转换为实验室颜色空间。但是,当图像为灰度时(仅由一个通道组成,数字表示为double,uint8,任何实际情况下),这自然会失败 我熟悉的事实是,实验室颜色空间的“亮度”(L)通道本质上是灰度原始RGB图像。然而,这个问题的性质不同;我想问的是:给定一个已经是灰度的图像,我只需要在实验室颜色空间中得到L通道a和b通道应该是什么?它们应该是零吗?以下示

我有很多图像,其中绝大多数是彩色(rgb)图像。我需要在实验室颜色空间的三个不同通道中应用一些空间特征。通过
rgb2gray
可以直接将RGB颜色空间转换为实验室颜色空间。但是,当图像为灰度时(仅由一个通道组成,数字表示为
double
uint8
,任何实际情况下),这自然会失败

我熟悉的事实是,实验室颜色空间的“亮度”(L)通道本质上是灰度原始RGB图像。然而,这个问题的性质不同;我想问的是:给定一个已经是灰度的图像,我只需要在实验室颜色空间中得到L通道a和b通道应该是什么?它们应该是零吗?以下示例使用预构建的“peppers”图像显示了这样做的视觉效果:

I = imread('peppers.png');
figure; imshow(I, []);
Lab = rgb2gray(I);
Lab(:, :, 2) = 0;
Lab(:, :, 3) = 0;
figure; imshow(Lab, []);
如果运行此代码,您将注意到第二个
imshow
输出第一个图像的淡红色版本,类似于一个旧的暗室。我承认,为了理解如何在灰度图像中处理a和b颜色通道,我并不了解a和b颜色通道代表什么,我一直在寻求帮助。

一个XY类型的问题。 在CIELAB中,0处的a*和b*表示无色度:即灰度

等等,还有更多如果你遇到问题,那是因为你不需要回答这个问题:

错误的假设 首先,不,L*a*b*的L*不是亮度,它与亮度不同

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

L*(*Lstar)是一种感知的亮度,它遵循人类的感知(或多或少,取决于大量的上下文事物)

RGB2灰色 rgb2grey不转换为
L*a*b*

此外,不幸的是,一些用于颜色空间的MATLAB函数在实现中存在错误

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

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

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

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

我讨论这个简单的方法


如果你想看到更深入的细节,a和b在Lab colorspace中定义了矩阵的坐标,矩阵的值定义了像素的颜色
imshow
采用RGB输入,因此当您仅在一个通道中提供非零值时,
imshow
仅在红色通道中显示为强度。它不会自动知道您正在为其提供实验室颜色空间值。如果您希望图像以
imshow
显示灰度,请仅为其提供一个二维矩阵,或使所有三个平面(
Lab(:,:,1:3)
)都等于相同的二维矩阵。谢谢。但是,本质上我问的不是这个,而是以下问题:如果我有一个灰度图像,它的等效实验室空间表示是什么?你做得对。对于灰度,您需要
a*=0
b*=0
@Staus解释了为什么
imshow
显示红色图像。有关更多信息,请参阅。