如何从MATLAB中的rgb图像中检索亮度通道

时间:2014-08-26 16:47:18

标签: matlab image-processing multidimensional-array rgb luminance

我试图检索一组“tif”中的亮度分量。 matlab中的图像。 代码如下:

function [defaultImages] = readImgLum(nFiles) 
% readImgLum reads a specified number of images in 'tif' format
% and retrieves the luminance component
narginchk(1, 1);
defaultImages = cell(nFiles, 1);                % store all images in a vector

for i = 1 : nFiles
    imagePreffix = int2str(i);
    imageFullName = strcat(imagePreffix, '.tif');
    image = imread(imageFullName);
    imageYCbCr = rgb2ycbcr(image);    
    defaultImages{i} = squeeze(imageYCbCr(:,:,1));
end

我是否正确提取亮度分量?

1 个答案:

答案 0 :(得分:2)

正如评论所述,不需要squeeze。这段代码对我来说也很好看。但是,如果您想跳过计算YCbCr的所有分量只是为了提取亮度,请使用SMPTE / PAL标准来计算亮度。如果你想查找源代码,这实际上是在MATLAB的rgb2gray中完成的。

在任何情况下,假设您的图像是无符号的8位整数:

image = double(image); 
defaultImages{i} = uint8(0.299*image(:,:,1) + 0.587*image(:,:,2) + 0.114*image(:,:,3));

BTW,image是MATLAB中的内置命令。它接收任何矩阵,并将其可视化为新图中的图像。我强烈建议您使用另一个变量来存储临时图像,因为您可能稍后会调用更多代码,这需要image作为函数。